• Docker知识总结 (五) Dockerfile


    Dockerfile 介绍

    Dockerfile是用来构建docker 镜像的构建文件!命令参数脚本!

    Dockerfile 构建过程

    基础知识:
    (1) 指令必须是大写字母
    (2) 执行从上到下
    (3) # 表示注释
    (4) 每一个指令都会创建提交一个新的镜像层并提交
    在这里插入图片描述

    Dockerfile 指令

    所有命令官方文档:https://docs.docker.com/engine/reference/builder/

    如下部分命令:

    FROM   # 指定基础镜像 一切从这里开始
    RUN    # 镜像构建的时候需要运行的命令
    CMD    # 指定这个容器启动的时后要运行的命令(只有最后一个会生效,可被替代)
    ENTRYPOINT # 指定这个容器启动的时候要运行的命令(可追加命令)
    LABEL  # 设置镜像的标签
    MAINTAINER # 镜像是谁写的,姓名+邮箱
    EXPOSE # 保留端口配置
    ENV # 构建的时候设置环境变量
    ADD    # copy文件。会自动解压
    COPY # 类似ADD,将文件拷贝到镜像中
    VOLUME # 挂载的目录
    WORKDIR# 镜像的工作目录
    ARG  # 设置编译镜像时加入的参数
    ONBUILD # 当构建被继承 DockerFIle 这个时候就会运行
    STOPSIGNAL  #设置容器的退出信号量
    HEALTHCHECK
    SHELL
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    创建一个自己的centos镜像

    centos官方镜像的Dockerfile:
    在这里插入图片描述
    (1) 创建Dockerfile文件

    [root@VM-4-17-centos dockerfile]# cat dockerfile-centos 
    FROM centos:centos7.9.2009
    MAINTAINER zhx<3136713504@qq.com>
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    RUN yum -y install vim
    RUN yum -y install net-tools
    
    EXPOSE 80
    
    CMD echo $MYPATH
    CMD echo '-----end-----'
    CMD /bin/bash
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    (2) 执行docker build

    docker build -f dockerfile-centos -t mycentos:1.0 .
    
    
    • 1
    • 2

    最终返回success即代表成功。

    (3) 测试运行

    [root@VM-4-17-centos dockerfile]# docker run -it mycentos:1.0
    [root@bb6bdc3229c1 local]# pwd
    /usr/local
    [root@bb6bdc3229c1 local]# vim test.java    # 测试新增的vim是否成功
    [root@bb6bdc3229c1 local]# ifconfig    # 测试新增的ifconfig是否成功
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
            ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
            RX packets 8  bytes 656 (656.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    (4) 查看镜像的构建过程

    [root@VM-4-17-centos dockerfile]# docker history 0c18e8f6d0e7
    IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
    0c18e8f6d0e7   20 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
    bcea0da1c1e6   20 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
    8082a2aa1189   20 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
    bd24d65a0400   20 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
    a1cdffcb80bc   20 minutes ago   /bin/sh -c yum -y install net-tools             166MB     
    53ea63c137f6   20 minutes ago   /bin/sh -c yum -y install vim                   221MB     
    27c642c3be3e   20 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
    f818b92286c2   20 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
    9f16cd75f5f5   20 minutes ago   /bin/sh -c #(nop)  MAINTAINER zhx<3136713504…   0B        
    eeb6ee3f44bd   7 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
    <missing>      7 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
    <missing>      7 months ago     /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    创建一个tomcat镜像

    (1) 准备的资源路径

    [root@VM-4-17-centos tomcat-src]# pwd
    /home/tomcat-src
    [root@VM-4-17-centos tomcat-src]# ls
    apache-tomcat-9.0.22.tar.gz  Dockerfile  jdk-8u261-linux-x64.tar.gz
    
    • 1
    • 2
    • 3
    • 4

    (2) 创建Dockerfile

    FROM centos:centos7.6.1810
    MAINTAINER zhx<3136xxxxxx@qq.com>
    
    ADD jdk-8u261-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-9.0.22.tar.gz /usr/local/
    
    RUN yum -y install vim
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    ENV JAVA_HOME /usr/local/jdk1.8.0_261
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
    ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.22
    ENV PATH $PATH:$JAVA_HOME/bin:CATALINA_HOME/lib:CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.22/logs/catalina.out
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    (3) 构建镜像

    [root@VM-4-17-centos tomcat-src]# docker build -f ./Dockerfile -t diytomcat:1.0 .
    
    • 1

    (4) 启动运行

    docker run -d -p 8080:8080 --name diytomcat01 -v /home/build/tomcat/test/:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs diytomcat:1.0
    
    
    • 1
    • 2

    (5) 测试环境是否装好了

    1. 外部访问: ip地址:8080
    2. 运行java,javac等命令

    发布镜像到docker hub

    1. 需要一个 https://hub.docker.com/的账号
    2. 使用 docker login 登录

    docker login语法:

    [root@VM-4-17-centos tomcat]# docker login --help
    
    Usage:  docker login [OPTIONS] [SERVER]
    
    Log in to a Docker registry.
    If no server is specified, the default is defined by the daemon.
    
    Options:
      -p, --password string   Password
          --password-stdin    Take the password from stdin
      -u, --username string   Username
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    登录:

    [root@VM-4-17-centos tomcat]# docker login -u username
    Password: 
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 使用docker push 提交镜像到docker hub
      docker push语法:
    [root@VM-4-17-centos tomcat]# docker push --help
    
    Usage:  docker push [OPTIONS] NAME[:TAG]
    
    Push an image or a repository to a registry
    
    Options:
      -a, --all-tags                Push all tagged images in the repository
          --disable-content-trust   Skip image signing (default true)
      -q, --quiet                   Suppress verbose output
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    添加一个tag:

    [root@VM-4-17-centos tomcat-src]# docker images
    REPOSITORY   TAG              IMAGE ID       CREATED          SIZE
    diytomcat    1.0              dadb05f09719   15 seconds ago   790MB
    mysql        latest           3218b38490ce   4 months ago     516MB
    centos       centos7.6.1810   f1cb7c7d58b7   3 years ago      202MB
    [root@VM-4-17-centos tomcat-src]# docker tag diytomcat:1.0 jikezhang/diytomcat:1.0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    push:

    [root@VM-4-17-centos tomcat-src]# docker push jikezhang/diytomcat:1.0
    The push refers to repository [docker.io/jikezhang/diytomcat]
    ef5292fe44f0: Pushed 
    267d2ef6470a: Pushed 
    d9e099ac4dde: Pushed 
    89169d87dbe2: Pushed 
    1.0: digest: sha256:21ec50deca4cc74451e318dc6c42ccf40d2a44837c08883c5f11b146ec016905 size: 1166
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    记录:2022-9-28 岛屿的最大面积 字母异位词分组 雪花算法实现 偏向锁 |锁升级 阻塞线程的方式
    MobaXterm常用使用功能设置
    html在线商城购物网站制作——基于HTML+CSS+JavaScript鲜花礼品电商网站
    一分钟彻底掌握Java的Object类与java.lang包
    06- 诊断事件DemEventParameter的配置
    5G NR Polar码简介(一)
    【C++】list
    Mybatis传统方式实现Dao层
    wireshark通常无法抓取交换机所有端口报文
    Apache JMeter
  • 原文地址:https://blog.csdn.net/weixin_45773632/article/details/126195924