美文网首页
Docker之dockerfile命令详解

Docker之dockerfile命令详解

作者: 你好树洞先生 | 来源:发表于2020-09-23 17:15 被阅读0次

    1.容器的生命周期:

    * 检查本地是否存在镜像,如果不存在即从远端仓库检索

    * 利用镜像启动容器

    * 分配一个文件系统,并在只读的镜像层外挂载一层可读写层

    * 从宿主机配置的网桥接口中桥接一个虚拟接口到容器

    * 从地址池配置一个IP地址给容器

    * 执行用户指定的指令

    * 执行完毕后容器终止

    2.Dockerfile的规则:

     * 格式:

      1)#为注释

      2)指令(大写)内容(小写)

      3)尽管指令是大小写不敏感的,但是,我们强烈建议指令用大写,内容用小写表示

    * Docker是按顺序执行Dockerfile里的指令集合的(从上到下依次执行)

    * 每一个Dockerfile的第一个非注释行指令,必须是“FROM”指令,用于为镜像文件构建过程中,指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境中。

    *实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build 会在docker 主机(本地)上查找指定的镜像文件,当其他本地不存在时,则会从Docker registry(远端)上拉取所需镜像文件。

    4组 核心的Dockerfile 指令

    * USER/WORKDIR指令

    *ADD/EXPOSE指令

    *RUN/ENV指令

    *CMD/ENTRYPOINT指令

    ===========================================================

    (1)USER/WORKDIR指令:

          /data/dockerfile/Dockerfile

        FROM  stanleyws/nginx:v1.12.2 

        USER  nginx 

        WORKDIR  /usr/share/nginx/html 

         WORKDIR 类似于 cd:

    [root@docker  dockerfile]#  docker build . -t docker.io/oldboy1103/nginx:v1.12.2_with_user_workdir   

    [root@docker  dockerfile]# docker run --rm -ti --name nginx123 oldboy1103/nginx:v1.12.2_with_user_workdir /bin/bash    

    ===========================================================

    (2)ADD/EXPOSE指令

         /data/dockerfile/Dockerfile 

        FROM stanleyws/nginx:v1.12.2 

        ADD index.html /usr/share/nginx/html/index.html 

        EXPOSE 80

    [root@docker  dockerfile]# vi Dockerfile

        FROM stanleyws/nginx:v1.12.2

        ADD index.html /usr/share/nginx/html/index.html 

        EXPOSE 80

    [root@docker  dockerfile]# docker build . -t stableyws/nginx:v1.12.2_with_index_expose 

    [root@docker  dockerfile]# docker images 

    ===========================================================

    (3)RUN/ENV 指令

         /data/dockerfile/Dockerfile 

        FROM centos 

        ENV VER 9.9.4-74.el7_6.1 

        RUN yum install bind-$VER -y 

    # 构建镜像:

    [root@docker  dockerfile]#  docker build . -t stanleyws/bind:v9.9.4_with_env_run 

    # 运行容器:

    [root@docker  dockerfile]# docker run --rm stanleyws/bind:v9.9.4_with_env_run rpm -qa bind

    bind-9.9.4-74.el7_6.1.x86_64

    ===========================================================

    (4)CMD/ENTRYPOINT指令

    ## CMD和ENTRYPOINT指令作用相同,使用方法略有不同

    1.CMD指令
    /data/dockerfile/Dockerfile 

    FROM centos 

    RUN yum install httpd -y 

    CMD ["httpd","-D","FOREGROUND"]

    构建镜像:

    [root@docker  dockerfile]#  docker build . -t stanleyws/httpd:myhttpd

    [root@docker  dockerfile]#  vi Dockerfile 

      FROM centos 

      RUN yum install httpd -y 

      CMD ["httpd","-D","FOREGROUND"]

    [root@docker  dockerfile]# docker run -d --rm --name myhttpd -p83:88 oldboy1103/httpd:test 

    2e12804350b12b0916fe

    [root@docker  dockerfile]# docker ps -a 

    2.ENTRYPOINT指令:

    /data/dockerfile/Dockerfile 

    FROM centos

    ADD entrypoint.sh /entrypoint.sh 

    RUN yum install epel-release -q -y && yum install nginx -y 

    ENTRYPOINT /entrypoint.sh 

    entrypoint.sh 

    /data/dockerfile/entrypoinot.sh 

    #!/bin/bash 

    /sbin/nginx -g "daemon off;"

    [root@docker  dockerfile]#  docker exec -ti compassionate_solomon /bin/bash 

    [root@docker  dockerfile]#  vi dockerfile 

      FROM centos

      ADD entrypoint.sh /entrypoint.sh 

      RUN yum install epel-release -q -y && yum install nginx -y 

      ENTRYPOINT /entrypoint.sh 

       entrypoint.sh 

    ===========================================================

    (5)综合实验:

          运行一个docker容器,在浏览器打开demon.od.com能访问到百度首页

    准备Docker 镜像:

    /data/dockerfile/nginx/Dockerfile 

    FROM stanleyws/nginx:v1.12.2 

    USER root 

    ENV www /usr/share/zoneinfo/Asia/shanghai /etc/localtime &&\

    echo 'Asia/Shanghai' >/etc/timezone 

    WORKDIR $www 

    ADD index.html  $www/index.html

    ADD demo.od.com.conf $CONF /demo.od.com.conf 

    EXPOSE 80 

    CMD ["nginx","g","damon off;"]

    index.html 

    /data/dockerfile/nginx/index.html

    [root@docker  dockerfile]#  wget www.baidu.com -O index.html 

    [root@docker  dockerfile]#  vi demo.od.com.conf 

    server {

    listen 80;

    server_name demo.od.com;

    root /usr/share/nginx/html;

    }

    [root@docker  dockerfile]#  docker run --rm -P oldboy1103/nginx:baidu 

    相关文章

      网友评论

          本文标题:Docker之dockerfile命令详解

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