DockerFile解析

DockerFile解析
  1. 简介
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
步骤:
    手动编写一个dockerfile文件,必须否和file的规范
    直接使用docker build 命令执行,获取镜像
    run
  1. DockerFile构建过程解析
  • Dockerfile内容基础知识
1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2.指令按照从上到下,顺序执行
3.#表示注释
4.每条指令都会创建一个新的镜像层,并对镜像进行提交
  • Docker执行Docker的大致流程
1.docker从基础镜像(scratch镜像)运行一个容器
2.执行一条指令并对容器做出修改
3.执行类似docker commit的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新的容器
5.执行dockerfile中的下一条指令直到所有指令都执行完成
  1. DockerFile体系结构
  • 保留关键字:
  FROM
      基础镜像,当前镜像是基于那个的
  MAINTAINER
      镜像维护者姓名和邮箱地址
  RUN
      容器构建时需要运行的命令
  EXPOSE
      当前容器对外暴露的端口
  WORKDIR
      指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
  ENV
      用来构建镜像过程中设置环境变量
  ADD
      将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  COPY
      拷贝文件和目录到镜像中。不解压
      copy src dest 
      copy ["src","dest"]
      
  VOLUME
      容器数据卷,用于数据保存和持久化工作
  CMD
      指定一个容器启动时要运行的命令
      Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换 
  ENTRYPOINT
      指定一个容器启动时要运行的命令
      目的和CMD一样,都是在指定容器启动程序及参数
          docker run 之后的参数会被当做参数传递给ENTRYPOUNT,之后形成新的命令组合
  ONBUILD
      当构建一个被继承的Dockerfile时运行命令,父镜 像在被子继承后,父镜像的onbuild被触发
  .dockerignore    忽略
  1. 案例
Base镜像(scratch), Docker Hub 中99% 的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
  • 自定义镜像tomcat9步骤
1.mkdir -p /zzmmuse/mydockerfile/tomcat9
2.在上述目录下touch.txt
3.将jdk和tomcat安装的压缩包拷贝进上一步目录
      apache-tomcat-9.0.8.tar.gz
      jdk-8u171-linux-x64.tar.gz
4.在  /zzmmuse/mydockerfile/tomcat9目录下新建Dockerfile文件
5.构建    docker build -t zzmmtomcat9 .         在Dockerfile  当前目录下执行可以不写-f
6.docker images   查看镜像已存在
7.run
8.验证 (宿主机浏览器验证 localhost:9080)
9.结合前述的容器卷将测试的web服务可在test中发布
  • Dockerfile文件
FROM       centos
MAINTAINER        zzmm<zzmm123@163.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt  /usr/local/cincontainer.txt
#把java和tomcat 添加到容器中
ADD jdk-8u171-linux-x64.tar.gz  /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME  /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE    /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:CATALINA_HOME/lib:$CATALINA_HOME/bin
# 容器运行时监听的端口
EXPOSE   8080
#启动时运行tomcat
# ENTRYPOINT  ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
# CMD  ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
  • build报错了
build 构建镜像执行打印的结果,报错了
[root@centos7-basic tomcat9]# docker build -f ./Dockerfile -t zzmmtomcat9:1.1 .
Sending build context to Docker daemon  200.7MB
Step 1/15 : FROM       centos
 ---> 0f3e07c0138f
Step 2/15 : MAINTAINER        zzmm<zzmm123@163.com>
 ---> Using cache
 ---> 7c93ec922dbf
Step 3/15 : COPY ./c.txt  /usr/local/cincontainer.txt
 ---> Using cache
 ---> 7fa5099b5382
Step 4/15 : ADD ./jdk-8u171-linux-x64.tar.gz  /usr/local/
 ---> Using cache
 ---> d3dc156c67f5
Step 5/15 : ADD ./apache-tomcat-9.0.8.tar.gz /usr/local/
 ---> Using cache
 ---> 660810de99ec
Step 6/15 : RUN yum -y install vim
 ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
 ---> Running in b2aa018fb864
