zoukankan      html  css  js  c++  java
  • Dockerfile

    # 设置基本的镜像,后续命令都以这个镜像为基础
    FROM centos_lamp:v1
    # 作者信息
    MAINTAINER  JFEDU.NET
    # RUN命令会在上面指定的镜像里执行任何命令
    RUN yum install pcre-devel -y
    RUN yum install httpd httpd-devel –y
    RUN  echo “<h1>The Test Page JFEDU</h1>” >>/var/www/html/index.html
    #暴露ssh端口80
    EXPOSE 80
    #启动httpd
    CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

    Docker镜像制作的方法主要有两种:

    1)Docker commit|export 将新容器提交至Images列表;

    2)编写Dockerfile,build  新的镜像至镜像列表;

    Dockerfile语法命令详解:

    Dockerfile是一个镜像的表示,也是一个镜像的原材料,可以根据Dockerfile来描述构建镜像,并自动构建一个容器。

    FROM    指定所创建镜像的基础镜像;
    MAINTAINER    指定维护者信息;
    RUN    运行命令;
    CMD    指定启动容器时默认执行的命令;
    LABEL    指定生成镜像的元数据标签信息;
    EXPOSE    声明镜像内服务所监听的端口;
    ENV    指定环境变量;
    ADD    赋值指定的<src>路径下的内容到容器中的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压到<dest>路径下
    COPY    赋值本地主机的<scr>路径下的内容到容器中的<dest>路径下;一般情况下推荐使用COPY而不是ADD;
    ENTRYPOINT    指定镜像的默认入口;
    VOLUME    创建数据挂载点;
    USER    指定运行容器时的用户名或UID;
    WORKDIR    配置工作目录;
    ARG    指定镜像内使用的参数(例如版本号信息等);
    ONBUILD    配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作的命令;
    STOPSIGNAL    容器退出的信号;
    HEALTHCHECK    如何进行健康检查;
    SHELL    指定使用SHELL时的默认SHELL类型;

    Dockerfile制作规范及技术

    1)  精简镜像用途:尽量让每个镜像的用途都比较集中、单一,避免构造大而复杂、多功能的镜像;

    2)选用合适的基础镜像:过大的基础镜像会造成构建出臃肿的镜像,一般推荐比较小巧的镜像作为基础镜像;

    3)  提供详细的注释和维护者信息: Dockerfile也是一种代码,需要考虑方便后续扩展和他人使用;

    4)  正确使用版本号:使用明确的具体数字信息的版本号信息,而非latest,可以避免无法确认具体版本号,统一环境;

    5)  减少镜像层数:减少镜像层数建议尽量合并RUN指令,可以将多条RUN指令的内容通过&&连接;

    6)  及时删除临时和缓存文件:这样可以避免构造的镜像过于臃肿,并且这些缓存文件并没有实际用途;

    7)  提高生产速度:合理使用缓存、减少目录下的使用文件,使用.dockeringore文件等;

    8)  调整合理的指令顺序:在开启缓存的情况下,内容不变的指令尽量放在前面,这样可以提高指令的复用性;

    9)  减少外部源的干扰:如果确实要从外部引入数据,需要制定持久的地址,并带有版本信息,让他人可以重复使用而不出错。

    # 设置基本的镜像,后续命令都以这个镜像为基础
    FROM centos:v1
    # 作者信息
    MAINTAINER  JFEDU.NET
    # RUN命令会在上面指定的镜像里执行任何命令
    RUN yum install passwd openssl openssh-server -y
    RUN echo '123456' | passwd --stdin root
    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 sed -i '/^sessions+requireds+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd
    RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
    # 暴露ssh端口22
    EXPOSE  22
    # 设定运行镜像时的默认命令:输出ip,并以daemon方式启动sshd
    CMD ip addr ls eth0 | awk '{print $2}' | egrep -o '([0-9]+.){3}[0-9]+';/usr/sbin/sshd -D

    基于Dockerfile来创建生成镜像,命令如下:

    docker build -t centos:ssh - < Dockerfile

    docker build -t centos:ssh

     

     

    案例: 基于Dockerfile开启

    Apache 80端口,并远程连接服务器,dockerfile内容如下:

    # 设置基本的镜像,后续命令都以这个镜像为基础
    FROM centos_lamp:v1
    # 作者信息
    MAINTAINER  JFEDU.NET
    # RUN命令会在上面指定的镜像里执行任何命令
    RUN yum install pcre-devel -y
    RUN yum install httpd httpd-devel –y
    RUN  echo “<h1>The Test Page JFEDU</h1>” >>/var/www/html/index.html
    #暴露ssh端口80
    EXPOSE 80
    #启动httpd
    CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
  • 相关阅读:
    概率论中几个入门公式
    记一道贝叶斯公式的裸题
    BZOJ3585: mex(主席树)
    利用MingW检验程序运行内存
    清北集训Day3T1(转换)
    万能pb_ds头文件—bits/extc++.h
    清北集训Day1T3 LYK loves jumping(期望DP)
    洛谷P1962 斐波那契数列(矩阵快速幂)
    namespace用法
    BZOJ4868: [Shoi2017]期末考试
  • 原文地址:https://www.cnblogs.com/legenidongma/p/10698617.html
Copyright © 2011-2022 走看看