文章目录
- ①. 容器数据卷
- ①. 什么是容器卷
- ②. 直接命令添加(容器内添加)
- ③. DockerFile添加
- ④. 数据卷容器
- ②. DockerFile解析
- ①. DockerFile是什么?
- ②. DockerFile构建过程解析
- ③. 保留字指令
- ④. 案例一:自定义镜像mycentos
- ⑤. CMD/ENTRYPOINT镜像案例
- ⑥. 自定义镜像Tomcat9
①. 容器数据卷
①. 什么是容器卷
- ①. 容器卷是用来做持久化处理的,有点类似我们Redis里面的rdb和aof文件
- ②. 作用:
- 容器的持久化
- 容器间继承+共享数据
②. 直接命令添加(容器内添加)
- ①. 命令
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v - ②. 查看是否挂载成功 docker inspect 容器ID
- ③. 在宿主机上修改的东西,进入容器中可以看到也进行了修改;在容器上修改的东西,在宿主机上也进行了修改
- ④. 命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
在宿主机上进行文件的修改后,在容器内部可以查看到,但是容器内部不能修改
③. DockerFile添加
注意:
如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为Cenos7中的安全模块selunux把权限禁掉了,需要添加参数–privileged=true来解决挂载的目录没有权限的问题
- ①. 根目录下新建mydocker文件夹并进入
- ②. 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
(VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"])
- 出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
- 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
- ③. File构建
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
- 1
- 2
- 3
- 4
- 5
- ④. build后生成镜像
- ⑤. run容器
- ⑥. 通过上述步骤,容器内的卷目录地址已经知道,对应的主机目录地址哪??
- ⑦. 主机对应默认地址
④. 数据卷容器
- ①. 数据卷容器:通俗讲就是活动硬盘上挂活动硬盘,完成共享
如下是实现容器间传递共享(–volumes-from)
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止 - ②. 先启动一个父容器dc01(在dataVolumeContainer2新增内容)
- ③. 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)
- ③. 是什么样的?
②. DockerFile构建过程解析
- ①. Dockerfile内容基础知识
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
- ②. 从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段
掌握
- Dockerfile是软件的原材料
- Docker镜像是软件的交付品
- 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 | 用于为镜像添加元数据 |
④. 案例一:自定义镜像mycentos
- ①. 编写
- Hub默认CentOS镜像什么情况
- 准备编写DockerFile文件
- 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 )
⑤. 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
- ④. 如果我们希望显示 HTTP 头信息,就需要加上 -i 参数
- ⑤. 制作ENTROYPOINT版查询IP信息的容器
FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
- 1
- 2
- 3
⑥. 自定义镜像Tomcat9
- ①. mkdir -p /zzyyuse/mydockerfile/tomcat9
- ②. 在上述目录下touch c.txt
- ③. 将jdk和tomcat安装的压缩包拷贝进上一步目录
- ④. 在/zzyyuse/mydockerfile/tomcat9目录下新建Dockerfile文件
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发布
<?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
4564
文章目录
- ①. 容器数据卷
- ①. 什么是容器卷
- ②. 直接命令添加(容器内添加)
- ③. DockerFile添加
- ④. 数据卷容器
- ②. DockerFile解析
- ①. DockerFile是什么?
- ②. DockerFile构建过程解析
- ③. 保留字指令
- ④. 案例一:自定义镜像mycentos
- ⑤. CMD/ENTRYPOINT镜像案例
- ⑥. 自定义镜像Tomcat9
①. 容器数据卷
①. 什么是容器卷
- ①. 容器卷是用来做持久化处理的,有点类似我们Redis里面的rdb和aof文件
- ②. 作用:
- 容器的持久化
- 容器间继承+共享数据
②. 直接命令添加(容器内添加)
- ①. 命令
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v - ②. 查看是否挂载成功 docker inspect 容器ID
- ③. 在宿主机上修改的东西,进入容器中可以看到也进行了修改;在容器上修改的东西,在宿主机上也进行了修改
- ④. 命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
在宿主机上进行文件的修改后,在容器内部可以查看到,但是容器内部不能修改
③. DockerFile添加
注意:
如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为Cenos7中的安全模块selunux把权限禁掉了,需要添加参数–privileged=true来解决挂载的目录没有权限的问题
- ①. 根目录下新建mydocker文件夹并进入
- ②. 可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
(VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"])
- 出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。
- 由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
- ③. File构建
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
- 1
- 2
- 3
- 4
- 5
- ④. build后生成镜像
- ⑤. run容器
- ⑥. 通过上述步骤,容器内的卷目录地址已经知道,对应的主机目录地址哪??
- ⑦. 主机对应默认地址
④. 数据卷容器
- ①. 数据卷容器:通俗讲就是活动硬盘上挂活动硬盘,完成共享
如下是实现容器间传递共享(–volumes-from)
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止 - ②. 先启动一个父容器dc01(在dataVolumeContainer2新增内容)
- ③. 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)
- ③. 是什么样的?
②. DockerFile构建过程解析
- ①. Dockerfile内容基础知识
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
- ②. 从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段
掌握
- Dockerfile是软件的原材料
- Docker镜像是软件的交付品
- 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 | 用于为镜像添加元数据 |
④. 案例一:自定义镜像mycentos
- ①. 编写
- Hub默认CentOS镜像什么情况
- 准备编写DockerFile文件
- 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>