Dockerfile学习

Dockerfile学习

Dockerfile介绍

dockefile是用来构建docker镜像的文件,命令参数脚本。

构建步骤:

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

Dockerfile指令(大小写敏感)

FROM                   #基础镜像,一切从这里开始构建,eg:centos
MAINTAINER             #作者
RUN                    #镜像构建的时候需要运行的命令
ADD                    #步骤,添加一些文件到镜像里面,比如tomcat 的压缩包
WORKDIR                #镜像工作的目录
VOLUME                 #挂在的目录
EXPOSE                 #暴露端口
CMD                    #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT             #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD                #当构建一个被继承 Dockerfile 这个时候就会运行ONBUILD 的指令,属于触发指令
COPY				  #类似ADD,将文件拷贝到镜像中
ENV                    #构建的时候设置环境变量

构建自己的centos

从docker仓库拉的centos 镜像是没有vim 命令的。我们创建一个自带vim命令的centos镜像。

在此之前可以看看别人的镜像是怎么制作的。

# 命令,查看镜像的历史
docker history nginx
# 结果
IMAGE          CREATED       CREATED BY                                       SIZE      COMMENT
605c77e624dd   2 years ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT            0B        
<missing>      2 years ago   /bin/sh -c #(nop)  EXPOSE 80                     0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      2 years ago   /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB    
<missing>      2 years ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB    
<missing>      2 years ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB    
<missing>      2 years ago   /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB     
<missing>      2 years ago   /bin/sh -c set -x     && addgroup --system -…   61.1MB    
<missing>      2 years ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1~bullseye    0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV NJS_VERSION=0.7.1         0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.21.5      0B        
<missing>      2 years ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  CMD ["bash"]                  0B        
<missing>      2 years ago   /bin/sh -c #(nop) ADD file:09675d11695f65c55…   80.4MB 

  1. 我们再/home/dockerfile目录下添加一个dockerfile文件。

    FROM centos                            #一切从这儿开始,基础镜像是centos
    MAINTAINER sanqiangyuan                #作者
    
    ENV MYPATH /usr/local                  #创建一个环境变量
    WORKDIR $MYPATH                        #指定工作目录,相当于镜像执行之后,自动到指定的目录去执行命令。
    
    RUN yum -y install vim                 #执行具体的命令,下载vim 和 net-tools
    run yum -y install net-tools
    
    EXPOSE 80                              #暴露一个端口
    
    CMD echo $mypath                       #输出点东西,可以直接看到自己的镜像是否启动成功
    CMD echo "----end----"
    CMD /bin/bash                          
    
  2. 构建自己的镜像

    #命令 docker build -f dockerfile文件路径 -t 镜像名:版本 .
    docker build -f mydockerfile-centos -t mycentos:0.1 .
    #构建成功
    Successfully built e2badf21vcdfv
    Successfully tagged mycentos:0.1
    
  3. 测试运行

构建自己的tomcat镜像

在此之前可以看看官方的镜像是怎么制作的。

