Dockerfile自动构建docker镜像
类似ansible剧本,大小几kb
手动做镜像:大小几百M+
dockerfile 支持自定义容器的初始命令
dockerfile主要组成部分:
 基础镜像信息       FROM  centos:6.9
 制作镜像操作指令   RUN yum install openssh-server -y
 容器启动时执行指令 CMD ["/bin/bash"]
dockerfile常用指令:
 FROM 这个镜像的妈妈是谁?(指定基础镜像)
 MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
 LABLE      描述,标签
 
 RUN 你想让它干啥(在命令前面加上RUN即可)
 ADD 给它点创业资金(会自动解压tar)  制作docker基础的系统镜像
 WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
 VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
 EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
 CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
 
dockerfile其他指令: 
 COPY 复制文件(不会解压)rootfs.tar.gz
 ENV  环境变量
 ENTRYPOINT  容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)
参考其他的dockerfile
官方dockerfile或者时速云镜像广场
  1. [root@localhost centos6.9_ssh_nginx]# pwd
  2. /opt/dockerfile/centos6.9_ssh_nginx
  3. [root@localhost centos6.9_ssh_nginx]# cat dockerfile
  4. FROM centos:6.9
  5.  
  6. RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  7. RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  8. RUN yum -y install openssh-server nginx unzip
  9. RUN service sshd start
  10. RUN echo "123456"|passwd --stdin root
  11. RUN rm -rf /usr/share/nginx/html/index.html
  12. ADD xiaoniaofeifei.zip /usr/share/nginx/html/
  13. RUN unzip /usr/share/nginx/html/xiaoniaofeifei.zip -d /usr/share/nginx/html/
  14. ADD init.sh /init.sh
  15. CMD ["/bin/bash","/init.sh"]
  16.  
  17. [root@localhost centos6.9_ssh_nginx]# cat init.sh
  18. #!/bin/bash
  19.  
  20. service sshd restart
  21. nginx -g 'daemon off;'
  22.  
  23. 创建镜像
  24. docker build --network=host -t centos6.9_nginx_ssh:v1 .
  25.  
  26. [root@localhost centos6.9_ssh_nginx]# docker images
  27. REPOSITORY TAG IMAGE ID CREATED SIZE
  28. centos6.9_nginx_ssh v1 f01eeebf918a 9 minutes ago 431MB

