DockerFile

DockerFile

DockerFile介绍

dockerfile是用来构建docker镜像的文件!

构建步骤:

  1. 编写一个dockerfile文件。
  2. docker build构建成一个镜像。
  3. docker run 运行镜像。
  4. docker push 发布镜像(Docker Hub、阿里云镜像仓库)。

查看一下官方例子

CentOS:https://hub.docker.com/_/centos

点击红框中的连接查看centos,dockerfile。

很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像。

官方既然可以制作镜像,那我们也可以!

DockerFile构建过程

基础知识

  1. 每个保留关键字(指令)都是必须是大写字母。

  2. 执行是从上到下顺序执行。

  3. # 表示注释。

  4. 每一个指令都会创建提交一个新的镜像层并提交。

    DockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写DockerFile文件,这个文件十分简单。

    Docker镜像逐渐成为企业交付的标准。

    DockerFile三大步骤:

  • DockerFile:构建文件,定义了一切的步骤,源代码。

  • DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品。

  • Docker容器:容器就是镜像运行起来提供服务器。

DockerFile的命令

FROM # 基础镜像,一切从这里开始构建。
MAINTAINER # 镜像作者,格式:姓名+邮箱。
RUN # 镜像构建的时候需要运行的命令。
ADD # 步骤:tomcat镜像,这个tomcat压缩包!添加内容。
WORKDIR # 镜像的工作目录。
VOLUME # 挂载的目录。
EXPOSE # 保留端口配置。
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令。
ONBUILD # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的命令。
COPY # 类似ADD,将我们文件拷贝到镜像中。
ENV # 构建的时候设置环境变量。

练习

DockerHub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建。

# 编写DockerFile配置文件
[root@localhost dockerfile]# vim mydockerfile

FROM centos
MAINTAINER webb<admin@admin.com>

ENV MYPATH /usr/local
WORKDIR MYPATH

RUN yum -y install vim net-tools 

EXPOSE 80

CMD echoMYPATH
CMD echo "---end---"
CMD /bin/bash

# 开始构建
[root@localhost dockerfile]# docker build -f mydockerfile -t mycentos:0.1 .

# 我们可以列出本地进行的更变历史
[root@localhost dockerfile]# docker history webb/centos:1.0 
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
b883d4704605   35 hours ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
b38ac4724313   35 hours ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
5b7725918c4d   35 hours ago   /bin/sh -c #(nop)  VOLUME [volume01 volume02]   0B        
300e315adb2f   6 weeks ago    /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      6 weeks ago    /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      6 weeks ago    /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB 

练习:Tomcat镜像

  • 准备镜像文件,tomcat压缩包,jdk的压缩包。
[root@localhost dockerfile]# ll
总用量 196636
-rw-r--r-- 1 root root  10492067 12月  3 22:18 apache-tomcat-8.5.61.tar.gz
-rw-r--r-- 1 root root 174287938 1月  15 2020 openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
  • 编写dockerfile文件,官方命令Dockerfile
[root@localhost dockerfile]# vim Dockerfile

FROM centos
MAINTAINER webb<admin@admin.com>

COPY readme.txt /usr/local/readme.txt

ADD openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz /usr/local/
ADD apache-tomcat-8.5.61.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local

WORKDIR MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATHJAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/tomcat9.0.22
ENV CATALINA_BASH /usr/local/tomcat9.0.22
ENV PATHPATH:JAVA_HOME/bin:CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/tomcat9.0.22/bin/startup.sh && taill -F /usr/local/tomcat9.0.22/bin/logs/catalina.out
  • 构建镜像
[root@localhost dockerfile]# docker build -t diytomcat .
  • 运行镜像
[root@localhost dockerfile]# docker images
REPOSITORY                        TAG       IMAGE ID       CREATED          SIZE
diytomcat                         latest    af9b5ced25dc   17 seconds ago   497MB
...

[root@localhost dockerfile]# docker run -d -p 9090:8080 --name webbTomcat -v /home/dockerfile/test:/usr/local/tomcat9.0.22/webapps/test -v /home/dockerfile/tomcat.log/:/usr/local/tomcat9.0.22/logs diytomcat
WARNING: IPv4 forwarding is disabled. Networking will not work.
788eef4e1a5238dd3af054513ca80d476b2178f39a348f7df8c6bb72eada94d7

发布镜像

DockerHub

  1. https://hub.docker.com/注册一个自己的账号。

  2. 确定这个账号能登录。

  3. 提交镜像。

    [root@localhost ~]# 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
    [root@localhost ~]# docker login -u *** -p ***
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    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
    
  4. 登录完毕后就可以提交镜像了,就是一步docker push。
    [root@localhost ~]# docker images
    REPOSITORY                        TAG       IMAGE ID       CREATED         SIZE
    mytomcat                          latest    7024a651657e   10 hours ago    497MB
    ...
    # 如果拒绝上传就添加一个tag
    [root@localhost ~]# docker tag mytomcat webb1024/mytomcat:1.0
    [root@localhost ~]# docker push webb1024/mytomcat:1.0
    The push refers to repository [docker.io/webb1024/mytomcat]
    7ed882506a33: Pushed 
    2d04f9668912: Pushed 
    1a7078915047: Pushed 
    2653d992f4ef: Pushed 
    1.0: digest: sha256:51adeac909cb63a2467cb8a0ecb72d4eccf03ef8de488d5d7c1129788a0f0da1 size: 1161
    

阿里云镜像服务

  1. 登录阿里云。

  2. 找到容器镜像服务。

  3. 创建命名空间https://cr.console.aliyun.com/cn-hangzhou/instances/namespaces。

  4. 创建镜像仓库。

  5. 点击下一步,选择本地仓库即可。

  6. 提交镜像。

    [root@localhost ~]# docker tag 7024a651657e registry.cn-hangzhou.aliyuncs.com/webbtest/webbtest:1.0
    [root@localhost ~]# docker push registry.cn-hangzhou.aliyuncs.com/webbtest/webbtest:1.0
    The push refers to repository [registry.cn-hangzhou.aliyuncs.com/webbtest/webbtest]
    7ed882506a33: Pushed 
    2d04f9668912: Pushed 
    1a7078915047: Pushed 
    2653d992f4ef: Pushed 
    1.0: digest: sha256:51adeac909cb63a2467cb8a0ecb72d4eccf03ef8de488d5d7c1129788a0f0da1 size: 1161