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知识总结

Docker学习总结(56)——Docker-compose 基础知识温习

Docker学习总结(56)——Docker-compose 基础知识温习

Docker学习总结(59)——DockerFIile相关知识点再总结