zoukankan      html  css  js  c++  java
  • 05: dockerfile自动构建docker镜像

    dockerfile自动构建docker镜像

    特点:
    1: dockerfile 类似ansible的playbook剧本
    2: dockerfile 更适合传输,实现更多的定制化
    3:dockerfile 可以指定镜像的初始命令

    dockerfile主要组成部分:
    基础镜像信息 FROM centos:6.8
    制作镜像操作指令 RUN yum install openssh-server -y
    容器启动时执行指令 CMD ["/bin/bash"]
    dockerfile常用指令:
    FROM 这个镜像的妈妈是谁?(指定基础镜像)
    MAINTAINER (指定维护者信息,可以没有)
    RUN 你想让它干啥(在命令前面加上RUN即可)
    ADD 给它点创业资金(COPY文件,会自动解压)
    WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
    VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
    EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
    CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)

    dockerfile其他指令:
    COPY 复制文件
    ENV 环境变量
    ENTRYPOINT 容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)

    生产中如何编写dockerfile:
    1: 参考其他的dockerfile
    2: 官方dockerfile或者时速云镜像广场

    小试牛刀:写一个加单的dockerfile,构建ssh的镜像
    (前面我们是手动的yum安装ssh,打包成ssh的镜像的)

    1: 创建dockerfile 的centos_ssh目录
    [root@k8s129 opt]# mkdir dockerfile
    [root@k8s129 opt]# cd dockerfile/
    [root@k8s129 dockerfile]# mkdir centos_ssh
    [root@k8s129 dockerfile]# cd centos_ssh/

    2: 获取系统镜像列表,找到基础镜像(centos:latest)
    [root@k8s129 ~]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    centos_ssh v1.2 275e0f02e6b1 9 days ago 265MB
    nginx latest 5a9061639d0a 12 days ago 126MB
    centos latest 0f3e07c0138f 3 weeks ago 220MB
    busybox latest 19485c79a9bb 7 weeks ago 1.22MB
    [root@k8s129 ~]#

    3:编写dockerfile
    #注意,文件名必须叫dockerfile ,否则系统不识别
    [root@k8s129 centos_ssh]# vim dockerfile
    FROM centos:latest
    RUN yum install -y openssh-server
    RUN yum install -y net-tools
    RUN yum install -y passwd
    RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
    RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
    RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
    RUN sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
    RUN sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
    RUN echo "123456"|passwd --stdin root
    CMD ["/usr/sbin/sshd","-D"]

    4:执行dockerfile ,自动构建镜像
    #docker build -t 构建后的镜像名字 . 代表从当前路径下的dockerfile构建(/opt/dockerfile/centos_ssh)
    [root@k8s129 centos_ssh]# docker build -t dockerfile_centos:v1.1 .
    Sending build context to Docker daemon 2.048kB
    Step 1/10 : FROM centos:latest
    ---> 0f3e07c0138f
    Step 2/10 : RUN yum install -y openssh-server
    ---> Running in 858766ea9002
    ...
    Removing intermediate container 633e756e6040
    ---> fb540a4947a1
    Successfully built fb540a4947a1
    Successfully tagged dockerfile_centos:v1.1
    #查看镜像已经制作出来了
    [root@k8s129 centos_ssh]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    dockerfile_centos v1.1 fb540a4947a1 6 seconds ago 296MB
    centos_ssh v1.2 275e0f02e6b1 9 days ago 265MB
    nginx latest 5a9061639d0a 12 days ago 126MB
    centos latest 0f3e07c0138f 3 weeks ago 220MB
    busybox latest 19485c79a9bb 7 weeks ago 1.22MB
    [root@k8s129 centos_ssh]#

    5: 测试docker镜像是否可用
    [root@k8s129 centos_ssh]# docker run -d -p 222:22 dockerfile_centos:v1.1
    c5bbc44d2ac704c69ba197a58f25ccbcafa9371bfe2972f033b8293a1861a400
    [root@k8s129 centos_ssh]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    c5bbc44d2ac7 dockerfile_centos:v1.1 "/usr/sbin/sshd -D" 5 seconds ago Up 4 seconds 0.0.0.0:222->22/tcp gracious_driscoll
    [root@k8s129 centos_ssh]#

    6:ssh 连接222端口,看是否能进入容器(容器的root密码是123456)
    [root@k8s129 centos_ssh]# ssh root@192.168.6.129 -p 222
    The authenticity of host '[192.168.6.129]:222 ([192.168.6.129]:222)' can't be established.
    ECDSA key fingerprint is SHA256:xP6/H8rCv0vwW9B9FJxCjw/a5yejteFtINNxt886f1s.
    ECDSA key fingerprint is MD5:f7:73:97:9c:96:6c:09:9f:f8:c4:d5:57:c5:07:08:54.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[192.168.6.129]:222' (ECDSA) to the list of known hosts.
    root@192.168.6.129's password:
    [root@c5bbc44d2ac7 ~]# hostname
    c5bbc44d2ac7
    [root@c5bbc44d2ac7 ~]#

    总结:
    dockerfile构建docker镜像,三部曲:
    1:编写dockerfile
    2:docker build 构建镜像
    3:启动容器测试

    ======扩展=========
    dockerfile 启动多个服务
    [root@k8s129 centos_ssh]# vim dockerfile
    FROM centos:latest
    RUN yum install -y openssh-server httpd
    RUN yum install -y net-tools
    RUN yum install -y passwd
    RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
    RUN ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
    RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
    RUN sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
    RUN sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
    RUN echo "123456"|passwd --stdin root
    ADD init.sh /init.sh # 把dockerfile所在目录,init.sh copy到容器的init.sh,在init.sh里面启动httpd和sshd -D
    CMD ["/bin/bash","/init.sh"]

    编写:vim init.sh
    #!/bin/bash
    systemctl start httpd
    /usr/sbin/sshd -D
    [root@k8s129 centos_ssh]# ls
    dockerfile init.sh
    [root@k8s129 centos_ssh]#

    之后构建:
    docker build -t dockerfile_centos:v2.1 .

  • 相关阅读:
    将博客搬至CSDN
    ActiveMQ 的可持久化(六)
    ActiveMQ之协议(五)
    ActiveMQ与Spring / SpringBoot 整合(四)
    ActiveMQ之JMS及保证消息的可靠性<持久化、事务、签收>(三)
    ActiveMQ部署和代码尝试(二)
    ActiveMQ初步安装使用(一)
    Redis之哨兵机制(五)
    Redis主从复制(读写分离)(四)
    Redis持久化(三)
  • 原文地址:https://www.cnblogs.com/jim-xu/p/11761596.html
Copyright © 2011-2022 走看看