侧边栏壁纸
博主头像
一揽芳华 博主等级

行动起来,活在当下

  • 累计撰写 265 篇文章
  • 累计创建 24 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

docker容器数据卷

芳华是个男孩!
2024-10-11 / 0 评论 / 0 点赞 / 14 阅读 / 0 字
广告 广告

1、什么是容器数据卷

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!容器间也是可以数据共享的!

1.1、使用-v挂载数据卷

方式一:使用命令方式来挂载

docker run -it -v 主机目录:容器内目录 /bin/bash

1.1.1、创建一个centos

容器宿主机/ceshi目录与容器/home目录映射

[root@localhost ceshi]# docker run --name centos -d -it -v /ceshi/:/home centos:latest
ef3d9b839548e24c666d50120409f5f63fecd28eb91f5602e7d35b8ed1172c1f
[root@localhost ceshi]# docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS                               NAMES
ef3d9b839548   centos:latest   "/bin/bash"              5 seconds ago   Up 2 seconds                                       centos

在宿主机/ceshi目录下新增一个文件test.txt,并在容器对应的目录下查看

[root@localhost ceshi]# touch test.txt
[root@localhost ceshi]# ls
test.txt
[root@localhost ceshi]# docker exec -it centos bash
[root@ef3d9b839548 /]# ls /home/
test.txt
[root@ef3d9b839548 /]#

查看容器对应的挂载信息

