docker高阶部分学习(二)---Dockerfile

728 阅读4分钟

初识Dockerfile

dockerfile简介

dockerfile就是用来构建docker镜像文件的!命令脚本!先体验一下. 通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层! 写一个dockerfile

# 创立一个dockerfile文件,名字可以随便的取,最好叫做dockerfile 
# 文件中的内容 指令(大写) 参数 
FROM centos 
VOLUME ["volme01","volume02"] 
CMD echo "--------end----------" 
CMD /bin/bash 
#这里每个指令就是镜像的一层 

使用dockerfile生成镜像

docker build -f dockerfile文件位置 -t 镜像名称和版本 镜像生成的位置

GetImage (11).png

  • 进入镜像查看详情 GetImage (12).png
  • 查看卷的同步目录
    • docker ps -a
    • docker inspect 容器id
    • GetImage (13).png
  • 最后测试两个文件夹中是不是同步
    • 同步成功
  • 总结
    • 使用dockerfile构建镜像的方式在我们未来的使用中非常的多,因为我们通常会构建自己的镜像
    • 假设构建镜像时候没有挂载卷,要手动镜像挂载-v

Dockerfile详解

  • dockerfile简介
    • dockerfile是用来构建dokcer像的文件!命令参数脚本!
  • 构建步骤
    • 编写一个 dockerfile 文件
    • dockerbuild构建成为一个镜像
    • dockerrun运行镜像
    • Docker push 发布镜像(DockerHub、阿里云像仓库)
  • 查看官方是怎样构建的 GetImage (22).png

  • 点击红色的框,会跳转到github的地址中

    • GetImage (24).png
    • 很多官方镜像都是基础包,很多的功能都没有,我们通常会自己搭建自己的镜像
    • 官方既然可以制作镜像,我们也可以
  • Dockerfile的编写规范

    1. 每一个保留关键字(指令)都是必须是大写字母
    2. 执行从上到下顺序执行
    3. #表示注释
    4. 每一个指令都会创建提交一个新的镜像层,并提交 GetImage (25).png
  • Dockerfile的深远影响

    1. dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!
    2. Docker镜像逐渐成为企业交付的标准,必须要掌握!
    3. 步骤:开发,部署,运维。。。缺一不可!
      1. DockerFiIe构建文件,定义了一切的步骤,源代码 (自己开发

      2. Dockerlmages 通过DockerFiIe构建生成的像,最终发布和运行的产品! (使用)

      3. Docker容器容器就是镜像运行起来提供服务器 (使用)

    • Dockerfile指令

      • GetImage (26).png
      • GetImage (27).png

实战

Dockerfile的命令

FROM centos 
MAINTAINER waws<16601203140@163.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 
  • 安装过程的效果
Sending build context to Docker daemon  2.048kB 
Step 1/10 : FROM centos                                              # 安装从centos开始  
---> 0d120b6ccaa8 
Step 2/10 : MAINTAINER waws<16601203140@163.com>                     # 作者信息 
---> Running in dd1d454e365b 
Removing intermediate container dd1d454e365b 
---> 0eb159a21f67 
Step 3/10 : ENV MYPATH /usr/local                                      #  环境变量 
---> Running in 4b61abda7759 
Removing intermediate container 4b61abda7759 
---> 2597f9cf4496 
Step 4/10 : WORKDIR @MYPATH                                            # 设定工作目录 
---> Running in 527632c7d29f 
Removing intermediate container 527632c7d29f 
---> d6cd1780dfb5 
Step 5/10 : RUN yum -y install vim                                    # 从网络上下载vim 和 net-tools 
---> Running in 5867417fe57a 
CentOS-8 - AppStream                            2.7 MB/s | 5.8 MB     00:02     
CentOS-8 - Base                                 2.0 MB/s | 2.2 MB     00:01     
CentOS-8 - Extras                               7.4 kB/s | 8.1 kB     00:01     
Dependencies resolved. 
================================================================================ 

Package             Arch        Version                   Repository      Size 

================================================================================ 
Installing: 
vim-enhanced        x86_64      2:8.0.1763-13.el8         AppStream      1.4 M 
Installing dependencies: 
gpm-libs            x86_64      1.20.7-15.el8             AppStream       39 k 
vim-common          x86_64      2:8.0.1763-13.el8         AppStream      6.3 M 
vim-filesystem      noarch      2:8.0.1763-13.el8         AppStream       48 k 
which               x86_64      2.21-12.el8               BaseOS          49 k 
 
Transaction Summary 
================================================================================ 
Install  5 Packages 

Total download size: 7.8 M 
Installed size: 31 M 
Downloading Packages: 
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm         37 kB/s |  39 kB     00:01     
(2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 545 kB/s |  48 kB     00:00     
(3/5): which-2.21-12.el8.x86_64.rpm             194 kB/s |  49 kB     00:00     
(4/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm  771 kB/s | 1.4 MB     00:01     
(5/5): vim-common-8.0.1763-13.el8.x86_64.rpm    1.3 MB/s | 6.3 MB     00:04     
-------------------------------------------------------------------------------- 
Total                                           1.2 MB/s | 7.8 MB     00:06      
warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY 
CentOS-8 - AppStream                            1.6 MB/s | 1.6 kB     00:00     
Importing GPG key 0x8483C65D: 
Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>" 
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D 
From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial 
Key imported successfully 
Running transaction check 
Transaction check succeeded. 
Running transaction test 
Transaction test succeeded. 
Running transaction 
  Preparing        :                                                        1/1  
  Installing       : which-2.21-12.el8.x86_64                               1/5  
  Installing       : vim-filesystem-2:8.0.1763-13.el8.noarch                2/5  
  Installing       : vim-common-2:8.0.1763-13.el8.x86_64                    3/5  
  Installing       : gpm-libs-1.20.7-15.el8.x86_64                          4/5  
  Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64                          4/5  
  Installing       : vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5  
  Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5  
  Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64                    5/5  
  Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          1/5  
  Verifying        : vim-common-2:8.0.1763-13.el8.x86_64                    2/5  
  Verifying        : vim-enhanced-2:8.0.1763-13.el8.x86_64                  3/5  
  Verifying        : vim-filesystem-2:8.0.1763-13.el8.noarch                4/5  
  Verifying        : which-2.21-12.el8.x86_64                               5/5  

Installed: 
  gpm-libs-1.20.7-15.el8.x86_64         vim-common-2:8.0.1763-13.el8.x86_64     
  vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch 
  which-2.21-12.el8.x86_64              

Complete! 
Removing intermediate container 5867417fe57a 
---> c72800950e21 
Step 6/10 : RUN yum -y install net-tools 
---> Running in 09f5890b9264 
Last metadata expiration check: 0:00:12 ago on Sat Oct  3 09:46:06 2020. 
Dependencies resolved. 
================================================================================ 

Package         Architecture Version                        Repository    Size 

================================================================================ 
Installing: 
net-tools       x86_64       2.0-0.51.20160912git.el8       BaseOS       323 k 

Transaction Summary 
================================================================================ 

Install  1 Package 

Total download size: 323 k 
Installed size: 1.0 M 
Downloading Packages: 
net-tools-2.0-0.51.20160912git.el8.x86_64.rpm   1.7 MB/s | 323 kB     00:00     
-------------------------------------------------------------------------------- 
Total                                           504 kB/s | 323 kB     00:00      
Running transaction check 
Transaction check succeeded. 
Running transaction test 
Transaction test succeeded. 
Running transaction 
  Preparing        :                                                        1/1  
  Installing       : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1  
  Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_64              1/1  
  Verifying        : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1  

Installed: 
  net-tools-2.0-0.51.20160912git.el8.x86_64                                      

Complete! 
Removing intermediate container 09f5890b9264 
---> cd3a6c56f9e6 
Step 7/10 : EXPOSE 80                                                 # 暴露80端口 
---> Running in 5e71dc82b66d 
Removing intermediate container 5e71dc82b66d 
---> 7699d971e2de 
Step 8/10 : CMD echo $MYPATH                                          # 执行命令 
---> Running in cd1156844880 
Removing intermediate container cd1156844880 
---> 5f62b3148180 
Step 9/10 : CMD echo "-------end-------" 
---> Running in 44fd371fabe7 
Removing intermediate container 44fd371fabe7 
---> fc4fcc5350bc 
Step 10/10 : CMD /bin/bash 
---> Running in 47d3d9910051 
Removing intermediate container 47d3d9910051 
---> b6b678359c7e 
Successfully built b6b678359c7e                                        # 构建成功的标志 
Successfully tagged mycentos:latest 
  • 效果展示

    • GetImage (28).png
    • GetImage (29).png

CMD和ENTRYPOINT的区别

  • CMD是替换命令
FROM centos 
CMD ["ls","-a"] exit
  • 效果
    • GetImage (30).png
  • ENTRYPOINT是追加命令
FROM centos 
ENTRYPOINT ["ls","-a"] 
  • 效果

GetImage (31).png

实战tomcat

  • 首先准备镜像需要的文件,tomcat的安装包,jdk安装包(这个地方下载就行,注意数字对应)

    • GetImage (32).png
  • 编写dockerfile文件,官方命名,build会直接自动寻找这个文件,就不需要-f进行文件的指定

FROM centos 
MAINTAINER waws<16601203140@163.com> 
COPY readme.txt /usr/local/readme.txt 
ADD jdk-8u101-linux-x64.tar.gz /usr/local/ 
ADD apache-tomcat-9.0.27.tar.gz /usr/local/ 
RUN yum -y install vim 
ENV MYPATH /usr/local 
WORKDIR $MYPATH 
ENV JAVA_HOME /usr/local/jdk1.8.0_101 
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.27 
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib 
EXPOSE 8080 
CMD /usr/local/apache-tomcat-9.0.27/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.27/logs/catalina.out 
  • 构建镜像

    • Docker build -t diytomcat:1.0
  • 启动镜像

    • docker run -d -p 9090:8080 --name tomcat01 -v /home/test:/usr/local/apache-tomcat-9.0.27/webapps/test -v /home/tomcatlogs/:/usr/local/apache-tomcat-9.0.27/logs diytomcat:1.0 
      
  • 发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)

发布自己的docker镜像

  • 发布到dockerhub

    • dockerhub地址:hub.docker.com/ 注册自己的账号

    • 确保这个账号可以登录

      • 登录成功显示 -GetImage (33).png
    • 在我们的服务器上提交自己的镜像

    • 登录完毕之后就可以提交镜像了,就是一步 docker push

      • root@iZbp12kyfwxfku3288sr59Z:/home# 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@iZbp12kyfwxfku3288sr59Z:/home# docker login -u waws520                           登录的命令 
        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                                                                     登录成功 
        
    • 进行提交

      • 提交有个前提就是我们的镜像的tag必须要以我们的用户名开始,否则拒绝提交
        • denied: requested access to the resource is denied
          • 1 先登录 docker login
          • 2 查看tag是否有用户名
        • 首先我们对其重新打标签
          • docker tag 镜像id waws520/my_image:1.0
          • Docker push waws520/my_image:1.0
          • 正在上传
            • GetImage (34).png
          • 上传成功
        • 提交的时候也是按照层来进行提交的

发布到阿里云

  • 登录阿里云

  • 找到镜像服务

  • 创建命名空间

    • GetImage (35).png
  • 创建仓库

    • GetImage (36).png
    • GetImage (37).png
  • 详细的步骤

    • GetImage (38).png
      • 登录成功
        • GetImage (39).png
      • 更改版本号以及上传
        • GetImage (40).png

压缩包

  • Save
    • GetImage (41).png
  • Load
    • GetImage (42).png