docker知识总结
Posted hequnwang10
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker知识总结相关的知识,希望对你有一定的参考价值。
1、容器数据卷
将应用和环境打包成一个镜像!
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化
mysql,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!
直接使用命令来挂载 -v
#命令
docker run -it -v 主机目录:容器内目录
docker run -it -v /home/ceshi:/home centos /bin/bash
我们以后修改只需要在本地修改即可,容器内会自动同步!
2、安装MySQL
docker pull mysql:5.7
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
docker run -d -p 3310: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
假设我们将容器删除
发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能。
3、具名和匿名挂载
匿名挂载
# -v 容器内路径!
docker run -d -P --name nginx02 -v /ect/nginx nginx
具名挂载
# 通过 -v 卷名:容器内路径
docker run -d -P --name nginx03 -v juming-nginx:/ect/nginx nginx
# 查看一下这个卷
docker volume ls
DRIVER VOLUME NAME
local 034e897e9bc6bdb0b39d323b50b3e65ea90680b58c0e1d6a6b8132084310ffd5
local 601bc1f1fec62456d54d65f13fc720795d6e34c43dcfa621093aac9609346c4d
local juming-nginx
docker volume inspect juming-nginx
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data下;
我们可以通过具名挂载方便的找到一个卷,大多情况下在使用具名挂载
# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
拓展
ro #readonly 只读
rw #readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
4、Dockfile
Dockerfile 就是用来构建 docker 镜像的构建文件!命令脚本!
vim dockerfile1
# 创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
docker build -f dockerfile1 -t whq/centos .
docker images
测试文件同步
在容器内的volume01中创建一个con.txt文件
退出容器:
docker inspect 950d72bbce4a
发现数据在/var/lib/docker/volumes/a0be50184a512fdd0282020731d4d292033aebeba81e5f39243777a74b513633/_data目录下
cd /var/lib/docker/volumes/a0be50184a512fdd0282020731d4d292033aebeba81e5f39243777a74b513633/_data
ll
发现数据已经同步了。
假设构建镜像时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!
5、数据卷容器
多个mysql同步数据!
#启动容器01
docker images
docker run -it --name docker01 45ae66afc252
ls -l
#启动容器02
docker run -it --name docker02 --volumes-from docker01 45ae66afc252
ls -l
#进入容器01的volume01
cd volume01
touch docker01
#进入容器02的volume01
cd volume01
ls
#启动容器03
docker run -it --name docker03 --volumes-from docker01 45ae66afc252
cd volume01
ls #会同步数据
touch docker03# 创建新的文件,容器01,02会自动同步。
== --volumes-from==通过这个命令可以使荣期间数据共享。删除docker01容器01,容器02,03 的数据还会存在。
多个mysql实现数据共享
docker run -d -p 3306: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
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
# 这个时候,可以实现两个容器数据同步!
结论:
容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的!
以上是关于docker知识总结的主要内容,如果未能解决你的问题,请参考以下文章
Docker学习总结(60)——Docker-Compose 基础知识回顾总结
Docker学习总结(60)——Docker-Compose 基础知识回顾总结
Docker学习总结(56)——Docker-compose 基础知识温习