码迷,mamicode.com
首页 > 其他好文 > 详细

docker file,docker网络和容器数据卷

时间:2021-07-02 15:55:09      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:定义   local   ati   display   some   ls -l   mat   comm   form   

容器数据卷

docker的理念是应用和环境包打包城镜像.
那么如果数据在容器中,容器被删除跑路,就嗝屁了,所以数据可以持久化的存储在容器外部
容器数据卷就可以让容器之间有一个数据共享技术.把docker容器产生的数据同步到本地.
注意这个本地是的是操作系统linux不是docker.这是个目录挂载技术,把我们容器内的目录挂载到linux上

技术图片
使用数据卷,就会把mysql容器内下的/user/mysql数据同步到linux下的/home/mysql中
实现容器之间数据共享以及同步操作

  1. 方式1 使用命令挂载 -v

docker run -it -v 主机目录:容器内目录
docker run -it --name centos01 -v /home/ceshi:/home centos /bin/bash
技术图片
此时我们随意在容器内部增删文件夹和文件,在外部镜像的/home/ceshi中就可以看到响应的变动
当容器关闭的时候,我们在主机内对文件进行数据写入,容器在重启后一样会更新,双向更新

  • 安装实战 mysql

运行mysql,需要配置root的账号密码(查看dockerhub的官方文档)
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
我们配置挂载
docker run -d -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql03 mysql:5.7
用navicat什么的可以尝试连接下端口并创建一个数据库看是否有同步挂载

具名挂载和匿名挂载

匿名挂载

-v 容器内路径
不指定主机路径,让他随机生成
docker run -d -P --name tomcat01 -v /ect/nginx nginx

查看所有的volume

$ docker volume --help

Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
匿名挂载格式如下
技术图片

具名挂载

可以看到匿名会随机生成一大串字符串,不利于后期查找和识别
我们可以给匿名挂载生成的匿名挂载自定义名字,这里注意 /zidingyi:/ect/nginx 如果是/zidingyi 代表的是路径,没有反斜杠代表起别名.
docker run -d -P --name tomcat02 -v zidingyi:/ect/nginx nginx
技术图片

用docker volume inspect命令查看这个自定义的卷名路径在哪里
例:docker volume inspect zidingyi
技术图片

挂载语法格式一共有4种
匿名挂载 -v 容器内路径
具名挂载 -v 具名/容器内路径
在上述三种路径后面加:rw或者:ro 例:具名挂载 -v 具名/容器内路径:ro ,ro是read only,rw是read write,指定权限
指定路径挂载 -v /本机路径:/容器内路径

  1. 方式2 使用dockerfile命令方式挂载

  • 首先随便创建一个文件夹和名字,这里我们在创建一个/home/myvolume/dockerfile1 建议文件名用dockerfile
    脚本命令如下: 指令都是大写
    FROM mysql #填写基于哪个镜像
    VOLUME ["/volume01","/volume02"] #同-v 容器内路径 ,是一种匿名挂载方式
    CMD echo"---end----" #输出end
    CMD /bin/bash #切回交互界面
  • docker build 命令用来创建生成dock file
    docker build -f dockerfile的文件路径 -t 镜像名字:tag
    docker build -f /home/myvolume/dockfile1 -t sxf/mysql:1.0 . 最后一点要加个空格和点
    技术图片
    技术图片
  • 启动下自己的容器镜像
    技术图片
    技术图片
    镜像进去后 ls -l 查看当前目录文件,发现下面2个挂载目录,这2个目录一定和本地有对应的同步目录
    技术图片
    我们在这2个目录下分别创建111,222文件夹,然后去本地用docker inspect 容器id查找是否有同步更新的文件夹位置
    注意这里查找的是镜像ID 不是容器ID
    技术图片

容器数据卷2

容器数据卷上面讲的是容器内和本地系统数据共享.这里举得例子是容器和容器之间的数据共享.
容器1 --volumes-from 容器2 这里容器2是父容器, 容器1是子容器,继承关系.容器之间数据共享,只要有一个容器在使用共享数据,其他容器停止或者删除都不会对正在使用共享数据的容器产生影响.
每个容器的共享数据是相互拷贝的概念,而不是单独存在某一个容器中的.
首先拿下载的centos镜像为例,我们先创建一个容器
docker run --name centos01 -v /home/pc_data:/home/container_data -it centos:7.6.1810 /bin/bash
创建了一个镜像和本机的数据卷.接下来我们再开一个镜像,命名为centos02
docker run -it --name docker02 --volumes-from centos01 centos:7.6.1810
这里因为centos01已经创建了,我们只是用--volumes-from 完全拷贝他而已,所以-v的那些数据卷路径不用重复
语法格式 docker run -it --name docker02 --volumes-from 父容器id 镜像名:tag

例2: 我们现在创建一个多个数据库共享数据的案例
第一台mysql创建docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d mysql:tag -p 8080:3306 -v /etc/mysql:/home/mysql_data mysql:5.7
第二胎mysql创建docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=root -d -p 8080:3307 --volumes-from mysql01 mysql:5.7

docker file

docker file 就是通过命令,脚本用来构建docker镜像的构建文件

docker网络

docker file,docker网络和容器数据卷

标签:定义   local   ati   display   some   ls -l   mat   comm   form   

原文地址:https://www.cnblogs.com/Young-shi/p/14960395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!