• Docker核心:深入理解Dockerfile,通过Dockerfile构建自己的镜像并发布到远程(DockerHub、阿里云)


    在这里插入图片描述


    一、概述

    Dockerfile就是用来构建docke镜像的构建文件,是一段命令脚本,通过脚本可以生成镜像,镜像是一层一层的,脚本是一行一行的命令,每个命令都是一层!!

    构建镜像步骤

    ① 编写一个 dockerfile 文件
    ② 使用 docker build构建镜像
    docker run 运行镜像
    docker push发布镜像到远程

    查看官方是如何做的,以centos为例:

    在这里插入图片描述
    在这里插入图片描述

    二、Dockerfile特点

    • 每个保留的关键字(指令)都必须是大写字母
    • 指令从上到下顺序执行
    • #标识注释
    • 每一个指令都会创建提交一个新的镜像层

    在这里插入图片描述

    Dockerfile:构建文件,定义了构建镜像的步骤,相当于源代码
    Docker Images:通过Dockerfile构建生成的镜像,最终发布和运行的产品
    Docker容器:容器就是镜像运行起来提供服务

    三、Dockerfile指令

    FROM   # 基础镜像,一切从这里开始构建
    MAINTAINER  # 	镜像是谁写的,姓名+邮箱
    RUN  # docker镜像构建时需要运行的命令
    ADD  # 	添加内容
    WORKDIR # 镜像工作目录
    VOLUME  # 挂载数据的目录位置
    EXPOSE  # 指定暴露端口
    CMD  # 指定容器启动时运行的命令 只有最后一个会生效,而且可被替代
    ENTRYPOINT  # 指定容器启动时运行的命令 可以追加命令
    ONBUILD  # 当构建一个被继承 dockerfile 这时就会运行,触发指令
    COPY  # 类似ADD 将文件拷贝到镜像中
    ENV  # 构建时设置环境变量
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    四、构建自己的Centos

    FROM centos:7
    MAINTAINER xiaozhao<123456@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

    在这里插入图片描述

    构建镜像

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

    在这里插入图片描述
    在这里插入图片描述

    构建成功

    在这里插入图片描述

    测试运行容器:

    docker run -it mycentos:1.0
    
    • 1

    在这里插入图片描述

    查看镜像的构建过程

    docker history 镜像ID
    
    • 1

    在这里插入图片描述
    CMD 和 ENTRYPOINT 区别

    ① 编写 CMD 测试

    在这里插入图片描述
    构建成功

    在这里插入图片描述
    启动容器,发现直接执行命令

    在这里插入图片描述

    追加命令,出现报错

    docker run cmdtest -l
    docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.
    
    • 1
    • 2

    在这里插入图片描述
    使用CMD 情况时,-l 替换了 CMD ["ls" ,"-a"]命令,所以报错。

    ② ENTRYPOINT 测试

    在这里插入图片描述
    构建成功

    在这里插入图片描述
    在这里插入图片描述
    运行容器

    在这里插入图片描述
    追加命令,测试成功

    在这里插入图片描述

    五、构建Tomcat镜像

    ① 创建镜像文件,准备tomcat,jdk压缩包

    在这里插入图片描述

    ② 编写dockerfile 文件,官方命名 Dockerfile,build构建会自动寻找,无需指定

    FROM centos:7
    MAINTAINER zhao<123456@qq.com>
    
    COPY readme.txt /usr/local/readme.txt
    
    ADD jdk-8u261-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-9.0.37.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.37
    ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.37
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    EXPOSE 8080
    CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && teil -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    ③ 构建镜像

    docker build -t 镜像名称 .
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ④ 启动容器

    docker run -d -p 9090:8080 --name zhaotomcat -v /home/dockerfile/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test -v /home/dockerfile/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.37/logs zhao-tomcat
    
    • 1

    在这里插入图片描述
    ⑤ 内网测试:

    在这里插入图片描述

    外网测试成功:

    在这里插入图片描述

    ⑥ 发布项目

    在主机中挂载数据的test目录发布一个html网页
    在这里插入图片描述

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
        <h1>我的第一个标题</h1>
        <p>我的第一个段落。</p>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    访问此项目

    在这里插入图片描述

    六、发布Docker镜像

    发布Docker镜像到DockerHub

    ① 访问DockerHub官网:https://hub.docker.com/,注册个人账号,并登录

    在这里插入图片描述

    ② 在服务器提交镜像

    登录 dockerhub

    [root@iZuf6cnjz7d24851d3cx8rZ test]# 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

    登陆成功

    在这里插入图片描述

    将镜像 push 到远程

    docker push 镜像名称
    
    • 1

    在这里插入图片描述

    出现报错:requested access to the resource is denied翻译过来就是:请求访问资源被拒绝!!

    解决方案

    给需要上传的镜像重新打一个 tag

    docker tag 原镜像名称 (dockerhub用户名) / 镜像名:标签
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    重新push

    在这里插入图片描述
    回到dockerhub查看!

    在这里插入图片描述

    发布Docker镜像到阿里云镜像服务

    第一步:进入阿里云容器镜像服务

    在这里插入图片描述

    第二步:创建命名空间

    在这里插入图片描述
    在这里插入图片描述

    第三步:创建镜像仓库

    在这里插入图片描述

    选择本地仓库

    在这里插入图片描述
    在这里插入图片描述

    第四步:点击仓库查看仓库信息

    在这里插入图片描述
    根据仓库提示进行发布镜像
    ① 登陆阿里云账号

    在这里插入图片描述
    ② push镜像到阿里云

    $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xiaozhao/xiaozhao-test:[镜像版本号]
    $ docker push registry.cn-hangzhou.aliyuncs.com/xiaozhao/xiaozhao-test:[镜像版本号]
    
    • 1
    • 2

    修改标签

    在这里插入图片描述
    push生成的镜像

    在这里插入图片描述
    回到阿里云查看!!

    在这里插入图片描述

    Docker全流程

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    MySQL锁
    三、python基础——六大基本数据类型
    【数据挖掘】聚类分析的简要介绍
    LeetCode 图解 | 141.环形链表
    在安卓模拟器(mumu为例)上联调app并且用Charles抓包
    Flink SQL搭建实时数仓DWD层
    hdu3549Flow Problem(最大流模板题)
    python
    【HCIA】IP 编址、子网划分、ICMP
    数据结构第29节 后缀树和后缀数组
  • 原文地址:https://blog.csdn.net/Zp_insist/article/details/127726479