美文网首页
002--【docker】镜像制作

002--【docker】镜像制作

作者: 83e2b5141ef4 | 来源:发表于2019-11-15 22:48 被阅读0次

    1、写在前面的话

    学习整个docker的环境,网络,原理,而不是浅尝辄止的docekr run一个镜像,然后就装着自己很diao的样子


    2、学习目的

    • 1)进行容器的制作(商业级容器化制作,并不是简单的简单的类似docker tag),包括开发中直接对镜像进行编译生成,后期可能会结合Jenkins进行CI/CD集成

    docker镜像制作的两种方法:docker commit + Dockerfile

    • 2)学习使用dockerFile编写和使用,深入理解dockerfile的参数含义,结合自身的业务场景进行编写
    • 3)学习使用supervisor(监视者),可以只保留一个前端容器(镜像不能以后台进程存在,会自耦当停掉),可以进行运行多个容器(可以扮演监视者的角色,当容器停止后,会自动重启):https://blog.csdn.net/bbwangj/article/details/81059730

    3、学习内容

    • 3.1)将容器变成镜像:docker commit <container> [repo:tag]
    docker commit hjjhweq76231j58 myjava:1.1.1
    
    • commit之后,再进行容器访问,容器内的修改就不会丢失了
    • 但是【缺点不规范】
    • 3.2)将容器变成镜像:Dockerfile
    FROM nimmis/ubuntu:14.04
    MAINTAINER nimmis <kjell.havneskold@gmail.com>
    # disable interactive functions
    ENV DEBIAN_FRONTEND noninteractive
    # set default java environment variable
    ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
    RUN apt-get install -y software-properties-common && \
    add-apt-repository ppa:openjdk-r/ppa -y && \
    apt-get update && \
    apt-get install -y --no-install-recommends openjdk-8-jre && \
    rm -rf /var/lib/apt/lists/*
    
    • 3.3)对容器编译的过程进行分析(基于Dockerfile)
      可以看到所有的编译动作都是在进程容器中完成的,所以和当前的linux机器没有任何关系
    • 进行验证1):因为文件hello.sh没有上传到容器内,所以执行报错
    • 进行验证2):上传文件hello.sh到容器内,所以执行不报错
    • 进行验证3):没有在容器内配置代理时,报错;配置后不报错
    • 3.3)复杂案例实战:制作ubuntu+java+tomcat+ssh server镜像
    FROM ubuntu
    MAINTAINER yongboy "yongboy@gmail.com"
    # 更新源,安装ssh server
    RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list
    RUN apt-get update
    RUN apt-get install -y openssh-server
    RUN mkdir -p /var/run/sshd
    # 设置root ssh远程登录密码为123456
    RUN echo "root:123456" | chpasswd
    # 添加orache java7源,一次性安装vim,wget,curl,java7,tomcat7等必备软件
    RUN apt-get install python-software-properties
    RUN add-apt-repository ppa:webupd8team/java
    RUN apt-get update
    RUN apt-get install -y vim wget curl oracle-java7-installer tomcat7
    RUN update-alternatives --display java
    RUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle">> /etc/environment
    RUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle">> /etc/default/tomcat7
    # 容器需要开放SSH 22端口
    EXPOSE 22
    # 容器需要开放Tomcat 8080端口
    EXPOSE 8080
    # 设置Tomcat7初始化运行,SSH终端服务器作为后台运行
    ENTRYPOINT service tomcat7 start && /usr/sbin/sshd -D
    
    • 3.3)使用Supervisor :进行多容器的启动并监视服务
      Using Supervisor with Docker(supervisord.conf)
    [supervisord]
    nodaemon=true
    [program:sshd]
    command=/usr/sbin/sshd -D
    [program:apache2]
    command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
    

    4、镜像问题

    1)ssh server是否应该包含到镜像里?

    1)增加一个新的进程来管理容器并不是非常好的一个办法,2)ssh server本身室友配置的,root登录密码应该放在什么地方?上面的演示是放在镜像中(Dockerfile),如果密码泄露了,镜像要重新进行打包编译,类比mysql中的密码是通过环境变量传递进去的,也不是非常安全的

    2)一个容器究竟运行几个程序?

    一般是一个容器中启动一个程序,因为运行多个程序时,有程序死掉,容器是无法检测到的,docker只关注你的前台进程是否在运行

    3)程序参数和配置文件的问题?

    如果放在进行里面,程序的升级,运维就麻烦了,参数少可以写在Dockerfile中,如果参数多了该怎么办?如果参数变动,要重新进行镜像打包,有没有更好的方式

    4)程序日志输出的问题?

    等不能把容器的日志存放在容器以外的地方,更专业一点,进行网络磁盘挂载(可能就不再是本地文件目录了)

    2)至此引发Docker的友好架构

    相关文章

      网友评论

          本文标题:002--【docker】镜像制作

          本文链接:https://www.haomeiwen.com/subject/yireictx.html