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或者时速云镜像广场
[root@localhost centos6.9_ssh_nginx]# pwd
/opt/dockerfile/centos6.9_ssh_nginx
[root@localhost centos6.9_ssh_nginx]# cat dockerfile
FROM centos:6.9

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum -y install openssh-server nginx unzip
RUN service sshd start
RUN echo "123456"|passwd --stdin root
RUN rm -rf /usr/share/nginx/html/index.html
ADD xiaoniaofeifei.zip /usr/share/nginx/html/
RUN unzip /usr/share/nginx/html/xiaoniaofeifei.zip -d /usr/share/nginx/html/
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]

[root@localhost centos6.9_ssh_nginx]# cat init.sh
#!/bin/bash

service sshd restart
nginx -g 'daemon off;'

创建镜像
docker build --network=host -t centos6.9_nginx_ssh:v1 .

[root@localhost centos6.9_ssh_nginx]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
centos6.9_nginx_ssh   v1                  f01eeebf918a        9 minutes ago       431MB

优化上述dockerfile文件:

FROM centos:6.9

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum -y install openssh-server nginx unzip
RUN service sshd start
RUN echo "123456"|passwd --stdin root
WORKDIR /usr/share/nginx/html      这里指的是之后所有命令都在这个路径下面执行
RUN rm -rf *
ADD xiaoniaofeifei.zip .  这里最后是点不能忘记了,表示在当前目录
RUN unzip xiaoniaofeifei.zip

ADD init.sh /init.sh

CMD ["/bin/bash","/init.sh"]

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

