前言
刚开始学习使用Doker时部署过几个容器,有的容器需要数据库,但是多个容器需要数据库时,不能一个容器跟着一个数据库,需要让多个容器共同使用一个数据库,当时是使用 –link参数,但是只能单向连接,不能互通,而且当时也没有弄懂怎么怎么使用–link参数,现在也没有懂,因为官方说这种方式会取消,也就没有再研究。因为官方说要放弃–link参数,使用网络来互通容器,而且是任意的,也就是说只要需要互通的容器在一网络下即可实现互通。看了相关资料也很简单,就学习使用了。
单容器
命令创建一个名称为act的docker网络。
docker network create act
创建容器时指定网络。
docker run -d --network act -e MYSQL_ROOT_PASSWORD=mysqlrootpassword --name mysql mysql
然后再创建一个容器,并将其添加到名称为act的网络下。
docker run -d --network act --name qb lscr.io/linuxserver/qbittorrent:latest
或者将已经存在的容器添加到指定网络中。例如将已经存在的容器添加到网络act中。
docker network connect act nginx
在qb下ping容器mysql可以ping通。
docker-compose
使用docker-compose部署容器时会建立一个网络,比如我建立两个容器nextcloud和mysql:
version: "3.2"
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud
environment:
- PUID=1000
- PGID=1000
- TZ=asia/shanghai
volumes:
- /smb/docker/nextcloud/config:/config
- /smb/docker/nextcloud/data:/data
ports:
- 5443:443
restart: unless-stopped
db:
image: mysql
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: mysqlrootpassword
restart: always
它会创建一个名为nextcloud_default的网络,两个容器也将加入该网络。
在容器nextcloud里可以ping通容器mysql。
现在需要部署第三个容器,需要使用mysql数据库,但如果再部署一个包含mysql数据库的docker-compos,显然会占用更多系统资源。解决的办法就是把要使用mysql的容器添加到这个网络下即可。比如创建一个名为test的容器,并将该容器添加到nextcloud_default网络下。
docker run -d --network nextcloud_default --name test lscr.io/linuxserver/qbittorrent:latest
容器test已经在nextcloud_default网络下。
然后在容器test里ping容器mysql,即可ping通。