目录
一、数据卷
镜像运行就会产生容器,容器停止,程序停止,程序内的数据消失,所以需要使用数据卷来保存数据,避免容器停止数据消失。
数据卷:目录挂载,即将容器上的目录挂在到宿主机上。用于容器数据持久化和容器之间数据共享
-v 宿主机目录:容器目录
二、MySQL数据
mysql启动前需要配置密码
docker run -d
-p 3306:3306
--name mysql5.7
-it
-e MYSQL_ROOT_PASSWORD=123456 #配置root用户给的密码为123456
-v ./mysql/conf:/etc/mysql/conf.d #配置文件数据卷映射
-v ./mysql/data:/var/lib/mysql #数据持久化数据卷映射
mysql:5.7
三、具名和匿名挂载
1、匿名挂载
docker -v /var/lib/mysql/data
在-v时,只声明了容器的路径,没有声明宿主机的路径,就为匿名挂载
系统会宿主机的路径
2、具名挂载
docker -v mysqljuming:/var/lib/mysql/data
在-v时,声明的宿主机不是路径,而是一个字符串。
无论是匿名挂载还是具名挂载,其数据卷安装的路径都在/var/lib/docker/volumes/xxxx
命令:
docker volumes inspect 具名 #查看具名挂载的数据卷路径
3、指定挂载
docker -v /home/mysql:/var/lib/mysql/data
四、Dockerfile
Dockerfile用来构建镜像的构建文件
1、数据卷容器
创建数据卷Dockerfile文件,编写代码,保存
FROM tomcat
VOLOMU ["volume1","volume2"]
CMD echo "hello"
构建dockerfile文件
docker build
-f /home/dcokerfile1 #dockerfile源文件路径
-t tomcatfile #dockerfile构建的镜像名
2、dockerfile构建步骤
1、编写一个dockerfile文件
2、构建docker build
3、运行docker run
4、发布 docker push(发布到docker hub、阿里云镜像库)
CMD :程序的启动入口程序,程序启动时,如果追加了其他命令,那么就会将dockerfile中的CMD命令替换掉
ENTRYPOINT:程序启动时,可以在追加其他命令,误会替换
查看docker build过程:
docker history 镜像ID
五、数据卷容器
1、实现多个容器之间数据共享
docker run --name mysql01 mysql:5.7 #启动容器musql1
docker run --name mysql02
-volumes-from musql01
mysql:5.7
# -volumes-from,01作为父容器,02作为子容器,02共享01内的数据卷
数据共享,即使父容器镜像关闭,子容器的共享数据卷依旧存在。子父容器之间共享数据卷是一个双向复制的概念。
2、多个mysql之间共享数据库
docker run -d --name mysql01 -it -e MYSQL_ROOT_PASSWORD=123456 -v /etc/mysql/conf.d -v /var/lib/mysql mysql:5.7
docker run -d --name mysql02 -p 3307:3306 --volume-from mysql01 mysql:5.7
容器的生命周期一直持续到没有容器使用为止,所以容器之间的数据卷,只有所有的容器都关闭,共享的数据卷才会丢失。但是如果共享的数据卷同步到宿主机,那么所有的数据就会永久保存。
六、Docker网络
1、Docker0
docker如何处理容器网络互访?
1、查看容器IP
docker inspect ID
在这里查看容器ip
2、evth-pair技术
docker每启动一个容器,就会在宿主机上出现一个接口IP,同时每一个容器里面也会有一个接口IP,ecth-pair技术就相当一个桥梁,链接各个虚拟设备;
3、--link
docker每一次启动都会非容器重新分配IP,在使用时,如果我们吧IP地址写死,那么就失去了高可用性,为了解决这个问题,引入--link这个技术。
--link建立两个容器之间的链接,可以通过容器名 进行ping
docker run -d --name tomcat03 --link tomcat02 tomcat
docker exec -it tomcat03 ping tomcat02
通过容器名可以实现互访
只能tomcat03ping通tomcat02,02ping不通03
docker exec -it 容器名 cat /etc/hosts
4、自定义网络
查看所有的docker网络
docker network ls
docker网络模式
bridge:桥接模式
none:不配置网络
host:与宿主机共享网络
container:容器网络连通
创建网络
docker network create
--driver bridge #桥接模式创建网络
--subnet 192.168.0.0/16 #网络号
--gateway 192.168.0.1 #网关
mynet #网络名
使用自己创建的网络,创建容器,同网段之间的连通
docker run -d --name tomcat-net-01 --network mynet tomcat
docker run -d --name tomcat-net-02 --network mynet tomcat
查看自定义网络下的容器
docker network inspect mynet
自定义网络是可以实现容器之间,使用容器名互通。
不同的集群使用不同的网络,保证网络的健康。
跨网段互通
docker network connect tomcat01 mynet