Docker 容器互联
一、docker 容器连接及测试
1、新建网络
docker network create -d bridge test-net
# 查看已有网络
docker network ls
2、创建连接容器
1、创建两个容器test1、test2
docker run -d --name test1 --network test-net ubuntu
docker run -d --name test1 --network test-net ubuntu
2、使用ping命令测试两个容器是否连接(在容器里下载ping)
apt-get update
apt install iputils-ping
可以先建一个容器,然后提交镜像,再启动另一个,这样可以不再每一个容器里下载ping
docker commit my-container new-container:tag
二、docker-compose实现容器互联
version: "3"
networks:
gvb-network:
driver: bridge
ipam:
config:
- subnet: ${SUBNET}
services:
gvb-redis:
image: redis:7.0.8-alpine
container_name: gvb-redis
volumes:
- ${GVB_DATA_DIRECTORY}/redis/data:/data
ports:
- ${REDIS_PORT}:6379 # 自定义的是暴露出去的端口, Redis 容器内运行固定为 6379
command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
networks:
gvb-network:
ipv4_address: ${REDIS_HOST}
gvb-mysql:
image: mysql:8.0
container_name: gvb-mysql
volumes:
- ${GVB_DATA_DIRECTORY}/mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} # root 账号的密码
- MYSQL_DATABASE=${MYSQL_DATABASE} # 初始化的数据库
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- TZ=Asia/Shanghai
command: --max_connections=1000
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
ports:
- ${MYSQL_PORT}:3306 # 自定义的是暴露出去的端口, MySQL 容器内运行固定为 3306
networks:
gvb-network:
ipv4_address: ${MYSQL_HOST}
gvb-elasticsearch:
image: elasticsearch:7.12.0
container_name: gvb-elasticsearch
volumes:
- ${GVB_DATA_DIRECTORY}/elasticsearch/data:/usr/share/elasticsearch/data
- ${GVB_DATA_DIRECTORY}/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ${GVB_DATA_DIRECTORY}/elasticsearch/plugins:/usr/share/elasticsearch/plugins
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms128m -Xmx256m
ports:
- ${ELASTICSEARCH_PORT01}:9200 # 自定义的是暴露出去的端口, elasticsearch 容器内运行固定为 9200和9300
- ${ELASTICSEARCH_PORT02}:9300
networks:
gvb-network:
ipv4_address: ${ELASTICSEARCH_HOST}
command:
[
"/bin/sh",
"-c",
"chmod -R 777 /usr/share/elasticsearch/data /usr/share/elasticsearch/config /usr/share/elasticsearch/plugins && /usr/local/bin/docker-entrypoint.sh",
]
gvb-nginx:
image: nginx:latest
container_name: gvb-nginx
volumes:
- ${GVB_DATA_DIRECTORY}/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ${GVB_DATA_DIRECTORY}/nginx/logs:/var/log/nginx
- ${GVB_DATA_DIRECTORY}/gvb_web:/usr/share/nginx/html # 修改路径为 nginx 默认的 web 根目录
- ${GVB_DATA_DIRECTORY}/gvb_server:/usr/share/nginx/server # 修改路径为 nginx 默认的服务器目录
ports:
- ${NGINX_PORT}:80 # 自定义的是暴露出去的端口, nginx 容器内运行固定为 80
networks:
gvb-network:
ipv4_address: ${NGINX_HOST}
gvb-kibana:
image: kibana:7.12.0
container_name: gvb-kibana
environment:
- ELASTICSEARCH_HOSTS=http://gvb-elasticsearch:9200
ports:
- ${KIBANA_PORT}:5601
networks:
gvb-network:
ipv4_address: ${KIBANA_HOST}