编写Dockerfile

可以去dockerhub看看官方镜像的Dockerfile作为参考(每个镜像界面上都有Supported tags and respective Dockerfile links)

有很多指令
Dockerfile - 图1

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行从上到下顺序执行
  3. 表示注释

  4. 每一个指令都会创建提交一个新的镜像层并提交。
  1. #常用的
  2. FROM
  3. MAINTAINER
  4. RUN #后面放命令
  5. ADD #压缩包放进去会自动解压
  6. WORKDIR #工作目录
  7. VOLUME #数据卷,可以指定多个["",""]
  8. EXPOSE #暴露端口
  9. CMD #容器启动时要执行的命令,只有最后一个生效,会被覆盖
  10. ENTRYPOINT #容器启动时要执行的命令,可以追加命令,不会被覆盖
  11. ONBUILD #触发器
  12. COPY #类似ADD
  13. ENV #构建的时候设置环境变量
  1. #查看历史命令
  2. docker history [镜像id]
  3. docker history mysql:5.7 --no-trunc
  1. FROM centos
  2. MAINTAINER yangruilin
  3. ENV MYPATH="/usr/local"
  4. WORKDIR $MYPATH
  5. RUN yum -y install vim
  6. RUN yum -y install net-tools
  7. EXPOSE 80
  8. CMD echo $MYPATH
  9. CMD ["ls","-a"]
  10. #其实只执行了ls -a

docker build构建

  1. #注意最后有一个点
  2. docker build -t test-0515:v0.1 .
  3. #-f 指定Dockerfile位置,可以不叫“Dockerfile”
  4. docker build -f /home/docker-test-volume/Dockerfile -t my-centos:v0.1 .

CMD和ENTRYPOINT命令的区别

使用entrypoint,体会一下所谓的可以拼接
以及可覆盖和不可被覆盖

  1. FROM centos
  2. MAINTAINER yangruilin
  3. ENV MYPATH="/usr/local"
  4. WORKDIR $MYPATH
  5. ENTRYPOINT ["ls","-a"]
  1. docker build -f /home/docker-test-volume/Dockerfile2 -t my-centos:v0.2 .

测试一下

  1. docker run my-centos:v0.1
  2. docker run my-centos:v0.1 -l
  3. docker run my-centos:v0.2
  4. docker run my-centos:v0.2 -l

Dockerfile制作tomcat镜像

视频p30

发布自己的镜像

dockerhub注册账号

  1. # 1 登录
  2. docker login -u [用户名] -p [密码]
  3. #提示Login Succeeded表示成功
  4. # 2 tag 重命名
  5. # 不tag的话,会推到docker.io/library/[镜像名],但是会被拒绝
  6. docker tag [原名] [用户名]/[镜像名]:[tag]
  7. # 3 push,会推到docker.io/[用户名]/[镜像名]
  8. docker push [新名]

一个小结

命令的总结:
Dockerfile - 图2

Dockerfile - 图3