[root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v2 .
Sending build context to Docker daemon  94.72kB
Step 1/12 : FROM centos:6.9
 ---> adf829198a7f
Step 2/12 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
 ---> Using cache
 ---> bcfa68985b33
Step 3/12 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
 ---> Using cache
 ---> de91b8df3cdc
Step 4/12 : RUN yum -y install openssh-server nginx unzip
 ---> Using cache
 ---> 66bb9530d868
Step 5/12 : RUN service sshd start
 ---> Using cache
 ---> 5974df83e839
Step 6/12 : RUN echo "123456"|passwd --stdin root
 ---> Using cache
 ---> d8cbe019d081
Step 7/12 : WORKDIR /usr/share/nginx/html
 ---> Using cache
 ---> e4bf78b38489
Step 8/12 : RUN rm -rf *
 ---> Using cache
 ---> a7040fa17ab7
Step 9/12 : ADD xiaoniaofeifei.zip .
 ---> dcc79248a09f
Step 10/12 : RUN unzip xiaoniaofeifei.zip
 ---> Running in cbca6d5ca592
Archive:  xiaoniaofeifei.zip
  inflating: sound1.mp3
   creating: img/
  inflating: img/bg1.jpg
  inflating: img/bg2.jpg
  inflating: img/number1.png
  inflating: img/number2.png
  inflating: img/s1.png
  inflating: img/s2.png
  inflating: 21.js
  inflating: 2000.png
  inflating: icon.png
  inflating: index.html
Removing intermediate container cbca6d5ca592
 ---> f4a99a6a7128
Step 11/12 : ADD init.sh /init.sh
 ---> 455bf5fe6902
Step 12/12 : CMD ["/bin/bash","/init.sh"]
 ---> Running in e5caf5424a18
Removing intermediate container e5caf5424a18
 ---> 6307e23ee16d
Successfully built 6307e23ee16d
Successfully tagged centos6.9_nginx_ssh:v2
[root@localhost centos6.9_ssh_nginx]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED              SIZE
centos6.9_nginx_ssh   v2                  6307e23ee16d        About a minute ago   431MB
centos6.9_nginx_ssh   v1                  f01eeebf918a        16 minutes ago       431MB

[localhost centos6.9_ssh_nginx]# docker run -d -p 80:80 -p 2222:22 centos6.9_nginx_ssh:v2
277d3714590b9b9faaba1b682790c694bcc96f0868293d5505b69848f8d03421
[root@localhost centos6.9_ssh_nginx]# docker exec -it 277d37145 /bin/bash
[root@277d3714590b html]# pwd
/usr/share/nginx/html    从这里就可以看出目录由于设定了WORKDIR,所以钉死在了这个目录下面

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

FROM centos:6.9

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum -y install openssh-server nginx
RUN service sshd start
RUN echo "123456"|passwd --stdin root
WORKDIR /usr/share/nginx/html
RUN rm -rf *
ADD xiaoniaofeifei.tar.gz .        ADD可以直接解压tar包
ADD init.sh /init.sh

CMD ["/bin/bash","/init.sh"]

[root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v3 .
Sending build context to Docker daemon  186.9kB
Step 1/11 : FROM centos:6.9
 ---> adf829198a7f
Step 2/11 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
 ---> Using cache
 ---> bcfa68985b33
Step 3/11 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
 ---> Using cache
 ---> de91b8df3cdc
Step 4/11 : RUN yum -y install openssh-server nginx
 ---> Using cache
 ---> 16a434cf89be
Step 5/11 : RUN service sshd start
 ---> Using cache
 ---> 60f03276a66c
Step 6/11 : RUN echo "123456"|passwd --stdin root
 ---> Using cache
 ---> b4dc176a311b
Step 7/11 : WORKDIR /usr/share/nginx/html
 ---> Using cache
 ---> 209c253860e4
Step 8/11 : RUN rm -rf *
 ---> Using cache
 ---> d8ca4eff7ee9
Step 9/11 : ADD xiaoniaofeifei.tar.gz .
 ---> 139914b243cb
Step 10/11 : ADD init.sh /init.sh
 ---> 482f2582dd02
Step 11/11 : CMD ["/bin/bash","/init.sh"]
 ---> Running in 66b1794dbe6e
Removing intermediate container 66b1794dbe6e
 ---> 92b1087df3f5
Successfully built 92b1087df3f5
Successfully tagged centos6.9_nginx_ssh:v3
[root@localhost centos6.9_ssh_nginx]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED              SIZE
centos6.9_nginx_ssh   v3                  92b1087df3f5        About a minute ago   431MB
centos6.9_nginx_ssh   v2                  6307e23ee16d        19 minutes ago       431MB
centos6.9_nginx_ssh   v1                  f01eeebf918a        35 minutes ago       431MB

 企业标准化EXPOSE

FROM centos:6.9

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum -y install openssh-server nginx
RUN service sshd start
RUN echo "123456"|passwd --stdin root
WORKDIR /usr/share/nginx/html
RUN rm -rf *
ADD xiaoniaofeifei.tar.gz .
ADD init.sh /init.sh

EXPOSE 80/tcp 22/tcp
CMD ["/bin/bash","/init.sh"]

[root@localhost centos6.9_ssh_nginx]# docker build --network=host -t centos6.9_nginx_ssh:v4 .
Sending build context to Docker daemon  186.9kB
Step 1/12 : FROM centos:6.9
 ---> adf829198a7f
Step 2/12 : RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
 ---> Using cache
 ---> bcfa68985b33
Step 3/12 : RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
 ---> Using cache
 ---> de91b8df3cdc
Step 4/12 : RUN yum -y install openssh-server nginx
 ---> Using cache
 ---> 16a434cf89be
Step 5/12 : RUN service sshd start
 ---> Using cache
 ---> 60f03276a66c
Step 6/12 : RUN echo "123456"|passwd --stdin root
 ---> Using cache
 ---> b4dc176a311b
Step 7/12 : WORKDIR /usr/share/nginx/html
 ---> Using cache
 ---> 209c253860e4
Step 8/12 : RUN rm -rf *
 ---> Using cache
 ---> d8ca4eff7ee9
Step 9/12 : ADD xiaoniaofeifei.tar.gz .
 ---> Using cache
 ---> 139914b243cb
Step 10/12 : ADD init.sh /init.sh
 ---> Using cache
 ---> 482f2582dd02
Step 11/12 : EXPOSE 80/tcp 22/tcp
 ---> Running in 4a9a9c270afc
Removing intermediate container 4a9a9c270afc
 ---> b980eead4bdc
Step 12/12 : CMD ["/bin/bash","/init.sh"]
 ---> Running in fc73bab98352
Removing intermediate container fc73bab98352
 ---> ac9eca43049a
Successfully built ac9eca43049a
Successfully tagged centos6.9_nginx_ssh:v4

[root@localhost centos6.9_ssh_nginx]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
centos6.9_nginx_ssh   v4                  ac9eca43049a        45 seconds ago      431MB
centos6.9_nginx_ssh   v3                  92b1087df3f5        11 minutes ago      431MB
centos6.9_nginx_ssh   v2                  6307e23ee16d        29 minutes ago      431MB
centos6.9_nginx_ssh   v1                  f01eeebf918a        45 minutes ago      431MB
[root@localhost centos6.9_ssh_nginx]# docker run -d -P centos6.9_nginx_ssh:v4
697030125c669ee2e92ae09111833eec38cc00ba9ee367140de97ebcf95fbe00
[root@localhost centos6.9_ssh_nginx]# docker ps -al
CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS  PORTS                                          NAMES
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的意义:

[root@localhost centos6.9_ssh_nginx]# vim dockerfile

FROM centos:6.9

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum -y install openssh-server nginx
RUN service sshd start
RUN echo "123456"|passwd --stdin root
WORKDIR /usr/share/nginx/html
RUN rm -rf *
ADD xiaoniaofeifei.tar.gz .
ADD init.sh /init.sh

EXPOSE 80/tcp 22/tcp
VOLUME /usr/share/nginx/html
CMD ["/bin/bash","/init.sh"]

[root@localhost centos6.9_ssh_nginx]# docker run -d -P centos6.9_nginx_ssh:v5 .
[root@localhost centos6.9_ssh_nginx]# docker volume ls
DRIVER              VOLUME NAME
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. 3)在View中添加LBUTTONDOWN(标准消息)

    1)消息一共分为四类: (1)标准消息-->以WM_  开头的都是标准消息 (2)命令消息---->  菜单  工具条  快捷键(两个按键的组合是快捷键,一个按键是 WM_KEYDOWN( ...

  2. Web 全栈大会:万维网之父的数据主权革命

    大家好,今天我和大家分享一下由万维网之父发起的一场数据主权革命.什么叫数据主权?很容易理解,现在我们的数据是把持在巨头手里的,你的微信通讯录和聊天记录都无法导出,不管是从人权角度还是从法理角度,这些数 ...

  3. Insulator|enhancer|LCR|EKLF|CTCF|调控基因印记| A-USF|HATs|ChIP|Chip-seq|PAGE|

    表观遗传学 转录因子 基本转录因子:TFIID.A.B.F.E.H. Pol II… 基转录因子具有稳定作用 组织特异性转录因子:GATA.EKLF.Bcl11A… 特异性是在特定组织中的细胞中时与细 ...

  4. 关于redis的使用总结

    简介 redis是一个开源的用c语言编写的数据库,但并不像常规的关系型数据库那样把数据存储在表中 , 而是像Java中的Map集合一样,存储的是一系列key=value键值对,redis属于NoSQL ...

  5. Python 学习笔记:根据输入年月获取该月的第一天和最后一天

    目的: 给定一个时间,比如:2020.02,要求返回所输入月份的第一天及最后一天,比如:('2020.02.01', '2020.02.29') 参考博客:https://blog.csdn.net/ ...

  6. 跟踪路由(tracert)及ping命令

    由于最近学校网络不好,老是有问题,加上最近写了个数据展示系统,要部署到买的域名下,用到了这两个命令 首先,一台服务器,一台工作站,一个笔记本(我的,来测试ip是否通的) 服务器已经部署了三个网站(一个 ...

  7. S5P4418开发板android源码下uboot和内核缺省文件的配置

    uboot 需要配置缺省文件,进入解压的源码目录 android,然后进入 u-boot 目录,如下图所示.如上图所示,如果是 1G 核心板,则使用“cp nsih-1G16b-4418.txt ns ...

  8. HDU 6126 Give out candies(网络流)

    题目给出n,m,k 然后给出n*m的矩阵a[i][j]代表第i个人在获得j 颗糖果能得到的满足值, 然后k是k行每行输入三个整数x,y,z     ,x,y,z表示一组限制表示第x个人分到的糖数减去第 ...

  9. OA项目-xadmin使用

    ###############  xadmin安装和配置   ############### """ 环境: Python3.6.3 django1.11.11 创建dj ...

  10. 记一次关于JDBCUtils工具类的编写

    jdbc.properties数据库配置的属性文件内容如下 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost/xxxx ...