CentOS-8 - AppStream                            0.0  B/s |   0  B     00:20    
CentOS-8 - Base                                 0.0  B/s |   0  B     00:20    
CentOS-8 - Extras                               0.0  B/s |   0  B     00:20    
No match for argument: vim
Failed to synchronize cache for repo 'AppStream', ignoring this repo.
Failed to synchronize cache for repo 'BaseOS', ignoring this repo.
Failed to synchronize cache for repo 'extras', ignoring this repo.
Error: Unable to find a match
The command '/bin/sh -c yum -y install vim' returned a non-zero code: 1
  • 解决方法
在docker的宿主机中更改以下

[root@localhost ~]# vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:
    net.ipv4.ip_forward=1

重启network服务
# systemctl restart network

  • build 构建镜像执行打印的结果
[root@centos7-basic tomcat9]# docker build -f ./Dockerfile -t zzmmtomcat9:1.1 .
Sending build context to Docker daemon  200.7MB
Step 1/15 : FROM       centos
 ---> 0f3e07c0138f
Step 2/15 : MAINTAINER        zzmm<zzmm123@163.com>
 ---> Running in 164e9aef2d81
Removing intermediate container 164e9aef2d81
 ---> b3614dc43075
Step 3/15 : COPY c.txt  /usr/local/cincontainer.txt
 ---> 77ef2e28ce61
Step 4/15 : ADD jdk-8u171-linux-x64.tar.gz  /usr/local/
 ---> 21bec90956c5
Step 5/15 : ADD apache-tomcat-9.0.8.tar.gz /usr/local/
 ---> 9f5c30c6872d
Step 6/15 : RUN yum -y install vim
 ---> Running in 74e96c7a4822
CentOS-8 - AppStream                            1.2 MB/s | 6.3 MB     00:05    
CentOS-8 - Base                                 1.3 MB/s | 7.9 MB     00:05    
CentOS-8 - Extras                               711  B/s | 2.1 kB     00:03    
Dependencies resolved.
================================================================================
 Package             Arch        Version                   Repository      Size
================================================================================
Installing:
 vim-enhanced        x86_64      2:8.0.1763-10.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-10.el8         AppStream      6.3 M
 vim-filesystem      noarch      2:8.0.1763-10.el8         AppStream       48 k
 which               x86_64      2.21-10.el8               BaseOS          49 k

Transaction Summary
================================================================================
Install  5 Packages

Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm         95 kB/s |  39 kB     00:00    
(2/5): vim-filesystem-8.0.1763-10.el8.noarch.rp 422 kB/s |  48 kB     00:00    
(3/5): vim-enhanced-8.0.1763-10.el8.x86_64.rpm  1.3 MB/s | 1.4 MB     00:01    
(4/5): which-2.21-10.el8.x86_64.rpm              62 kB/s |  49 kB     00:00    
(5/5): vim-common-8.0.1763-10.el8.x86_64.rpm    2.1 MB/s | 6.3 MB     00:02    
--------------------------------------------------------------------------------
Total                                           1.3 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                            336 kB/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-10.el8.x86_64                               1/5 
  Installing       : vim-filesystem-2:8.0.1763-10.el8.noarch                2/5 
  Installing       : vim-common-2:8.0.1763-10.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-10.el8.x86_64                  5/5 
  Running scriptlet: vim-enhanced-2:8.0.1763-10.el8.x86_64                  5/5 
  Running scriptlet: vim-common-2:8.0.1763-10.el8.x86_64                    5/5 
  Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          1/5 
  Verifying        : vim-common-2:8.0.1763-10.el8.x86_64                    2/5 
  Verifying        : vim-enhanced-2:8.0.1763-10.el8.x86_64                  3/5 
  Verifying        : vim-filesystem-2:8.0.1763-10.el8.noarch                4/5 
  Verifying        : which-2.21-10.el8.x86_64                               5/5 

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

Complete!
Removing intermediate container 74e96c7a4822
 ---> 20b132a3a3d8
Step 7/15 : ENV MYPATH /usr/local
 ---> Running in 33f3a2648d08
Removing intermediate container 33f3a2648d08
 ---> 0894c5edfc6d
Step 8/15 : WORKDIR $MYPATH
Removing intermediate container eae56ce1729e
 ---> ffb5559cade4
