Docker-数据卷、网络、dockerfile、挂载

本文详细介绍了Docker中数据卷的使用,包括匿名和具名挂载,以及如何在MySQL容器间共享数据。此外,还讲解了Dockerfile的构建步骤和网络配置,如Docker0网络、自定义网络和容器间的通信方式。
摘要由CSDN通过智能技术生成

目录

一、数据卷

二、MySQL数据

三、具名和匿名挂载

1、匿名挂载

2、具名挂载

3、指定挂载

四、Dockerfile

1、数据卷容器

2、dockerfile构建步骤

五、数据卷容器

1、实现多个容器之间数据共享

2、多个mysql之间共享数据库

六、Docker网络

1、Docker0

1、查看容器IP

2、evth-pair技术

4、自定义网络

创建网络

使用自己创建的网络,创建容器,同网段之间的连通

跨网段互通


一、数据卷

镜像运行就会产生容器,容器停止,程序停止,程序内的数据消失,所以需要使用数据卷来保存数据,避免容器停止数据消失。

数据卷:目录挂载,即将容器上的目录挂在到宿主机上。用于容器数据持久化和容器之间数据共享

-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技术就相当一个桥梁,链接各个虚拟设备;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值