docker中bridge网络是默认的网络类型,本文主要介绍一下容器之间的相互通信方法。
docker
使用单容器部署并相互组建网络的话,需要先创建一个网络,然后再把需要相互通信的容器加入此网络即可实现相互通信,由于bridge网络模式有DNS解析,所以可以直接填写主机名进行通信。
比如nginx-proxy-manager-zh和portainer俩个容器需要相互组网,前者反向代理后者进行访问,则:
1.在安装之前,先查看docker网络列表,防止冲突。
docker network ls
- 如果只显示bridge、host、none三种网络类型则表示环境干净,可以继续操作。
2.创建一个名字叫 internal 的docker网络。
docker network create internal
3.创建nginx-proxy-manager-zh容器服务
docker run -d \ --name nginx-proxy-manager-zh \ --restart always \ --network internal \ -p 80:80 \ -p 81:81 \ -p 443:443 \ -v /home/docker/nginx-proxy-manager-zh/data:/data \ -v /home/docker/nginx-proxy-manager-zh/letsencrypt:/etc/letsencrypt \ chishin/nginx-proxy-manager-zh
4.容器nginx-proxy-manager-zh的访问参数
http://IP:81 Email:admin@example.com Password:changeme
5.如果可以成功打开此网页则代表部署成功。
6.创建portainer
docker run -d \ --name portainer \ --restart always \ --network internal \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/docker/portainer/data:/data \ 6053537/portainer-ce
7.默认portainer的访问地址为IP:9000,但是本次部署是NGINX反向代理过去,所以需要进入nginx-proxy-manager-zh这个管理页面添加主机名和9000端口,然后使用设置的IP或者域名访问即可。
8.如果可以正常访问即部署完成。
docker-compose
上面创建了一个名字叫 internal 的 bridge 网络,如果后续想通过compose编排的方式加入上面的网络,则需要在compose文件中添加入此网络即可。
下面拿owncloud的docker-compose文件举例;
version: "3.7"
services:
owncloud:
image: owncloud/server:10.11.0
container_name: owncloud_server
restart: always
networks:
- internal
environment:
- "OWNCLOUD_DOMAIN=c.kingsbestone.top"
- "OWNCLOUD_TRUSTED_DOMAINS=c.kingsbestone.top"
- "OWNCLOUD_DB_TYPE=mysql"
- "OWNCLOUD_DB_NAME=owncloud"
- "OWNCLOUD_DB_USERNAME=owncloud"
- "OWNCLOUD_DB_PASSWORD=owncloud@000"
- "OWNCLOUD_DB_HOST=mariadb"
- "OWNCLOUD_ADMIN_USERNAME=admin"
- "OWNCLOUD_ADMIN_PASSWORD=admin@000"
- "OWNCLOUD_MYSQL_UTF8MB4=true"
- "OWNCLOUD_REDIS_ENABLED=true"
- "OWNCLOUD_REDIS_HOST=redis"
healthcheck:
test: ["CMD", "/usr/bin/healthcheck"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- "/home/docker/owncloud/data:/mnt/data"
mariadb:
image: mariadb:10.6
container_name: owncloud_mariadb
restart: always
networks:
- internal
environment:
- "MYSQL_ROOT_PASSWORD=Admin@000"
- "MYSQL_USER=owncloud"
- "MYSQL_PASSWORD=owncloud@000"
- "MYSQL_DATABASE=owncloud"
command: ["--max-allowed-packet=128M", "--innodb-log-file-size=64M"]
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-u", "root", "--password=Admin@000"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- "/home/docker/owncloud/mariadb/mysql:/var/lib/mysql"
redis:
image: redis:6
container_name: owncloud_redis
restart: always
networks:
- internal
command: ["--databases", "1"]
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- "/home/docker/owncloud/redis/data:/data"
networks:
internal:
external: true
这样部署完成后即可自动加入上面创建好的docker网络 internal 中了,只需要在 nginx-proxy-manager-zh 的控制台中添加 owncloud 的主机名和端口即可正常访问,默认owncloud的端口为8080。
owncloud的文件中如果要加入现有网络环境则需要修改每一个容器的networks的键值和一级networks键值为你实际的值:
networks:
internal:
external: true
如果你要新创建一个独立的网络环境则,需要修改每一个容器的networks键值和一级networks键值,可根据实际情况修改,例如:
networks:
my_network:
driver: bridge
这样就创建好了一个新的my_network的桥接网络了,driver后可以跟的参数有:bridge、host、none、Overlay、Macvlan、IPvlan等。
end…