Docker 学习 丨 Dockerfile

290 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

Docker 学习 丨 Dockerfile

Dockerfile 是用来构建 docker 镜像的文件, 命令参数脚本

构建步骤

  • 编写一个 dockerfile 文件
  • docker build构建成为一个镜像
  • docker run 运行镜像
  • docker push 发布镜像 (DockerHub, 阿里云镜像仓库)

基础知识

  • 每个保留关键字(指令)都必须是大写字母

  • 命令从上到下执行

  • # 表示注释

  • 每一个指令都会创建提交到一个新的镜像层,并提交

image.png

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