docker学习笔记4 -安装mysql
1、安装mysql
a、docker pull mysql:5.7 #下载镜像
b、 #启动mysql
[root@51668 data]# docker run -d -p 3316:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql5.7.1 mysql:5.7
77ada7f11321387dfed8779cc2593b0015c81e90e77a03d5451fc42412dcb260
-d #后台运行
-p 主机端口:容器端口 #端口映射
-v linux目录:容器内部目录 #挂载目录,实现数据和容器分离,保证容器删除后数据不会丢失
-e #设置环境
--name #名称
2、具名挂载和匿名挂载
a、# 具名挂载
[root@51668 data]# docker run -p 3344:80 -d -v juming:/etc/nginx --name nginx01 nginx
6bda2224880ade7f89e3a5e67c2e2716059b58960f73227b0aedb5ec633c7247
b、匿名挂载
docker run -p 3344:80 -d -v /etc/nginx --name nginx01 nginx
c、查看挂载到本地的目录
[root@51668 data]# docker volume ls
DRIVER VOLUME NAME
local juming
d、查看挂载目录的绝对路径(/var/lib/docker/volumes路径是具名挂载和匿名挂载的默认路径)
[root@51668 data]# docker volume inspect juming
[
{
"CreatedAt": "2021-06-13T16:36:02+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming/_data",
"Name": "juming",
"Options": null,
"Scope": "local"
}
]
e、如何确定具名挂载、匿名挂载,还是路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #路径挂载
f、通过-v 容器内路径:ro rw 改变读写权限
ro readonly #只读
rw readwrite #读写
docker -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx #只读 -P随机映射端口
docker -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx #读写
#一旦设置了ro只读权限,就说明这个路径只能通过宿主机来操作,容器内部无法操作
3、使用Dockerfile匿名挂载
a、编写Dockerfile文件
FROM centos
VOLUME ["/home/volume01"]
CMD echo "------ end ------"
CMD bin/bash
b、生成镜像
docker build -f dockerfile1 -t xifeng/centos :1.0
c、运行镜像并进入容器内
docker run -it --name centos01 xifeng/centos :1.0 /bin/bash
d、docker inspect centos01 #查看挂载路径
4、使用数据卷容器实现容器之间的数据共享
a、docker run -it --name centos01 xifeng/centos :1.0 /bin/bash #启动容器centos01 作为数据卷容器
b、docker run -it --volumes-from centos01 --name centos02 xifeng/centos:1.1 /bin/bash #启动容器centos02 挂载到centos01
结论:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有没有容器使用为止,但是一旦持久化到本地,这时,本地的数据是不会删除的。
多个mysql之间实现数据共享
a、docker run -d -p 3316:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
b、docker run -d -p 3306:3306 --name mysql02 --volumes-from mysql01 mysql:5.7