Step 9/15 : ENV JAVA_HOME /usr/local/jdk1.8.0_171
 ---> Running in f72284697782
Removing intermediate container f72284697782
 ---> 67875ad038a7
Step 10/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in 2d65bb1e8b1a
Removing intermediate container 2d65bb1e8b1a
 ---> c744ddc2b035
Step 11/15 : ENV CATALINA_HOME  /usr/local/apache-tomcat-9.0.8
 ---> Running in 58d1f2e7fe1c
Removing intermediate container 58d1f2e7fe1c
 ---> 72bdd4ae3e9f
Step 12/15 : ENV CATALINA_BASE    /usr/local/apache-tomcat-9.0.8
 ---> Running in 5e19de5e7990
Removing intermediate container 5e19de5e7990
 ---> be1fd2072d9d
Step 13/15 : ENV PATH $PATH:$JAVA_HOME/bin:CATALINA_HOME/lib:$CATALINA_HOME/bin
 ---> Running in 7708b08db7a5
Removing intermediate container 7708b08db7a5
 ---> a02b37073462
Step 14/15 : EXPOSE   8080
 ---> Running in 01760878674b
Removing intermediate container 01760878674b
 ---> 9271d3f8aefd
Step 15/15 : CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
 ---> Running in 1a059e217610
Removing intermediate container 1a059e217610
 ---> 5d88a59e3fff
Successfully built 5d88a59e3fff
Successfully tagged zzmmtomcat9:1.1

  • 新的镜像
[root@centos7-basic tomcat9]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zzmmtomcat9         1.1                 5d88a59e3fff        9 minutes ago       688MB
  • run 指令
#路径自定义
docker run -d -p 9080:8080 --name myt9 -v /home/zhoumm/homeRoot/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test -v /home/zhoumm/homeRoot/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged=true zzmmtomcat9:1.1

docker run -d -p 9080:8080 --name myt9 
-v /home/zhoumm/homeRoot/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test 
-v /home/zhoumm/homeRoot/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs 
--privileged=true zzmmtomcat9:1.1

#后台运行   指定端口   指定容器名
#添加容器卷  宿主机目录  容器目录  对应
#添加容器卷  宿主机目录  容器目录  对应
#指定容器为特权容器,特权容器拥有所有的权限
  • 新容器
[root@centos7-basic tomcat9]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
fc2e5800044e        zzmmtomcat9:1.1     "/bin/sh -c '/usr/lo…"   About a minute ago   Up About a minute   0.0.0.0:9080->8080/tcp   myt9
# 查看  tomcat9目录,可以发现增加了test和tomcat9logs目录
[root@centos7-basic homeRoot]# cd tomcat9
[root@centos7-basic tomcat9]# ll
total 196016
-rw-r--r--. 1 root root   9818695 Nov  5 08:43 apache-tomcat-9.0.8.tar.gz
-rw-r--r--. 1 root root         0 Nov  5 08:40 c.txt
-rw-r--r--. 1 root root      1104 Nov  5 21:21 Dockerfile
-rw-r--r--. 1 root root 190890122 Nov  5 09:07 jdk-8u171-linux-x64.tar.gz
drwxr-xr-x. 2 root root         6 Nov  5 22:22 test
drwxr-xr-x. 2 root root       197 Nov  5 22:22 tomcat9logs
# -d 以后台模式启动容器
此时如果想进入容器进行操作,可用exec指令,启动一个伪终端以交互式的方式进入某个容器
docker exec 71e542e90cb0 ls -l
  • 校验jdk版本
[root@centos7-basic tomcat9]# docker exec fc2e5800044e java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

  1. 发布测试案例
  • WEB-INF 中 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  id="WebApp_ID" version="2.5">
  
  <display-name>test</display-name>
</web-app>
  • WEB-INF同目录 中 a.jsp

<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
      <meta http-equiv="Content-Type" content="text/html;  charset=UTF-8">
      <title>Insert title here</title>
  </head>
  <body>
          -----------welcome-----------------
          <%="I am in docker tomcat self "%>
          <br>
          <br>
          <%  System.out.println("=============docker  tomcat     self");%>
  </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值