文章目录

  • ①. 容器数据卷
  • ①. 什么是容器卷
  • ②. 直接命令添加(容器内添加)
  • ③. DockerFile添加
  • ④. 数据卷容器
  • ②. DockerFile解析
  • ①. DockerFile是什么?
  • ②. DockerFile构建过程解析
  • ③. 保留字指令
  • ④. 案例一:自定义镜像mycentos
  • ⑤. CMD/ENTRYPOINT镜像案例
  • ⑥. 自定义镜像Tomcat9



①. 容器数据卷

①. 什么是容器卷

  • ①. 容器卷是用来做持久化处理的,有点类似我们Redis里面的rdb和aof文件
  • ②. 作用:
  1. 容器的持久化
  2. 容器间继承+共享数据

②. 直接命令添加(容器内添加)

  • ①. 命令 docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
    docker run -it -v
  • ②. 查看是否挂载成功 docker inspect 容器ID
  • 镜像卷 重新同步_tomcat

  • ③. 在宿主机上修改的东西,进入容器中可以看到也进行了修改;在容器上修改的东西,在宿主机上也进行了修改
  • 镜像卷 重新同步_镜像卷 重新同步_02

  • ④. 命令(带权限) docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
    在宿主机上进行文件的修改后,在容器内部可以查看到,但是容器内部不能修改

镜像卷 重新同步_docker_03

③. DockerFile添加

