dockerfile主要组成部分:
#基础镜像信息
FROM openjdk:8-jdk-slim-bullseye
#暴露端口
EXPOSE 8080
#容器启动时执行指令
CMD ["catalina.sh", "run"]
dockerfile常用指令:
FROM 这个镜像的父亲是谁?(指定基础【base】镜像)
MAINTAINER 告诉别人,它的作者?(指定维护者信息,可以没有)
RUN 容器构建时需要运行的命令(在命令前面加上RUN即可 ps:用来执行shell 命令)
ADD 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点(设置当前工作目录)
VOLUME 容器数据卷,用于数据保存和持久化工作(设置卷,挂载主机目录)
EXPOSE 当前容器对外暴露出的端口(指定对外的端口)
CMD 指定容器启动后的要干的事情
COPY 复制文件 (从容器外 复制到容器内,ps:建议同一目录下)
ENV 用来在构建镜像过程中设置环境变量
USER 指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENTRYPOINT 容器启动后执行的命令
ENTRYPOINT
指令指定的程序创建第一个Dockerfile文件
FROM centos
MAINTAINER xxx
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
#暴露端口
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
就典型的Linux基础镜像来说,大小关系如下:
Ubuntu>CentOS>Debian
因此相比 Ubuntu,其实更推荐使用最轻量级的 Debian镜像,而且它也是一个完整的Release版,可以放心使用
虽然两者都可以添加文件到镜像中,但在一般用法中,还是推荐以COPY指令为首选,原因在于ADD指令并没有COPY指令来的纯粹,ADD会添加一些额外功能,典型的如下 ADD 一个压缩包时,其不仅会复制,还会自动解压,而有时我们并不需要这种额外的功能。
问题:然后docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail
),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,
我们配置启动服务只需要启动响应的service即可。例如service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,
常见就是命令行模式,表示我还有交互操作,别中断
#nginx 的处理方式 dockerfile中
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d
指定容器的后台运行模式。
docker run -d 容器名
前台交互式启动
docker run -it redis:6.0.8
后台守护式启动
docker run -d redis:6.0.8
tomcat的dockerfile
https://github.com/docker-library/tomcat
samba
https://github.com/dperson/samba
参考
https://github.com/CentOS/CentOS-Dockerfiles
总之 参考常见开源的,就对了,学学大佬写的!