[root@localhost ceshi]# docker inspect centos
……… #省略前面部分
"Mounts": [            #挂载信息
            {
                "Type": "bind",
                "Source": "/ceshi",        #宿主机目录地址
                "Destination": "/home",        #容器内部目录地址
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
……… #省略后面部分

1.1.2、创建一个nginx

本次实验以自己构建的nginx镜像,操作要求目录挂载如下:

/usr/local/nginx/html:/usr/local/nginx/html #静态资源站点目录 /usr/local/nginx/conf.d:/usr/local/nginx/conf.d #子配置文件目录 /usr/local/nginx/logs:/usr/local/nginx/logs #日志目录 /usr/local/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf #主配置文件目录

(1)宿主机创建对应目录

[root@localhost ~]# mkdir -p /usr/local/nginx/{conf.d,conf,html,log}

(2) 临时启动一个nginx容器

[root@localhost ~]# docker run --name nginx_ceshi -d -it -p 81:80 nginx:1.25.1
52ead4d72591f2b00ed7ebf96dfd13619f49c70915688d1ba5160ce88eea192b
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
52ead4d72591   nginx          "/docker-entrypoint.…"   4 seconds ago    Up 2 seconds    0.0.0.0:81->80/tcp, :::81->80/tcp   nginx_ceshi

(3)把容器内的nginx主要文件拷贝至宿主机对应目录下

#日志文件
docker cp nginx_ceshi:/usr/local/nginx/logs/access.log /usr/local/nginx/logs/
#报错文件
docker cp nginx_ceshi:/usr/local/nginx/logs/error.log /usr/local/nginx/logs/
#主配置文件
docker cp nginx_ceshi:/usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/
#50x文件
docker cp nginx_ceshi:/usr/local/nginx/html/50x.html /usr/local/nginx/html/
#首页文件
docker cp nginx_ceshi:/usr/local/nginx/html/index.html /usr/local/nginx/html/

(4)删除临时容器

[root@localhost conf]# docker rm -f nginx_ceshi

(5)启动容器并挂载目录

docker run --name nginx  -it -d -p 80:80 \
-v /usr/local/nginx/html:/usr/local/nginx/html   \
-v /usr/local/nginx/conf.d:/usr/local/nginx/conf.d  \
-v /usr/local/nginx/logs:/usr/local/nginx/logs  \
-v /usr/local/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf   nginx:1.25.1

容器内创建子配置文件目录,保持与挂载一致

[root@localhost ~]# docker exec -it nginx bash
[root@bb1abe8366d5 nginx-1.25.1]# mkdir -p /usr/local/nginx/conf.d

(6)修改首页文件内容并测试效果

[root@localhost ~]# echo this is new nginx web site > /usr/local/nginx/html/index.html

浏览器访问效果

查看nginx日志文件访问情况

1.1.3、创建一个mysql

思考:MySQL的数据持久化问题。防止因为删除容器而导致数据删除,做目录挂载。

(1)查看并拉取mysql镜像

[root@localhost ~]# docker search mysql:5.7
NAME                                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
migs/mysql-5.7                            mysql:5.7 plus some basic enhancements          0                    [OK]
idyci/mysql                               mysql:5.7.25                                    1
xiao806852034/mysql57                     基于 mysql:5.7                                  0
framgiaciteam/mysql-256                   FROM mysql:5.7  CMD ["--block_encryption_mod…   0
metatronx/mysql                           mysql:5.7 + druid account & database            0
haswind/mysql                             mysql:5.7                                       0
stsiwo/sts-blog-db                        base image mysql:5.7.28                         0
alexmbarbosa/mysql5.7                     Based on official mysql:5.7 docker image        1
llasuka/mysql                             mysql:5.7                                       0
michaelzx/docker_msyql                    without ONLY_FULL_GROUP_BY base on mysql:5.7…   0                    [OK]
alecchyi/mysql                            mysql:5.7 for demo                              0
denghui/mysql                             mysql:5.7-tz.8                                  0                    [OK]
crbanman/mysql-tmpfs                      A docker image based off of mysql:5.7 that m…   0
vigasin/mysql                             Clone of official mysql:5.7 image, that allo…   0
variu/hyperledger-explorer-mysql          mysql:5.7.23 for hyperledger explorer           0
doctorva/mysql_fede                       Based on Mysql:5.7 and add new configuration…   0
beyondray/kbengine-mysql                  kbengine auto-build env from mysql:5.7          0                    [OK]
zhjs/mysql                                mysql:5.7                                       0
ahmedelshfie/spring-boot-mysql-rest-api   mysql:5.7                                       0
liyupei/mysql                             Mysql:5.7                                       0
kamatimaru/mysql57-ja                     Added Japanese support settings to mysql:5.7…   0
dockerzm/mysql                            docker run --name mysql -e MYSQL_ROOT_PASSWO…   0
ruyli/mysql                               mysql:5.7                                       0
zeq9069/mysql_service                     mysql:5.7                                       0
zhangruihuai/mysql-node-nginx-python      based on mysql:5.7  MySQL 5.7 NodeJS v14.18.…   0
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@localhost ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
mysql                 5.7       c20987f18b13   19 months ago   448MB
hello-world           latest    feb5d9fea6a5   22 months ago   13.3kB

(2)创建并启动一个容器,注意启动mysql需要配置环境,配置登录密码,否则无法使用,查阅官方资料,使用参数:-e MYSQL_ROOT_PASSWORD=

[root@localhost ~]# docker run -d -it --name mysql -p 3306:3306  \
-v /home/mysql/conf:/etc/mysql/conf.d \
-v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=0000 mysql:5.7
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
3c75b4179d4a   mysql:5.7       "docker-entrypoint.s…"   5 seconds ago    Up 4 seconds    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

(3)使用工具Navicat链接

(4)测试创建数据库,并在宿主机上查看

[root@localhost data]# ls
auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql               private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  public_key.pem   server-key.pem   test

1.2、具名和匿名挂载

1.2.1、匿名挂载

#    匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx:latest        #-P(大P)随机映射端口

#    查看容器所有的volume的情况
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     4cb36d1ec057cf8d1527c0cd0d0aa95be7c5f7e442261663360b9f5e2692c0ae
local     6fdd14f9e36c7f7085bcff95356b81ced251e164353123d8830ef7377d55e419
local     7e6b9a1f6126d9719603e6463f1e507d1297c138f080730c2d904993d8cf2ba9
local     21f17b4bfd4e881b9ef22b000f3fb9553593a5f2937b2b133442ff95049e49d8
local     76ac5e92ba2675eb17056634ca651d3fa13787ee1e6e46d0ca0d867a9333c0a5
local     150e65fcdafd0470cbff91129f3da6b3e8e30f9c3542d49e1b51a8ea9da3f90d
local     842b6b1caec13601db7e93bd67970e751673110f328de16ce1bd6dfce1fe827b
local     2750f4a53402bf3f72a8f5858beb9623776d71473908019b82718d260bdd3928
local     9089aca76279a28ba7416c88896f5ca3ef5798c391ab7f11be50f5af98533427
local     410664d8ac8c5cc2906360b5220e1de824a4cbe534ee7aab7ae38aeee34e2788
local     ba31c0deca297ea1cdc58e33c3d314f8321632732539bcc26afed59716c301e0
local     f7f472685707da4d371efed0ae2f53f05e163231091866eca9244799b1edf207
local     f304255ca5805e362f5d4b5cdc209e7be7a27a9aac64199827a9b11a83518703
#    这里发现就是匿名挂载,在-v的时候写了容器内路径,没有写宿主机路径

1.2.2、具名挂载

#    具名挂载
-v 卷名:容器内路径
[root@localhost ~]# docker run -d -P --name nginx02 -v nginx02:/etc/nginx nginx:latest        #-P(大P)随机映射端口
3bf0b230cfe538446774d1f744bb4f75e75373a362ec8bb279f0a5c93db15a2e

#    查看容器所有的volume的情况
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     4cb36d1ec057cf8d1527c0cd0d0aa95be7c5f7e442261663360b9f5e2692c0ae
local     6fdd14f9e36c7f7085bcff95356b81ced251e164353123d8830ef7377d55e419
local     7e6b9a1f6126d9719603e6463f1e507d1297c138f080730c2d904993d8cf2ba9
local     21f17b4bfd4e881b9ef22b000f3fb9553593a5f2937b2b133442ff95049e49d8
local     76ac5e92ba2675eb17056634ca651d3fa13787ee1e6e46d0ca0d867a9333c0a5
local     150e65fcdafd0470cbff91129f3da6b3e8e30f9c3542d49e1b51a8ea9da3f90d
local     842b6b1caec13601db7e93bd67970e751673110f328de16ce1bd6dfce1fe827b
local     2750f4a53402bf3f72a8f5858beb9623776d71473908019b82718d260bdd3928
local     9089aca76279a28ba7416c88896f5ca3ef5798c391ab7f11be50f5af98533427
local     410664d8ac8c5cc2906360b5220e1de824a4cbe534ee7aab7ae38aeee34e2788
local     ba31c0deca297ea1cdc58e33c3d314f8321632732539bcc26afed59716c301e0
local     f7f472685707da4d371efed0ae2f53f05e163231091866eca9244799b1edf207
local     f304255ca5805e362f5d4b5cdc209e7be7a27a9aac64199827a9b11a83518703
local     nginx02        <------这里就是具名字

#    查看下这个卷在宿主机哪个路径,通过inspect
[root@localhost ~]# docker volume inspect nginx02
[
    {
        "CreatedAt": "2023-08-09T16:17:41+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/nginx02/_data",
        "Name": "nginx02",
        "Options": null,
        "Scope": "local"
    }
]

所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/[v-name]/_data

[root@localhost ~]# ls /var/lib/docker/volumes
150e65fcdafd0470cbff91129f3da6b3e8e30f9c3542d49e1b51a8ea9da3f90d  842b6b1caec13601db7e93bd67970e751673110f328de16ce1bd6dfce1fe827b
21f17b4bfd4e881b9ef22b000f3fb9553593a5f2937b2b133442ff95049e49d8  9089aca76279a28ba7416c88896f5ca3ef5798c391ab7f11be50f5af98533427
2750f4a53402bf3f72a8f5858beb9623776d71473908019b82718d260bdd3928  ba31c0deca297ea1cdc58e33c3d314f8321632732539bcc26afed59716c301e0
410664d8ac8c5cc2906360b5220e1de824a4cbe534ee7aab7ae38aeee34e2788  backingFsBlockDev
4cb36d1ec057cf8d1527c0cd0d0aa95be7c5f7e442261663360b9f5e2692c0ae  f304255ca5805e362f5d4b5cdc209e7be7a27a9aac64199827a9b11a83518703
6fdd14f9e36c7f7085bcff95356b81ced251e164353123d8830ef7377d55e419  f7f472685707da4d371efed0ae2f53f05e163231091866eca9244799b1edf207
76ac5e92ba2675eb17056634ca651d3fa13787ee1e6e46d0ca0d867a9333c0a5  metadata.db
7e6b9a1f6126d9719603e6463f1e507d1297c138f080730c2d904993d8cf2ba9  nginx02

查看nginx02的卷目录信息

[root@localhost ~]# ls /var/lib/docker/volumes/nginx02/_data
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params

通过具名挂载可以很方便查找我们的一个卷,大多数情况下使用具名挂载

1.3、挂载目录权限

#    通过 -v 容器内路径:{ro | rw} 改变读写权限
    ro    readonly    #只读权限,这个路径只能通过宿主机改变,容器内部无法操作
    rw    readwrite    #可读可写(默认权限)
#    一旦设置了容器权限,容器对我们挂载出来的内容就有限定了    
[root@localhost ~]# docker run -d -P --name nginx03 -v nginx03:/etc/nginx:ro nginx:latest
[root@localhost ~]# docker run -d -P --name nginx03 -v nginx03:/etc/nginx:rw nginx:latest

1.4、使用DockerFile挂载卷

Dockerfile就是用来构建docker镜像的构建文件!命令脚本!通过这个脚本可以生成一个镜像,镜像是一层一层的,所以命令也是一层一层的。

(1)创建一个目录用来挂载

[root@localhost ~]# mkdir /home/docker-test-volume
[root@localhost ~]# cd /home/docker-test-volume/
[root@localhost docker-test-volume]#

(2)创建dockerfile文件

[root@localhost docker-test-volume]# vim dockerfile
FROM centos:7

VOLUME ["volume01","volume02"]

CMD echo "------successful-----"
CMD /bin/bash

(3)构建镜像

[root@localhost docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile -t ceshi:1.0 .
[root@localhost docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile -t ceshi:1.0 .
[+] Building 16.1s (5/5) FINISHED                                                                                                                                                 docker:default
 => [internal] load build definition from dockerfile                                                                                                                                        0.0s
 => => transferring dockerfile: 191B                                                                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                             0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                                                                16.0s
 => [1/1] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                                                           0.0s
 => => resolve docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                                                           0.0s
 => => sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987 1.20kB / 1.20kB                                                                                              0.0s
 => => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B                                                                                                  0.0s
 => => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB                                                                                              0.0s
 => exporting to image                                                                                                                                                                      0.0s
 => => exporting layers                                                                                                                                                                     0.0s
 => => writing image sha256:c655038184119c5598074af7da884ff39057e5a0c4dfd8173353f9384b53df29                                                                                                0.0s
 => => naming to docker.io/library/ceshi:1.0     

(4)查看镜像

[root@localhost docker-test-volume]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
ceshi                 1.0       c65503818411   23 months ago   204MB

(5)给自己创建的镜像启动一个容器

[root@localhost ~]# docker run -d -it --name ceshi1 ceshi:1.0
e9c0994ed9644d5f34c105b16208bb9973679d78d0a866dbd2df2189478127f5
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
e9c0994ed964   ceshi:1.0       "/bin/sh -c /bin/bash"   3 seconds ago    Up 1 second                                                            ceshi1

[root@localhost ~]# docker exec -it ceshi1 bash
[root@e9c0994ed964 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01  volume02 #生成镜像自动挂载的目录
[root@e9c0994ed964 /]#

这个容器内目录一定和宿主机上某个目录同步,脚本内编写为匿名挂载,在volume01写一个文件

[root@e9c0994ed964 /]# cd volume01
[root@e9c0994ed964 volume01]# touch container.txt

查看这个容器信息,查找卷的挂载信息

[root@localhost ~]# docker inspect ceshi1
 "Mounts": [
            {
                "Type": "volume",
                "Name": "47c313b9babba01649163c236b7db9f354f8ae5d8bb86856d0a27bba12e666bd",
                "Source": "/var/lib/docker/volumes/47c313b9babba01649163c236b7db9f354f8ae5d8bb86856d0a27bba12e666bd/_data",
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "1e1a872d00ec7ba2958b3a47c26001a683f49ee0db573ee47c9b9ca2e1df11ff",
                "Source": "/var/lib/docker/volumes/1e1a872d00ec7ba2958b3a47c26001a683f49ee0db573ee47c9b9ca2e1df11ff/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }       
 宿主机查看下同步文件是否存在
[root@localhost ~]# ls /var/lib/docker/volumes/1e1a872d00ec7ba2958b3a47c26001a683f49ee0db573ee47c9b9ca2e1df11ff/_data
container.txt

这种方式,未来使用的非常多。如果构建镜像的时候没有挂载,要手动镜像挂载 -v

1.5、数据卷容器--volumes-from

两个容器实现挂载相同目录,容器间数据共享。例如:mysql数据同步,多个mysql数据同步。关键命令:--volumes-from

(1)启动3个自己使用dockerfile构建的镜像

#启动第1个容器命名docker01,查看2个数据卷:volume01、volume02

[root@localhost ~]# docker run -d -it --name docker01 ceshi:1.0
2bd3b570631c1fdb5e9b44ba7e07449218e79a354ebdb40e073335654c5244eb
[root@localhost ~]# docker exec -it docker01 bash
[root@2bd3b570631c /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var       volume02
bin                etc  lib   media  opt  root  sbin  sys  usr  volume01
[root@2bd3b570631c /]#

#启动第2个容器命名docker02,并挂载docker01,查看2个数据卷:volume01、volume02

[root@localhost ~]# docker run -d -it --name docker02 --volumes-from docker01 ceshi:1.0
a4d762a32250ddeb8a47dc54d2bf4808dc5430b045a5c3f2ae82d181024c8a26
[root@localhost ~]# docker exec -it docker02 bash
[root@a4d762a32250 /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var       volume02
bin                etc  lib   media  opt  root  sbin  sys  usr  volume01
[root@a4d762a32250 /]#

我们在docker01的目录volume01下生成一个文件,看看docker对应volume01下会不会存在

#docker01下操作
[root@localhost ~]# docker attach docker01
[root@2bd3b570631c /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var       volume02
bin                etc  lib   media  opt  root  sbin  sys  usr  volume01
[root@2bd3b570631c /]# cd volume01
[root@2bd3b570631c volume01]# ls
[root@2bd3b570631c volume01]# touch docker01
[root@2bd3b570631c volume01]# ls
docker01

#docker02下查看
[root@localhost ~]# docker attach docker02
[root@a4d762a32250 /]# cd volume01
[root@a4d762a32250 volume01]# ls
docker01                                #docker01下创建的数据同步到了docker02下面
[root@a4d762a32250 volume01]#

#启动第3个容器命名docker03,并挂载docker01,查看2个数据卷:volume01、volume02

[root@localhost ~]# docker run -d -it --name docker03 --volumes-from docker01 ceshi:1.0
f041c047de6fa82ec5620441ad4a4f02a8f284a9c541b86399648543e97f9f65
[root@localhost ~]# docker exec -it docker03 bash
[root@f041c047de6f /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var       volume02
bin                etc  lib   media  opt  root  sbin  sys  usr  volume01
[root@f041c047de6f /]# cd volume01
[root@f041c047de6f volume01]# ls
docker01                                #数据同步了
[root@f041c047de6f volume01]#
​
#在docker03的volume02创建一个新文件,然后分别在docker02和docker01下查看
[root@f041c047de6f /]# cd volume02
[root@f041c047de6f volume02]# ls
[root@f041c047de6f volume02]# touch docker03
[root@f041c047de6f volume02]# ls
docker03
​
#在docker02下查看
[root@localhost ~]# docker exec -it docker02 bash
[root@a4d762a32250 /]# ls volume02
docker03            #docker02下存在docker03创建的文件
​
#在docker01下查看
​
[root@localhost ~]# docker exec -it docker01 bash
[root@2bd3b570631c /]# ls volume02
docker03            #docker01下存在docker03创建的文件

多个容器之间配置了数据共享,只要有一个容器存在数据就不会丢失。

1.5.1、多个mysql实现数据共享
# 创建第1个mysql容器,命名mysql01
[root@localhost ~]# docker run -d -it --name mysql01 -p 3306:3306  \
-v /home/mysql/conf:/etc/mysql/conf.d \
-v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=0000 mysql:5.7
​
# 创建第2个mysql容器,命名mysql02
[root@localhost ~]# docker run -d -it --name mysql02 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=0000  --volumes-from mysql01 mysql:5.7
​
# 创建第3个mysql容器,命名mysql03
[root@localhost ~]# docker run -d -it --name mysql03 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=0000  --volumes-from mysql01 mysql:5.7
​
​
#查看所有mysql容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
dad667c103bf   mysql:5.7   "docker-entrypoint.s…"   7 seconds ago    Up 3 seconds    33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp   mysql03
35d9139ffd56   mysql:5.7   "docker-entrypoint.s…"   17 seconds ago   Up 13 seconds   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   mysql02
0f1073961bd1   mysql:5.7   "docker-entrypoint.s…"   40 seconds ago   Up 37 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql01

#使用数据库管理工具navict创建一个数据库mysql01,分别在容器mysql02和mysql03上查看

# 在容器mysql02上查看
[root@localhost data]# docker exec -it mysql02 bash
root@35d9139ffd56:~# ls /var/lib/mysql
auto.cnf    ca.pem           client-key.pem  ib_logfile0  ibdata1  mysql    performance_schema  public_key.pem   server-key.pem  test
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   mysql01  private_key.pem     server-cert.pem  sys
​
# 在容器mysql03上查看
[root@localhost data]# docker exec -it mysql03 bash
root@dad667c103bf:/# ls /var/lib/mysql
auto.cnf    ca.pem           client-key.pem  ib_logfile0  ibdata1  mysql    performance_schema  public_key.pem   server-key.pem  test
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   mysql01  private_key.pem     server-cert.pem  sys

0
广告 广告

评论区