优化上述dockerfile文件:

  1. FROM centos:6.9
  2.  
  3. RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  4. RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  5. RUN yum -y install openssh-server nginx unzip
  6. RUN service sshd start
  7. RUN echo "123456"|passwd --stdin root
  8. WORKDIR /usr/share/nginx/html 这里指的是之后所有命令都在这个路径下面执行
  9. RUN rm -rf *
  10. ADD xiaoniaofeifei.zip . 这里最后是点不能忘记了,表示在当前目录
  11. RUN unzip xiaoniaofeifei.zip
  12.  
  13. ADD init.sh /init.sh
  14.  
  15. CMD ["/bin/bash","/init.sh"]

 执行创建案之后的命令结果是:

  1. [root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v2 .
  2. Sending build context to Docker daemon 94.72kB
  3. Step 1/12 : FROM centos:6.9
  4. ---> adf829198a7f
  5. Step 2/12 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  6. ---> Using cache
  7. ---> bcfa68985b33
  8. Step 3/12 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  9. ---> Using cache
  10. ---> de91b8df3cdc
  11. Step 4/12 : RUN yum -y install openssh-server nginx unzip
  12. ---> Using cache
  13. ---> 66bb9530d868
  14. Step 5/12 : RUN service sshd start
  15. ---> Using cache
  16. ---> 5974df83e839
  17. Step 6/12 : RUN echo "123456"|passwd --stdin root
  18. ---> Using cache
  19. ---> d8cbe019d081
  20. Step 7/12 : WORKDIR /usr/share/nginx/html
  21. ---> Using cache
  22. ---> e4bf78b38489
  23. Step 8/12 : RUN rm -rf *
  24. ---> Using cache
  25. ---> a7040fa17ab7
  26. Step 9/12 : ADD xiaoniaofeifei.zip .
  27. ---> dcc79248a09f
  28. Step 10/12 : RUN unzip xiaoniaofeifei.zip
  29. ---> Running in cbca6d5ca592
  30. Archive: xiaoniaofeifei.zip
  31. inflating: sound1.mp3
  32. creating: img/
  33. inflating: img/bg1.jpg
  34. inflating: img/bg2.jpg
  35. inflating: img/number1.png
  36. inflating: img/number2.png
  37. inflating: img/s1.png
  38. inflating: img/s2.png
  39. inflating: 21.js
  40. inflating: 2000.png
  41. inflating: icon.png
  42. inflating: index.html
  43. Removing intermediate container cbca6d5ca592
  44. ---> f4a99a6a7128
  45. Step 11/12 : ADD init.sh /init.sh
  46. ---> 455bf5fe6902
  47. Step 12/12 : CMD ["/bin/bash","/init.sh"]
  48. ---> Running in e5caf5424a18
  49. Removing intermediate container e5caf5424a18
  50. ---> 6307e23ee16d
  51. Successfully built 6307e23ee16d
  52. Successfully tagged centos6.9_nginx_ssh:v2
  53. [root@localhost centos6.9_ssh_nginx]# docker images
  54. REPOSITORY TAG IMAGE ID CREATED SIZE
  55. centos6.9_nginx_ssh v2 6307e23ee16d About a minute ago 431MB
  56. centos6.9_nginx_ssh v1 f01eeebf918a 16 minutes ago 431MB
  57.  
  58. [localhost centos6.9_ssh_nginx]# docker run -d -p 80:80 -p 2222:22 centos6.9_nginx_ssh:v2
  59. 277d3714590b9b9faaba1b682790c694bcc96f0868293d5505b69848f8d03421
  60. [root@localhost centos6.9_ssh_nginx]# docker exec -it 277d37145 /bin/bash
  61. [root@277d3714590b html]# pwd
  62. /usr/share/nginx/html 从这里就可以看出目录由于设定了WORKDIR,所以钉死在了这个目录下面

在上面可以看出任然还有可以优化的地方,所以继续,使用ADD命令可以直接解压tar包

  1. FROM centos:6.9
  2.  
  3. RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  4. RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  5. RUN yum -y install openssh-server nginx
  6. RUN service sshd start
  7. RUN echo "123456"|passwd --stdin root
  8. WORKDIR /usr/share/nginx/html
  9. RUN rm -rf *
  10. ADD xiaoniaofeifei.tar.gz . ADD可以直接解压tar
  11. ADD init.sh /init.sh
  12.  
  13. CMD ["/bin/bash","/init.sh"]
  14.  
  15. [root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v3 .
  16. Sending build context to Docker daemon 186.9kB
  17. Step 1/11 : FROM centos:6.9
  18. ---> adf829198a7f
  19. Step 2/11 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  20. ---> Using cache
  21. ---> bcfa68985b33
  22. Step 3/11 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  23. ---> Using cache
  24. ---> de91b8df3cdc
  25. Step 4/11 : RUN yum -y install openssh-server nginx
  26. ---> Using cache
  27. ---> 16a434cf89be
  28. Step 5/11 : RUN service sshd start
  29. ---> Using cache
  30. ---> 60f03276a66c
  31. Step 6/11 : RUN echo "123456"|passwd --stdin root
  32. ---> Using cache
  33. ---> b4dc176a311b
  34. Step 7/11 : WORKDIR /usr/share/nginx/html
  35. ---> Using cache
  36. ---> 209c253860e4
  37. Step 8/11 : RUN rm -rf *
  38. ---> Using cache
  39. ---> d8ca4eff7ee9
  40. Step 9/11 : ADD xiaoniaofeifei.tar.gz .
  41. ---> 139914b243cb
  42. Step 10/11 : ADD init.sh /init.sh
  43. ---> 482f2582dd02
  44. Step 11/11 : CMD ["/bin/bash","/init.sh"]
  45. ---> Running in 66b1794dbe6e
  46. Removing intermediate container 66b1794dbe6e
  47. ---> 92b1087df3f5
  48. Successfully built 92b1087df3f5
  49. Successfully tagged centos6.9_nginx_ssh:v3
  50. [root@localhost centos6.9_ssh_nginx]# docker images
  51. REPOSITORY TAG IMAGE ID CREATED SIZE
  52. centos6.9_nginx_ssh v3 92b1087df3f5 About a minute ago 431MB
  53. centos6.9_nginx_ssh v2 6307e23ee16d 19 minutes ago 431MB
  54. centos6.9_nginx_ssh v1 f01eeebf918a 35 minutes ago 431MB

 企业标准化EXPOSE

  1. FROM centos:6.9
  2.  
  3. RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  4. RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  5. RUN yum -y install openssh-server nginx
  6. RUN service sshd start
  7. RUN echo "123456"|passwd --stdin root
  8. WORKDIR /usr/share/nginx/html
  9. RUN rm -rf *
  10. ADD xiaoniaofeifei.tar.gz .
  11. ADD init.sh /init.sh
  12.  
  13. EXPOSE 80/tcp 22/tcp
  14. CMD ["/bin/bash","/init.sh"]
  15.  
  16. [root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v4 .
  17. Sending build context to Docker daemon 186.9kB
  18. Step 1/12 : FROM centos:6.9
  19. ---> adf829198a7f
  20. Step 2/12 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  21. ---> Using cache
  22. ---> bcfa68985b33
  23. Step 3/12 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  24. ---> Using cache
  25. ---> de91b8df3cdc
  26. Step 4/12 : RUN yum -y install openssh-server nginx
  27. ---> Using cache
  28. ---> 16a434cf89be
  29. Step 5/12 : RUN service sshd start
  30. ---> Using cache
  31. ---> 60f03276a66c
  32. Step 6/12 : RUN echo "123456"|passwd --stdin root
  33. ---> Using cache
  34. ---> b4dc176a311b
  35. Step 7/12 : WORKDIR /usr/share/nginx/html
  36. ---> Using cache
  37. ---> 209c253860e4
  38. Step 8/12 : RUN rm -rf *
  39. ---> Using cache
  40. ---> d8ca4eff7ee9
  41. Step 9/12 : ADD xiaoniaofeifei.tar.gz .
  42. ---> Using cache
  43. ---> 139914b243cb
  44. Step 10/12 : ADD init.sh /init.sh
  45. ---> Using cache
  46. ---> 482f2582dd02
  47. Step 11/12 : EXPOSE 80/tcp 22/tcp
  48. ---> Running in 4a9a9c270afc
  49. Removing intermediate container 4a9a9c270afc
  50. ---> b980eead4bdc
  51. Step 12/12 : CMD ["/bin/bash","/init.sh"]
  52. ---> Running in fc73bab98352
  53. Removing intermediate container fc73bab98352
  54. ---> ac9eca43049a
  55. Successfully built ac9eca43049a
  56. Successfully tagged centos6.9_nginx_ssh:v4
  57.  
  58. [root@localhost centos6.9_ssh_nginx]# docker images
  59. REPOSITORY TAG IMAGE ID CREATED SIZE
  60. centos6.9_nginx_ssh v4 ac9eca43049a 45 seconds ago 431MB
  61. centos6.9_nginx_ssh v3 92b1087df3f5 11 minutes ago 431MB
  62. centos6.9_nginx_ssh v2 6307e23ee16d 29 minutes ago 431MB
  63. centos6.9_nginx_ssh v1 f01eeebf918a 45 minutes ago 431MB
  64. [root@localhost centos6.9_ssh_nginx]# docker run -d -P centos6.9_nginx_ssh:v4
  65. 697030125c669ee2e92ae09111833eec38cc00ba9ee367140de97ebcf95fbe00
  66. [root@localhost centos6.9_ssh_nginx]# docker ps -al
  67. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  68. 697030125c66 centos6.9_nginx_ssh:v4 "/bin/bash /init.sh" 2 minutes ago Up 2 minutes 0.0.0.0:32769->22/tcp, 0.0.0.0:32768->80/tcp flamboyant_hoover

由上可知,加入了EXPOSE以后就能看到容器的端口出现随机映射的现象 

volume的意义:

  1. [root@localhost centos6.9_ssh_nginx]# vim dockerfile
  2.  
  3. FROM centos:6.9
  4.  
  5. RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  6. RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  7. RUN yum -y install openssh-server nginx
  8. RUN service sshd start
  9. RUN echo "123456"|passwd --stdin root
  10. WORKDIR /usr/share/nginx/html
  11. RUN rm -rf *
  12. ADD xiaoniaofeifei.tar.gz .
  13. ADD init.sh /init.sh
  14.  
  15. EXPOSE 80/tcp 22/tcp
  16. VOLUME /usr/share/nginx/html
  17. CMD ["/bin/bash","/init.sh"]
  18.  
  19. [root@localhost centos6.9_ssh_nginx]# docker run -d -P centos6.9_nginx_ssh:v5 .
  20. [root@localhost centos6.9_ssh_nginx]# docker volume ls
  21. DRIVER VOLUME NAME
  22. local b56d4c1f5042c2f7c2e8afd4e53f4f6c0ac9a1c09d12c5dd81ab40c783e09f07 产生一个随机的卷

  

  

  

Docker的自动构建镜像的更多相关文章

  1. docker微服务部署之:五、利用DockerMaven插件自动构建镜像

    docker微服务部署之:四.安装docker.docker中安装mysql和jdk1.8.手动构建镜像.部署项目 在上一篇文章中,我们是手动构建镜像,即: 4.1.2.5.1.2.6.1.2中的将d ...

  2. 使用Docker+Jenkins自动构建部署

    环境 Windows 10 Docker Version 18.06.1-ce-win73 (19507) 运行jenkins 运行jenkins 容器 docker run -d --name ln ...

  3. Docker:dockerfile自动构建镜像 [六]

    一.手动docker镜像的缺点 相对于手动制作的docker镜像,使用dockerfile构建的镜像有以下优点: 1.dockerfile只有几kb,便于传输 2.使用dockerfile构建出来的镜 ...

  4. 【转】使用Docker+Jenkins自动构建部署

    转载自 https://segmentfault.com/a/1190000012921606 环境 阿里云ESC,宿主机服务器安装Docker,在安全规则中确认8080端口开启. 客户端mac 运行 ...

  5. [Linux] 编写Dockerfile文件自动构建镜像

    Dockerfile是一个文本文件,按顺序包含构建给定镜像所需的所有命令Docker通过读取Dockerfile中的指令自动构建图像 . Dockerfile遵循特定的格式和指令集,您可以在Docke ...

  6. Docker build Dockerfile 构建镜像 - 二

    Dockerfile 制作镜像 https://hub.docker.com/ 搜索需要镜像: https://hub.docker.com/_/centos/ 官方示例: centos:6 1.这里 ...

  7. Docker镜像构建原理解析(不装docker也能构建镜像)

    在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有im ...

  8. Docker学习(7) 构建镜像

    构建docker镜像 1 构建镜像的两种方式 1 通过容器构建镜像 2 通过Dockerfile构建镜像

  9. docker commit理解构建镜像(7)

    镜像是多层存储,每一层是在前一层的基础上进行的修改: 而容器同样也是多层存储是在以镜像为基础层,在基础层上加一层作为容器运行时的存储层. 当我们使用Docker Hub的镜像无法满足我们的需求时,我们 ...

随机推荐

  1. Linux 下载安装

    安装教程:https://www.runoob.com/linux/linux-install.html Linux图形界面与命令行界面切换https://blog.csdn.net/ab522628 ...

  2. python-day1 爬虫基础之HTTP基本原理

    经过前几天的开发环境配置,今天终于正式开启学Python之路了,今天主要看了HTTP的基本原理,下边做一个总结: 1.首先要了解的就是URI和URL,URI的全拼是Uniform Resource I ...

  3. PowerShell-Selenium技术实时调试和操作Chrome浏览器

    只需要4行代码: $AnyWindow=$Chrome.WindowHandles.Item() $Chrome=$Chrome.SwitchTo().Window($AnyWindow) Write ...

  4. CF 1095C Powers Of Two

    题目连接:http://codeforces.com/problemset/problem/1095/C 题目: C. Powers Of Two time limit per test 4 seco ...

  5. 分组统计SQL(mysql)

    <select id="orderProductStatistics" resultMap="ProductStatisticsVOMap"> SE ...

  6. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:多线程队列操作

    import tensorflow as tf #1. 定义队列及其操作. queue = tf.FIFOQueue(100,"float") enqueue_op = queue ...

  7. day58-mysql-视图,触发器

    一. 视图 .1创建视图 create view p_view as select name,age from person; 视图的作用是隐藏数据,例如上面语句没有查询工资,是为了隐藏它,这样就避免 ...

  8. mysql_secure_installation 安全安装(用于生产环境设置)

    编译安装完mysql5.6,如果用于生产环境,最好执行mysql_secure_installation来做一些常规化安全设置. 需要提前将~mysql/bin加入环境变量 /apps/mysql// ...

  9. 三十三、www服务apache软件

    1.前面提到:www服务是一种网页服务,但是网页服务也是需要软件来支撑的,通过软件的形式展示需要的网页,返回给浏览器. www服务软件排名:http://w3techs.com/technologie ...

  10. 2. Unconstrained Optimization

    2.1 Basic Results on the Existence of Optimizers 2.1. Let \(f:U->\mathbb{R}\) be a function on a ...