zoukankan      html  css  js  c++  java
  • Dockerfile 定制镜像

    从上一篇文章中我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件等信息,但是命令毕竟只是命令,每次定制都得去重复执行这个命令,而且还不够直观,如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么这些问题不就都可以解决了吗?对的,这个脚本就是我们说的Dockerfile

    介绍

    Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

    这里以定制 tomcat 镜像为例,这次我们使用 Dockerfile 来定制。在一个空白目录中,建立一个文本文件,并命名为 Dockerfile:

    [root@192 mydocker]# cat Dockerfile
    FROM jdk:latest
    ADD  apache-tomcat-9.0.27.tar.gz /data/soft
    RUN  rm -rf apache-tomcat-9.0.27.tar.gz
    WORKDIR /data/soft/
    ENTRYPOINT /data/soft/apache-tomcat-9.0.27/bin/startup.sh && tail -f /dev/null
    
    
    [root@192 mydocker]# docker build -t tomcat:test .
    Sending build context to Docker daemon  500.2MB
    Step 1/5 : FROM jdk:latest
     ---> d8252cab0866
    Step 2/5 : ADD  apache-tomcat-9.0.27.tar.gz /data/soft
     ---> d0f4873733b8
    Step 3/5 : RUN  rm -rf apache-tomcat-9.0.27.tar.gz
     ---> Running in 7d54b3ccd7ca
    Removing intermediate container 7d54b3ccd7ca
     ---> 1f07735cd7da
    Step 4/5 : WORKDIR /data/soft/
     ---> Running in 90dfd42c6134
    Removing intermediate container 90dfd42c6134
     ---> 5704cc83ebb3
    Step 5/5 : ENTRYPOINT /data/soft/apache-tomcat-9.0.27/bin/startup.sh && tail -f /dev/null
     ---> Running in 5dd6eef5777e
    Removing intermediate container 5dd6eef5777e
     ---> d97a77aa1533
    Successfully built d97a77aa1533
    Successfully tagged tomcat:test
    [root@192 mydocker]# docker run --name webserver -d -p 8080:8080 tomcat:test /bin/bash
    e13e5b4d7807b5dbeec0eb55192602ed60cb289b95d82a455cdb340581aba150
    [root@192 mydocker]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1093/sshd
    tcp6       0      0 :::8080                 :::*                    LISTEN      48659/docker-proxy
    tcp6       0      0 :::22                   :::*                    LISTEN      1093/sshd
    
    

    通过浏览器访问

    image

    常用指令

    image

    注意问题

    1. COPY ADD 使用问题会设计到权限的问题如何解决权限
      可以使用 COPY --chown= 或者 ADD --chown= 去解决
      在使用过程中 如ADD使用了.tar.gz自动解压的功能,build执行后,包里面的权限是不会变化的。然后COPY 直接使用权限会直接更改为root。
    1. USER的使用,影响哪些使用
      影响后面的RUN CMD ENTRYPOINT 命令的执行身份,注意的是 而COPY命令却不服从
    1. WORKDIR的使用
      切换目录
      一个事例
      RUN cd /test
      RUN echo "test" >test.txt
      请问最后镜像有/test/test.txt吗? 答:NO
      解释:docker里边有层的概念,每个命令都是生成一个层,每个层都是独立的空间。所以第二个RUN时,工作目录并不会切换到/test下面 。

    最后用一张图解释常用指令的意义-

    image

    文章参考:
    https://www.cnblogs.com/panwenbin-logs/p/8007348.html

  • 相关阅读:
    linux中公钥和私钥的区别以及关系
    PAM
    57 容器(十一)——Collections容器工具类
    56 容器(十)——Iterator迭代器遍历容器
    55 重载需要注意的地方
    54 容器(九)——HashSet
    53 容器(八)——TreeMap 红黑树
    52 权限修饰符
    51 方法重写需要注意的地方
    50 多态,为什么总是要用父类引用指向子类对象?
  • 原文地址:https://www.cnblogs.com/soilge/p/11793032.html
Copyright © 2011-2022 走看看