小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
Docker 学习 丨 Dockerfile
Dockerfile 是用来构建 docker 镜像的文件, 命令参数脚本
构建步骤
- 编写一个
dockerfile文件 docker build构建成为一个镜像docker run运行镜像docker push发布镜像 (DockerHub, 阿里云镜像仓库)
基础知识
-
每个保留关键字(指令)都必须是大写字母
-
命令从上到下执行
-
#表示注释 -
每一个指令都会创建提交到一个新的镜像层,并提交
dockerfile 是面向
开发的, 我们以后要发布部署项目,就需要编写 dockerfile 文件Docker 镜像逐渐成为企业交付的标准,主流技术
步骤
开发 > 部署 > 运维
-
Dockerfile: 构建文件,定义了一切的步骤,源代码
-
DockerImages: 通过 Dockerfile 构建生成的镜像,最终发布和运行的产品
-
Docker 容器: 容器就是镜像运行起来提供服务
Dockerfile 指令
FROM # 基础镜像,一切从这里开始构建 (指定基础镜像, 这个镜像的爸爸是谁?) 如: centos
MAINTAINER # 告诉别人,谁负责养他? (指定维护者信息 姓名+邮箱)
RUN # 你想让他干啥,镜像构建的时候需要运行的命令 (在命令前面加上 RUN 即可)
ADD # 给他点创业资金 (COPY文件,会自动解压),例如我要增加个 tomcat
WORKDIR # 镜像的工作目标 (设置当前工作目录)
VOLUME # 给他一个放行李的地方(设置卷,挂载主机目录)
EXPOSE # 他要打开的门是啥 (指定对外的端口)
RUN # Let's Go (指定容器启动后要干的事情)
# 扩展
CMD # 指定这个容器启动的时候要运行的命令, 只有最后一个会生效,可被替代
ENTRYPOINT # 和 CMD 很像, 但是它可以追加命令
ONBUILD # 当构建一个被继承 Dockerfile 这个时候机会运行 ONBUILD 的指令, 触发指令
COPY # 类似 ADD . 将我们文件拷贝到镜像中
ENV # 构建时设置环境变量
实战测试: 构建自己的 Centos
# 编写 Dockerfile 文件
FROM centos
MAINTAINER xujiantong<xujiantong@pay.media>
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 加命令
RUN yum -y install vim
RUN YUM -y install net-tools
# 暴露端口号
EXPOSE 80
# 输出信息
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
# 通过上面这个文件构建镜像
# 命令 docker build -f <dockerfile文件路径> -t 镜像名:[tag] .
docker build -f Dockerfile -t mycentos:1.0 .
# Building 2.9s (8/8) FINISHED
# 测试运行
docker run -it mycentos:1.0
xujiantong@xujiantongdeMac-mini docker % docker run -it mycentos:1.0
[root@2cd65476cc5c local]# pwd
/usr/local
[root@2cd65476cc5c local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.5 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:05 txqueuelen 0 (Ethernet)
# 运行成功
查看构建过程/历史
docker history <IMAGE ID>
IMAGE CREATED CREATED BY SIZE COMMENT
400239e8be02 4 minutes ago CMD ["/bin/sh" "-c" "/bin/bash"] 0B buildkit.dockerfile.v0
<missing> 4 minutes ago CMD ["/bin/sh" "-c" "echo \"----end----\""] 0B buildkit.dockerfile.v0
<missing> 4 minutes ago CMD ["/bin/sh" "-c" "echo $MYPATH"] 0B buildkit.dockerfile.v0
<missing> 4 minutes ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0
<missing> 4 minutes ago RUN /bin/sh -c yum -y install net-tools # bu… 14.7MB buildkit.dockerfile.v0
<missing> 4 minutes ago RUN /bin/sh -c yum -y install vim # buildkit 71.8MB buildkit.dockerfile.v0
<missing> 6 minutes ago WORKDIR /usr/local 0B buildkit.dockerfile.v0
<missing> 6 minutes ago ENV MYPATH=/usr/local 0B buildkit.dockerfile.v0
<missing> 6 minutes ago MAINTAINER xujiantong<xujiantong@pay.media> 0B buildkit.dockerfile.v0
<missing> 7 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 7 days ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 7 days ago /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0… 231MB