Docker容器互联

前言

刚开始学习使用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通。

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论!x