IMAGE          CREATED       CREATED BY                                       SIZE      COMMENT
fb5657adc892   2 years ago   /bin/sh -c #(nop)  CMD ["catalina.sh" "run"]     0B        
<missing>      2 years ago   /bin/sh -c #(nop)  EXPOSE 8080                   0B        
<missing>      2 years ago   /bin/sh -c set -eux;  nativeLines="$(catalin…   0B        
<missing>      2 years ago   /bin/sh -c set -eux;   savedAptMark="$(apt-m…   20.2MB    
<missing>      2 years ago   /bin/sh -c #(nop)  ENV TOMCAT_SHA512=c2d2ad5…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV TOMCAT_VERSION=10.0.14    0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV TOMCAT_MAJOR=10           0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV GPG_KEYS=A9C5DF4D22E9…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV LD_LIBRARY_PATH=/usr/…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV TOMCAT_NATIVE_LIBDIR=…   0B        
<missing>      2 years ago   /bin/sh -c #(nop) WORKDIR /usr/local/tomcat      0B        
<missing>      2 years ago   /bin/sh -c mkdir -p "$CATALINA_HOME"             0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV PATH=/usr/local/tomca…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV CATALINA_HOME=/usr/lo…   0B        
<missing>      2 years ago   /bin/sh -c #(nop)  CMD ["jshell"]                0B        
<missing>      2 years ago   /bin/sh -c set -eux;   arch="$(dpkg --print-…   343MB     
<missing>      2 years ago   /bin/sh -c #(nop)  ENV JAVA_VERSION=11.0.13      0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV LANG=C.UTF-8              0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ENV PATH=/usr/local/openj…   0B        
<missing>      2 years ago   /bin/sh -c { echo '#/bin/sh'; echo 'echo "$J…   27B       
<missing>      2 years ago   /bin/sh -c #(nop)  ENV JAVA_HOME=/usr/local/…   0B        
<missing>      2 years ago   /bin/sh -c set -eux;  apt-get update;  apt-g…   11.3MB    
<missing>      2 years ago   /bin/sh -c apt-get update && apt-get install…   152MB     
<missing>      2 years ago   /bin/sh -c set -ex;  if ! command -v gpg > /…   18.9MB    
<missing>      2 years ago   /bin/sh -c set -eux;  apt-get update;  apt-g…   10.7MB    
<missing>      2 years ago   /bin/sh -c #(nop)  CMD ["bash"]                  0B        
<missing>      2 years ago   /bin/sh -c #(nop) ADD file:c03517c5ddbed4053…   124MB

其实我们可以在别人的镜像上面做修改,然后打包生成自己的镜像。为了学习,还是从头制作一个吧。

  1. 准备tomcat镜像文件

    需要两个压缩包,tomcat压缩包和jdk压缩包放在自己的工作目录

    # 命令
    cd /home/dockerfile/tomcat    # 来到我们的工作目录
    
    vim Dockerfile                # Dockerfile是官方命名,用这个名字build镜像,不需要指定文件名,默认找Dockerfile文件构建
    
    FROM centos
    MAINTAINER suanqianyuan
    
    ADD /home/tools/apache-tomcat-9.0.86.tar.gz /usr/local/  # ADD 会自动解压
    ADD /home/tools/jdk-8u401-linux-x64.tar.gz /usr/local/
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    ENV JAVA_HOME /usr/local/jdk1.8.0_401
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.86
    ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.86
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-tomcat-9.0.86/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.86/logs/catalina.out
    
  2. 构建镜像

    docker build -t mytomcat_02 .
    
  3. 测试运行

    # 运行我们的镜像。
    docker run -d  -p 9010:8080 -it mytomcat_02
    # 查看运行状态
    docker ps
    # 
    CONTAINER ID   IMAGE         COMMAND                   CREATED          STATUS          PORTS                                       NAMES
    77c972ce2c6d   mytomcat_02   "/bin/sh -c '/usr/lo…"   11 minutes ago   Up 11 minutes   0.0.0.0:9010->8080/tcp, :::9010->8080/tcp   musing_sinoussi
    

    测试一下

    curl localhost:9010/
    

发布镜像

  1. 发布到DockerHub(一般不用,这个要连外网)

    这个需要到官网注册账号才行。有了账号就可以登录了。

    docker login --help
    Usage:  docker login [OPTIONS] [SERVER]
    
    Log in to a 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
    

    登录之后就可以docker push了

    Usage:  docker push [OPTIONS] NAME[:TAG]
    
    Upload an image to a registry
    
    Aliases:
      docker image push, docker push
    
    Options:
      -a, --all-tags                Push all tags of an image to the repository
          --disable-content-trust   Skip image signing (default true)
      -q, --quiet                   Suppress verbose output
    
    docker push mytomcat_02
    
    1. 发布到阿里云镜像
      • 登录阿里云控制台
      • 找到容器镜像服务
      • 创建命名空间
      • 上面步骤完成以后,会自动跳转到镜像仓库的基本信息页面,非常详细,可以跟着上面的步骤进行上传和拉取镜像
posted @ 2024-03-17 16:56  繁星TT  阅读(10)  评论(0)    收藏  举报