前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

Docker操作 (docker mysql5.7)

qiguaw 2024-08-28 15:29:51 资源文章 99 ℃ 0 评论

容器数据卷

什么是容器数据卷

docker的理念回顾


将应用和环境打包成一个镜像。


如果数据都在容器中,那么容器删除,数据就会丢失!需求:数据可以长久化,MySQL,容器删了,删库跑路。=需求:MySQL数据可以存储在本地=


容器之间可以有一个数据共享技术!Docker容器中产生的数据,同步到本地。这就是卷技术,目前的挂载,将我们容器内的目录,挂载到Linux上面。


总结:容器的持久化和同步操作,容器间也可以数据共享。


使用数据卷


# 方式一:直接使用命令挂载 -v

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

# 测试

root@liuxiaoweideAir ~ # docker run -it -v /Users/liuxiaowei/ceshi:/home centos /bin/bash  #主机目录:/Users/liuxiaowei/ceshi 容器目录:/home 

# 启动之后,通过docker inspect 容器id 检验卷如何挂载

root@liuxiaoweideAir liuxiaowei # docker inspect 3af3cfc435c3

        "Mounts": [

            {

   

                "Type": "bind",

                "Source": "/Users/liuxiaowei/ceshi",   # 主机内地址

                "Destination": "/home",                # docker 容器内的地址

                "Mode": "",

                "RW": true,

                "Propagation": "rprivate"

            }

        ]

测试文件的同步效果如图:

逆向测试

1、退出容器


2、然后在宿主机目录下进行操作


3、再启动容器


4、查看容器内目录文件同步变化

image.png


优点:以后修改只需在本地修改即可,容器内会自动同步。


实战:安装MySQL

思考:MySQL的数据持久化的问题


# 获取镜像

root@liuxiaoweideAir ~ # docker pull mysql:5.7

# 运行容器,需要做数据挂载, 安装启动mysql,需要配置密码的,这需要注意。去https://hub.docker.com/搜索mysql

# Start a mysql server instance

# Starting a MySQL instance is simple:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# 启动容器

-d 后台运行

-p 端口映射

-v 卷挂载 (两个-v 挂载两个目录)

-e 环境配置

--name 容器名字

root@liuxiaoweideAir ~ # docker run -d -p 3310:3306 -v /Users/liuxiaowei/mysql/conf:/etc/mysql/conf.d -v /Users/liuxiaowei/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456  --name mysql01 mysql:5.7

42053d1fb7043624bb199b7f5d876ccd2299d5047230cee847a4dcabb5657ddf


# 启动成功之后,利用Navicat或者SQL PRO连接测试,连接到服务器的3310 --- 3310和容器内的3306映射。如下图

image.png

image.png


# 在本地测试创建一个数据库,查看一下我们映射的路径是否同步。

本例:root@liuxiaoweideAir data # ls

auto.cnf        ib_logfile1        server-cert.pem

ca-key.pem        ibdata1            server-key.pem

ca.pem            ibtmp1            sys

client-cert.pem        mysql            test # 在mysql容器里建立的数据库

client-key.pem        performance_schema    test1 # 在mysql容器里建立的数据库

ib_buffer_pool        private_key.pem

ib_logfile0        public_key.pem

root@liuxiaoweideAir data # pwd

/Users/liuxiaowei/mysql/data

image.png


假设我们将容器删除


root@liuxiaoweideAir data # docker rm -f mysql01

mysql01

root@liuxiaoweideAir data # docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES


root@liuxiaoweideAir data # ls

auto.cnf        ib_logfile0        public_key.pem

ca-key.pem        ib_logfile1        server-cert.pem

ca.pem            ibdata1            server-key.pem

client-cert.pem        mysql            sys

client-key.pem        performance_schema    test

ib_buffer_pool        private_key.pem        test1

发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!


具名和匿名挂载


匿名挂载

- v 容器内路径

- P 随机映射端口

docker run -d -P --name nginx01 -v /etc/nginx nginx   


# 查看所有的卷的信息

root@liuxiaoweideAir liuxiaowei # docker volume ls    

DRIVER    VOLUME NAME

local     3e8ab2696b7005a359de2bdaf5fc70a01881652fc0a789b3dcbac3d12b42a841   # 匿名


# 具名挂载nginx "juming-nginx"

root@liuxiaoweideAir liuxiaowei # docker run -d -P --name nginx02 -v juming-nginx:/ect/nginx nginx

df397dd0401dc1f2904671efaeca9749c7813fca846ba097f890666785094327

root@liuxiaoweideAir liuxiaowei # docker volume ls

DRIVER    VOLUME NAME

local     f40d828c9c069666740ff54f90c35e6061071cf684198ca5c2e9caab7871fdf0

local     juming-nginx   # 具名

local     vsCodeServerVolume-liuxiaowei-recursing_leakey


# 查看一下这个具名卷

root@liuxiaoweideAir liuxiaowei # docker volume inspect juming-nginx

[

    {

   

        "CreatedAt": "2022-01-08T14:24:41Z",

        "Driver": "local",

        "Labels": null,

        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",  # 挂载点

        "Name": "juming-nginx",

        "Options": null,

        "Scope": "local"

    }

]

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

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


# 如何确定是具名挂载或者匿名挂载,还是指定路径挂载

-v 容器内路径        # 匿名挂载

-v 卷名:容器内路径 # 具名挂载

-v /宿主机路径:容器内路径    # 指定路径挂载

拓展:


# 通过 -v 容器内路径:ro rw 改变读写权限

ro  --- readonly    # 只读

rw  --- readwrite   # 可读可写

# 一旦设置了容器权限,容器对我们挂载出来的内容就有限定

docker run -d -p --name nginx02 -v juming-nginx:/etc/nginx:ro nginx

docker run -d -p --name nginx02 -v juming-nginx:/etc/nginx:rw nginx


# ro 说明这个路径只能通过宿主机来操作,容器内部无法操作


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表