注意:
如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为Cenos7中的安全模块selunux把权限禁掉了,需要添加参数–privileged=true来解决挂载的目录没有权限的问题

  • ①. 根目录下新建mydocker文件夹并进入
  • ②. 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
    (VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"])
  1. 出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
  2. 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
  • ③. File构建
# volume test
	FROM centos
	VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
	CMD echo "finished,--------success1"
	CMD /bin/bash
  • 1
  • 2
  • 3
  • 4
  • 5
  • ④. build后生成镜像
  • 镜像卷 重新同步_Dockerfile_04

  • ⑤. run容器
  • 镜像卷 重新同步_tomcat_05

  • ⑥. 通过上述步骤,容器内的卷目录地址已经知道,对应的主机目录地址哪??
  • 镜像卷 重新同步_tomcat_06


  • 镜像卷 重新同步_docker_07

  • ⑦. 主机对应默认地址
  • 镜像卷 重新同步_镜像卷 重新同步_08

镜像卷 重新同步_docker_09


镜像卷 重新同步_镜像卷 重新同步_10


镜像卷 重新同步_tomcat_11

④. 数据卷容器

  • ①. 数据卷容器:通俗讲就是活动硬盘上挂活动硬盘,完成共享
    如下是实现容器间传递共享(–volumes-from)
    结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
  • ②. 先启动一个父容器dc01(在dataVolumeContainer2新增内容)

镜像卷 重新同步_tomcat_12

  • ③. dc02/dc03继承自dc01(–volumes-from)
    docker run -it --name dc02 --volumes-from dc01 zzyy/centos
  • ④. 回到dc01可以看到02/03各自添加的都能共享了
  • ⑤. 删除dc01,dc02修改后dc03可否访问
  • ⑥. 删除dc02后dc03可否访问
  • ⑦. 新建dc04继承dc03后再删除dc03

②. DockerFile解析

①. DockerFile是什么?

  • ①. Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
  • ②. 构建三步骤(编写Dockerfile文件 | docker build | docker run)
  • ③. 是什么样的?

镜像卷 重新同步_docker_13

②. DockerFile构建过程解析

  • ①. Dockerfile内容基础知识
  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. #表示注释
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交
  • ②. 从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段 掌握
  1. Dockerfile是软件的原材料
  2. Docker镜像是软件的交付品
  3. Docker容器则可以认为是软件的运行态

③. 保留字指令


指令

解释

FROM

基础镜像,当前新镜像是基于哪个镜像的。必须为第一个命令

MAINTAINER

镜像维护者的姓名和邮箱地址

RUN

容器构建时需要运行的命令

EXPOSE

当前容器对外暴露出的端口

WORKDIR

指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

ENV

用来在构建镜像过程中设置环境变量

ADD

带copy并且由解压功能

COPY

类似ADD,拷贝文件和目录到镜像中

VOLUME

容器数据卷,用于数据保存和持久化工作

CMD

Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

ENTRYPOINT

指定一个容器启动时要运行的命令,使用docker run 之后的参数会进行一个叠加的操作

ONBUILD

当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

LABEL

用于为镜像添加元数据


镜像卷 重新同步_docker_14

镜像卷 重新同步_Dockerfile_15

④. 案例一:自定义镜像mycentos

  • ①. 编写
  1. Hub默认CentOS镜像什么情况
  2. 准备编写DockerFile文件
  3. myCentOS内容DockerFile
FROM centos
	MAINTAINER TZ<845195485@qq.com>

<span >ENV</span> <span >MYPATH</span> <span >/</span><span >usr</span><span >/</span><span >local</span>
<span >WORKDIR</span> <span >$MYPATH</span>
 
<span >RUN</span> <span >yum</span> <span >-y</span> <span >install</span> <span >vim</span>
<span >RUN</span> <span >yum</span> <span >-y</span> <span >install</span> <span >net-tools</span>
 
<span >EXPOSE</span> <span >80</span>
 
<span >CMD</span> <span >echo</span> <span >$MYPATH</span>
<span >CMD</span> <span >echo</span> <span >"success--------------ok"</span>
<span >CMD</span> <span >/</span><span >bin</span><span >/</span><span >bash</span>



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • ②. 构建(docker build -t 新镜像名字:TAG .)
  • ③. 运行(docker run -it 新镜像名字:TAG )

镜像卷 重新同步_镜像卷 重新同步_16

⑤. CMD/ENTRYPOINT镜像案例

  • ①. CMD:Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
  • ②. ENTRYPOINT:docker run 之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合
  • ③. 制作CMD版可以查询IP信息的容器
FROM centos
	RUN yum install -y curl
	CMD [ "curl", "-s", "http://ip.cn" ]
  • 1
  • 2
  • 3

镜像卷 重新同步_Dockerfile_17

  • ④. 如果我们希望显示 HTTP 头信息,就需要加上 -i 参数
  • ⑤. 制作ENTROYPOINT版查询IP信息的容器
FROM centos
	RUN yum install -y curl
	ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
  • 1
  • 2
  • 3

镜像卷 重新同步_tomcat_18

⑥. 自定义镜像Tomcat9

  • ①. mkdir -p /zzyyuse/mydockerfile/tomcat9
  • ②. 在上述目录下touch c.txt
  • ③. 将jdk和tomcat安装的压缩包拷贝进上一步目录
  • 镜像卷 重新同步_tomcat_19

  • ④. 在/zzyyuse/mydockerfile/tomcat9目录下新建Dockerfile文件
  • 镜像卷 重新同步_docker_20

FROM         centos
MAINTAINER    zzyy<zzyybs@126.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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • ⑤. 构建
  • ⑥. run 注意:这里要根据自己的内容改正
    docker run -d -p 9080:8080 --name myt9 -v
    /tangzhi/mydockfile/tomcat9/test:/usr/local/apache-tomcat-9.0.16/webapps/test -v /tangzhi/mydockfile/tomcat9/test/tomcat9logs/:/usr/local/apache-tomcat-9.0.16/logs --privileged=true mytomcat:9
  • ⑦. 验证
  • ⑧.结合前述的容器卷将测试的web服务test发布

镜像卷 重新同步_tomcat_21

<?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>



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
<%@ 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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

镜像卷 重新同步_镜像卷 重新同步_22

4564


文章目录

  • ①. 容器数据卷
  • ①. 什么是容器卷
  • ②. 直接命令添加(容器内添加)
  • ③. DockerFile添加
  • ④. 数据卷容器
  • ②. DockerFile解析
  • ①. DockerFile是什么?
  • ②. DockerFile构建过程解析
  • ③. 保留字指令
  • ④. 案例一:自定义镜像mycentos
  • ⑤. CMD/ENTRYPOINT镜像案例
  • ⑥. 自定义镜像Tomcat9


①. 容器数据卷

①. 什么是容器卷

  • ①. 容器卷是用来做持久化处理的,有点类似我们Redis里面的rdb和aof文件
  • ②. 作用:
  1. 容器的持久化
  2. 容器间继承+共享数据

②. 直接命令添加(容器内添加)

  • ①. 命令 docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
    docker run -it -v
  • ②. 查看是否挂载成功 docker inspect 容器ID
  • 镜像卷 重新同步_tomcat

  • ③. 在宿主机上修改的东西,进入容器中可以看到也进行了修改;在容器上修改的东西,在宿主机上也进行了修改
  • 镜像卷 重新同步_镜像卷 重新同步_02

  • ④. 命令(带权限) docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
    在宿主机上进行文件的修改后,在容器内部可以查看到,但是容器内部不能修改

镜像卷 重新同步_docker_03

③. DockerFile添加

注意:
如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为Cenos7中的安全模块selunux把权限禁掉了,需要添加参数–privileged=true来解决挂载的目录没有权限的问题

  • ①. 根目录下新建mydocker文件夹并进入
  • ②. 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
    (VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"])
  1. 出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
  2. 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
  • ③. File构建
# volume test
	FROM centos
	VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
	CMD echo "finished,--------success1"
	CMD /bin/bash
  • 1
  • 2
  • 3
  • 4
  • 5
  • ④. build后生成镜像
  • 镜像卷 重新同步_Dockerfile_04

  • ⑤. run容器
  • 镜像卷 重新同步_tomcat_05

  • ⑥. 通过上述步骤,容器内的卷目录地址已经知道,对应的主机目录地址哪??
  • 镜像卷 重新同步_tomcat_06


  • 镜像卷 重新同步_docker_07

  • ⑦. 主机对应默认地址
  • 镜像卷 重新同步_镜像卷 重新同步_08

镜像卷 重新同步_docker_09


镜像卷 重新同步_镜像卷 重新同步_10


镜像卷 重新同步_tomcat_11

④. 数据卷容器

  • ①. 数据卷容器:通俗讲就是活动硬盘上挂活动硬盘,完成共享
    如下是实现容器间传递共享(–volumes-from)
    结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
  • ②. 先启动一个父容器dc01(在dataVolumeContainer2新增内容)

镜像卷 重新同步_tomcat_12

  • ③. dc02/dc03继承自dc01(–volumes-from)
    docker run -it --name dc02 --volumes-from dc01 zzyy/centos
  • ④. 回到dc01可以看到02/03各自添加的都能共享了
  • ⑤. 删除dc01,dc02修改后dc03可否访问
  • ⑥. 删除dc02后dc03可否访问
  • ⑦. 新建dc04继承dc03后再删除dc03

②. DockerFile解析

①. DockerFile是什么?

  • ①. Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
  • ②. 构建三步骤(编写Dockerfile文件 | docker build | docker run)
  • ③. 是什么样的?

镜像卷 重新同步_docker_13

②. DockerFile构建过程解析

  • ①. Dockerfile内容基础知识
  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. #表示注释
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交
  • ②. 从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段 掌握
  1. Dockerfile是软件的原材料
  2. Docker镜像是软件的交付品
  3. Docker容器则可以认为是软件的运行态

③. 保留字指令


指令

解释

FROM

基础镜像,当前新镜像是基于哪个镜像的。必须为第一个命令

MAINTAINER

镜像维护者的姓名和邮箱地址

RUN

容器构建时需要运行的命令

EXPOSE

当前容器对外暴露出的端口

WORKDIR

指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

ENV

用来在构建镜像过程中设置环境变量

ADD

带copy并且由解压功能

COPY

类似ADD,拷贝文件和目录到镜像中

VOLUME

容器数据卷,用于数据保存和持久化工作

CMD

Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

ENTRYPOINT

指定一个容器启动时要运行的命令,使用docker run 之后的参数会进行一个叠加的操作

ONBUILD

当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

LABEL

用于为镜像添加元数据


镜像卷 重新同步_docker_14

镜像卷 重新同步_Dockerfile_15

④. 案例一:自定义镜像mycentos

  • ①. 编写
  1. Hub默认CentOS镜像什么情况
  2. 准备编写DockerFile文件
  3. myCentOS内容DockerFile
FROM centos
	MAINTAINER TZ<845195485@qq.com>

<span >ENV</span> <span >MYPATH</span> <span >/</span><span >usr</span><span >/</span><span >local</span>
<span >WORKDIR</span> <span >$MYPATH</span>
 
<span >RUN</span> <span >yum</span> <span >-y</span> <span >install</span> <span >vim</span>
<span >RUN</span> <span >yum</span> <span >-y</span> <span >install</span> <span >net-tools</span>
 
<span >EXPOSE</span> <span >80</span>
 
<span >CMD</span> <span >echo</span> <span >$MYPATH</span>
<span >CMD</span> <span >echo</span> <span >"success--------------ok"</span>
<span >CMD</span> <span >/</span><span >bin</span><span >/</span><span >bash</span>