Docker:数据卷(Data Volumes)&dockerfile

目录

Docker宿主机和容器之间文件拷贝docker copy

从容器中拷贝文件到宿主机 

创建一个文件​编辑

 将压缩包放入mydocker

从容器中拷贝文件到宿主机

 数据卷

数据卷相关操作

数据卷容器

创建一个数据卷容器

挂载数据卷容器

Dockerfile

自定义centos,具备vim及ifconfig作用

 自定义tomcat8


Docker宿主机和容器之间文件拷贝docker copy

前言:

Docker 数据管理

在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行

数据共享,这必然涉及容器的数据管理操作

容器中的管理数据主要有两种方式:

数据卷 Data Volumes 容器内数据直接映射到本地主机环境;

数据卷容器(Data Volume Containers 使用特定容器维护数据卷

当然还有最原始的copy方式,这个也是管理数据的方式,但是基本不会用到;

最原始的copy方式管理数据:

宿主机文件 copy to 容器内

docker cp 需要拷贝的文件或者目录 容器名称:容器目录

容器内 copy to 宿主机

docker cp 容器名称:容器目录 宿主机目录

引言:利用MySQL镜像安装MySQL服务

现在3307没有此服务 

docker run -p 3307:3306 --name mysql1   -di -v /home/javaoy/data/mysql/mysql.conf.d/:/etc/mysql/mysql.conf.d/ -v /home/javaoy/data/mysql/data/:/var/lib/mysql -v /home/javaoy/data/mysql/log/:/var/log -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

运行此代码  

连接成功 

注意:同时访问两个容器里面的端口号会存在问题,若想访问第二个容器中的,要先停止第一个容器

我们创建tomcat3容器

 

如果要部署项目的时候,肯定要进入webapps里面去将项目放里面,但是这是原生Linux里面是需要这么做的,但是现在这里面没有这个东西,这就意味着,当我们的Tomcat要运行某个项目时,就必须将项目放到这里面来,可这是在docker容器里面,该怎么将文件传到容器内部呢?

从容器中拷贝文件到宿主机 

docker cp tomcat1:/usr/local/tomcat/webapps/hello /javaoy/software/apache-tomcat-8.5.20/webapps

创建一个文件

 将压缩包放入mydocker

(以apache-tomcat-8.5.20.tar.gz为例)

进入tomcat3这个容器中

现在我们将文件传到这个容器中去

 现在进入容器内部查看是否复制进去了

 可以看见,已经进去了,我们将这个解压包当成项目就行,都是一样的操作。可项目运行啥的都会有日志文件的,日志文件又是实时更新的,不能写一个就复制一个吧?

 创建一个文件

 我们就将刚刚所创建的文件当成日志文件,把这个文件 放到宿主机上面去

从容器中拷贝文件到宿主机

docker cp tomcat3:/usr/local/tomcat/webapps/111.log /javaoy/software/mydocker/

 查看是否拷贝成功

 数据卷

数据卷(Data Volumes)

   数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器

  它可以提供很多有用的特性:

   1.数据卷 可以在容器之间共享和重用

   2.对数据卷的修改会立马生效

   3.对数据卷的更新,不会影响镜像

   4.数据卷 默认会一直存在,即使容器被删除

数据卷相关操作

将宿主机的目录与容器的目录进行挂载,实现数据共享

docker run -di --name c2 -v /home/oyang/data/:/home/nxing/data/ centos:7

 看一下oyang有没有与nxing进行信息的互通

 我们进入oyang的目录

 可以看到,现在是没有东西的,现在我们在oyang目录中上传一张照片,看nxing容器里面能否接收的到

我们使用nxing登录那个容器,是能够看到这个照片的, 就是可能会乱码

nxing看到之后回复一个好帅,看oyang能否接收到这个回复

我们在宿主机可以看家这个文件 

 结论:不管宿主机、容器在指定目录创建文件夹还是文件,都会会被共享;

数据卷容器

   如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。

   数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载

创建一个数据卷容器

docker run -di -v /home/javaoy/data/c4 --name c4 centos:7

 这个目录是没有挂载任何东西的的,我们只是把它做成一个数据卷容器,想要共享数据的容器,都需要挂载这个c4

挂载数据卷容器

docker run -di --volumes-from c4 --name c6 centos:7

凡是执行了这条代码的容器吗,都会有(/home/javaoy/data/)目录

 现在进入c4容器,并且创建一个文件夹,添加内容

 从c4容器退出来,进入c6看是否能够实现数据卷功能

 在c6里面有c4的目录,并且拥有刚刚创建的c4文件

 我们在c6里面修改c4.txt,待会儿看c4是否也拥有数据卷的功能,可以观看到我们更改的内容

 

小知识:小编这个镜像是依据centos:7制造出来的镜像,所以才拥有vi命令

 OK,我们现在进入c4里面看

 里面的数据也是共享的 

注意:数据卷容器的本质就是数据卷

 通过docker inspect 容器名 可以看到该容器的所有信息

其中c4为数据卷容器,c6为普通容器,其中c4就起到一个桥接作用,我们可以通过docker inspect查看容器的详细情况

docker inspect c4
docker inspect c6

会发现c4、c6目录挂载情况是一样的

结论:不管c4、c6在指定目录创建文件夹还是文件,都会会被共享;

Dockerfile

自定义centos,具备vim及ifconfig作用

centos:7 通过它运行的容器,是没有vim命令的,我希望我自己制作一个镜像mycontos:7 然后我自己制作的镜像运行一个容器,而这个容器,是存在vim命令的

创建mycentosDockerfile文件

vi mycentosDockerfile

向 mycentosDockerfile 编辑内容

FROM centos:7
MAINTAINER javaoy "1828190940@qq.com"
RUN yum -y install vim
RUN yum install net-tools.x86_64 -y
CMD /bin/bash 

 构建镜像

docker build -f mycentosDockerfile -t javaoy/centos:v1.0 .

这里的名字就是上面创建的文件名(如果文件名叫Dockerfile,那么-f mycentosDockerfile 可以省略)

构建完成

 通过镜像运行一个容器进行测试

docker run -it --name mc1 javaoy/centos:v1.0 /bin/bash

 自定义tomcat8

cd /javaoy/software
mkdir mydocker
vi mytomcatDockerfile

向 mytomcatDockerfile 编辑内容

FROM centos:7
MAINTAINER javaoy "1828190940@qq.com"

ENV workerDir /home/javaoy/dockerfile/3
WORKDIR $workerDir

ADD jdk-8u151-linux-x64.tar.gz $workerDir
COPY apache-tomcat-8.5.20.tar.gz $workerDir
RUN tar -xvf apache-tomcat-8.5.20.tar.gz apache-tomcat-8.5.20

ENV JAVA_HOME $workerDir/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV TOMCAT_HOME $workerDir/apache-tomcat-8.5.20
ENV PATH $JAVA_HOME/bin:$TOMCAT_HOME/bin:$TOMCAT_HOME/lib:$PATH

EXPOSE 8080
ENTRYPOINT ["/home/javaoy/dockerfile/3/apache-tomcat-8.5.20/bin/catalina.sh","run"]

 需要有上面配置所对应的安装包

构建镜像

docker build -f mytomcatDockerfile -t javaoy/tomcat8:v1.0 .

 通过镜像运行2个容器进行测试

docker run -di --name mt1 -P javaoy/tomcat8:v1.0
docker run -di --name mt2 -P javaoy/tomcat8:v1.0

随机的端口号 

浏览器输入/都可以访问到tomcat

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

歐陽。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值