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


    一、手动docker镜像的缺点

    相对于手动制作的docker镜像,使用dockerfile构建的镜像有以下优点:


    1、dockerfile只有几kb,便于传输

    2、使用dockerfile构建出来的镜像,在运行容器的时候,不用指定容器的初始命令

    3、支持更多的自定义操作

    二、dockerfile常用指令

    1、dockerfile常用指令:

    FROM 这个镜像的妈妈是谁?(指定基础镜像)
    MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
    RUN 你想让它干啥(在命令前面加上RUN即可)
    ADD 给它点创业资金(COPY文件,会自动解压)
    WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
    VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
    EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
    CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)

    2、dockerfile其他指令:

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

    三、dockerfile实战1

    1、手动制作docker镜像步骤:

    1:启动容器安装软件服务

    docker run -it -p 1022:22 --name luoahong centos:6.9 
    ######
    yum install openssh-server -y
    /etc/init.d/sshd start
    echo 123456|passwd --stdin root 
    ######

    2:将安装好服务的容器commit提交为镜像

    docker commit luoahong centos6-ssh:v1

    3: 启动新容器来测试新提交的镜像

    docker run -d -p 2022:22 centos6-ssh:v1 /usr/sbin/sshd -D


    2、dockerfile制作docker镜像步骤:

    1:编写dockerfile

    [root@luoahong centos6_ssh]# pwd
    /opt/dockerfile/centos6_ssh
    [root@luoahong centos6_ssh]# ll
    total 4
    -rw-r--r-- 1 root root 159 Jan 15 18:42 dockerfile
    [root@luoahong centos6_ssh]# cat dockerfile
    FROM  centos:6.9
    RUN     yum install openssh-server -y
    RUN     /etc/init.d/sshd start
    RUN     echo 123456|passwd --stdin root
    CMD     ["/usr/sbin/sshd","-D"]

    2:docker build构建镜像

    [root@luoahong centos6_ssh]# docker build -t centos6-ssh:v2 .

    3: 启动新容器来测试新构建的镜像

    [root@luoahong centos6_ssh]# docker run -d -p 1322:22 centos6-ssh:v2
    dc6ed1878218e7f13ac753cd5eec290eca1b1c06a1c4da6125b37e4d4f849c97
    [root@luoahong centos6_ssh]# docker ps -a
    CONTAINER ID        IMAGE                  COMMAND                CREATED             STATUS                         PORTS     NAMES
    dc6ed1878218        centos6-ssh:v2         "/usr/sbin/sshd -D"    5 seconds ago       Up 4 seconds                   0.0.0.0:1322->22/tcp     cranky_colden
    ea82b9583081        centos6-ssh-httpd:v1   "/bin/bash /init.sh"   About an hour ago   Up About an hour               0.0.0.0:1122->22/tcp, 0.0.0.0:8080->80/tcp   stupefied_rosalind
    0d09d3a1591a        centos:6.9             "/bin/bash"            About an hour ago   Exited (0) About an hour ago     luoahong
    156d80283acf        centos6-ssh:v1         "/usr/sbin/sshd -D"    About an hour ago   Up About an hour               0.0.0.0:2022->22/tcp     romantic_chandrasekhar
    0485b9ecd1ad        centos:6.9             "/bin/bash"            2 hours ago         Exited (0) About an hour ago     luoahong4
    

    4、测试

    [root@luoahong ~]# ssh root@192.168.228.134 -p 1322
    The authenticity of host '[192.168.228.134]:1322 ([192.168.228.134]:1322)' can't be established.
    RSA key fingerprint is SHA256:F6zybEUDFDsU7O33NYhVZrwhSkANZvKhSEXDwc6+lVY.
    RSA key fingerprint is MD5:04:47:c1:09:1c:0f:46:48:1c:7c:7c:d7:22:71:54:7a.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[192.168.228.134]:1322' (RSA) to the list of known hosts.
    root@192.168.228.134's password:
    [root@dc6ed1878218 ~]#
    

    四、dockerfile实战2

    1、手动制作docker镜像步骤:

    1:启动容器安装软件服务

    docker run -it -p 1022:22 --name luoahong centos:6.9 
    ######
    yum install openssh-server -y
    /etc/init.d/sshd start
    echo 123456|passwd --stdin root 
    ######

    2:将安装好服务的容器commit提交为镜像

    docker commit luoahong centos6-ssh:v1

    3: 启动新容器来测试新提交的镜像

    docker run -d -p 2022:22 centos6-ssh:v1 /usr/sbin/sshd -D

    2、dockerfile制作docker镜像步骤:

    1:编写dockerfile

    [root@luoahong centos6_ssh_http]# pwd
    /opt/dockerfile/centos6_ssh_http
    [root@luoahong centos6_ssh_http]# ll
    total 8
    -rw-r--r-- 1 root root 193 Jan 15 18:57 dockerfile
    -rw-r--r-- 1 root root 54 Jan 15 19:02 init.sh
    [root@luoahong centos6_ssh_http]# cat dockerfile
    FROM centos:6.9
    RUN yum install openssh-server httpd -y
    RUN /etc/init.d/sshd start
    RUN echo 123456|passwd --stdin root
    ADD init.sh /init.sh
    CMD [/bin/bash","/init.sh"]
    

    编写容器启动脚本

    [root@luoahong centos6_ssh_http]# cat init.sh
    #!/bin/bash
    /etc/init.d/httpd start
    /usr/sbin/sshd -D

    2:docker build构建镜像

    [root@luoahong centos6_ssh_http]# docker build -t centos6-ssh-httpd:v2

    3: 启动新容器来测试新构建的镜像

    [root@luoahong centos6_ssh_http]# docker run -d -p 8080:80 -p 2122:22 centos6-ssh-httpd:v2
    a5ff3069084c82a9b7b5030d4ee21e172fdedb2160b71ccbfb3e63b6cb979552
    docker: Error response from daemon: driver failed programming external connectivity on endpoint xenodochial_swartz (78dc457d720cb6611f611b12690499acbe168aae92eb7913b23950e4d71ba860): Bind for 0.0.0.0:8080 failed: port is already allocated.
    [root@luoahong centos6_ssh_http]# docker ps -a -l
    CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
    a5ff3069084c        centos6-ssh-httpd:v2   "/bin/sh -c [/bin/ba鈥?   4 seconds ago       Created                                 xenodochial_swartz
    

    4、测试

      

  • 相关阅读:
    【LeetCode-字符串】重构字符串
    【LeetCode-二叉树】填充每个节点的下一个右侧节点指针
    【LeetCode-回溯】分割回文串
    【LeetCode-字符串】最后一个单词的长度
    【LeetCode-数组】生命游戏
    【LeetCode-链表】奇偶链表
    【LeetCode-字符串】反转字符串
    【LeetCode-数学】打乱数组
    Java中实现多线程的3种方法介绍和比较
    oracle 临时表空间、数据表空间、创建用户名与密码、赋予用户权限
  • 原文地址:https://www.cnblogs.com/luoahong/p/10273820.html
Copyright © 2020-2023  润新知