Dockerfile编写:
#
表示注释基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板。Dockerfile第一条必须是FROM
# FROM 镜像名
FROM hub.c.163.com/library/tomcat
镜像维护者的姓名和邮箱地址
# 非必须
MAINTAINER ZhangSan [email protected]
容器构建时需要运行的命令,有两种格式:
1、shell格式
# 等同于在终端操作的shell命令
# 格式:RUN <命令行命令>
RUN yum -y install vim
2、exec格式
# 格式:RUN ["可执行文件" , "参数1", "参数2"]
RUN ["./test.php", "dev", "offline"] # 等价于 RUN ./test.php dev offline
当前容器对外暴露出的端口
# EXPOSE 要暴露的端口
# EXPOSE [/
指定在创建容器后, 终端默认登录进来的工作目录
ENV CATALINA_HOME /usr/local/tomcat
WORKDIR $CATALINA_HOME
指定该镜像以什么样的用户去执行,如果不指定,默认是root。(一般不修改该配置)
# USER [:]
USER patrick
用来在构建镜像过程中设置环境变量。这个环境变量可以在后续的任何RUN
指令或其他指令中使用
# 格式 ENV 环境变量名 环境变量值
# 或者 ENV 环境变量名=值
ENV MY_PATH /usr/mytest
# 使用环境变量
WORKDIR $MY_PATH
容器数据卷,用于数据保存和持久化工作。类似于 docker run
的-v
参数。
# VOLUME 挂载点
# 挂载点可以是一个路径,也可以是数组(数组中的每一项必须用双引号)
VOLUME /var/lib/mysql
将宿主机目录下(或远程文件)的文件拷贝进镜像,且会自动处理URL和解压tar压缩包。
类似ADD
,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>
的文件目录复制到新的一层镜像内的<目标路径>
位置。
COPY src dest
COPY ["src", "dest"]
# :源文件或者源目录
# :容器内的指定路径,该路径不用事先建好。如果不存在会自动创建
指定容器启动后要干的事情。有两种格式:
1、shell格式
# CMD <命令>
CMD echo "hello world"
2、exec格式
# CMD ["可执行文件", "参数1", "参数2" ...]
CMD ["catalina.sh", "run"]
3、参数列表格式
# CMD ["参数1", "参数2" ....],与ENTRYPOINT指令配合使用
Dockerfile中如果出现多个CMD
指令,只有最后一个生效。CMD
会被docker run
之后的参数替换。
CMD
是在docker run
时运行,而 RUN
是在docker build
时运行。
用来指定一个容器启动时要运行的命令。
类似于CMD
命令,但是ENTRYPOINT
不会被docker run
后面的命令覆盖,这些命令参数会被当做参数送给ENTRYPOINT
指令指定的程序。
ENTRYPOINT
可以和CMD
一起用,一般是可变参数才会使用CMD
,这里的CMD
等于是在给ENTRYPOINT
传参。
当指定了ENTRYPOINT
后,CMD
的含义就发生了变化,不再是直接运行期命令,而是将CMD
的内容作为参数传递给ENTRYPOINT
指令,它们两个组合会变成
。
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
对于此Dockerfile,构建成镜像 nginx:test
后,如果执行:
docker run nginx test
,则容器启动后,会执行 nginx -c /etc/nginx/nginx.conf
docker run nginx:test /app/nginx/new.conf
,则容器启动后,会执行 nginx -c /app/nginx/new.conf
创建Dockerfile
文件,示例:
FROM ubuntu
MAINTAINER lee
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN apt-get update
RUN apt-get install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "install ifconfig cmd into ubuntu success ....."
CMD /bin/bash
编写完成之后,将其构建成docker镜像。命令:
# 注意:定义的TAG后面有个空格,空格后面有个点
# docker build -t 新镜像名字:TAG .
docker build -t ubuntu:1.0.1 .