2Docker自定义网络,compose多容器部署
docker自定义网络
Docker 会给每个容器分配唯一 IP,默认网段是172.17.0.0/16,但容器 IP 可能因各种原因变化,若直接用 “容器 IP + 端口” 的方式来让容器间通信,稳定性不足。
Docker 默认的 docker0 网络不支持主机域名形式的通信。
解决办法是创建自定义网络,在自定义网络中,容器名就可以作为稳定的域名来使用,方便容器间进行通信。
如何配置自定义网络
docker network create
是 Docker 用于创建网络的命令,通过不同参数可以创建多种类型的网络,满足不同场景下容器间通信需求 ,以下是它的详细用法:
创建一个自定义网络:
docker network create 网络名
创建删除查看可以使用--help查看具体用法
创建完成后,容器在启动时可以使用--network 加入指定网络
[root@iZbp ~]# docker run -d --name nginx1 -p 88:80 --network blog mynginx:v1.0
bd6584beba18cbca6fd068d6b790e86d303d933bff92d59f7f5697ad126b9a8b
[root@iZbp ~]# docker run -d --name nginx2 -p 99:80 --network blog mynginx:v1.0
6ad6f7e6623f06d5d451655d5ee1a50a5874563473402e84b357eb8d36899db9
处在同一自定义网络的容器可以直接使用域名互相访问
使用mysql和wordpress搭建个人博客
操作流程示意图,主要步骤如下
1创建blog网络
docker network create blog
2启动mysql容器
[root@iZbp168syvktn69kc40xmkZ ~]# docker run -d -p 3306:3306 \-e MYSQL_ROOT_PASSWORD=123456 \-e MYSQL_DATABASE=wordpress \-v mysql-data:/var/lib/mysql \-v /app/myconf:/etc/mysql/conf.d \--restart always \--name mysql \--network blog \mysql:8.0
3启动wordpress容器
[root@iZbp168syvktn69kc40xmkZ ~]# docker run -d -p 8080:80 \
> -e WORDPRESS_DB_HOST=mysql:3306 \
> -e WORDPRESS_DB_USER=root \
> -e WORDPRESS_DB_PASSWORD=123456 \
> -e WORDPRESS_DB_NAME=wordpress \
> -v wordpress:/var/www/html \
> --restart always \
> --name wordpress-app \
> --network blog \
> wordpress:latest
docker--compose
使用compose可以一次启动或者关闭多个容器,并实现自动配置。要实现这种一键部署,需要在 .yaml格式中写好配置
compose.yml
必须包含的核心要素
接下来以部署wordpress服务为例,书写要求:
1按照 name
→ services
→ networks
→ volumes
的层级组织
2层级之间需要空两个空格
3冒号后要空一格,- 后要空1格
[root@test01 ~]# cat compose.yaml name: myblog #项目名称(可选)services: #服务定义(核心!每个容器对应一个服务)mysql: #服务名称container_name: mysql #给容器起名字image: mysql:8.0 #容器使用的镜像ports: #端口映射- 3306:3306environment: #环境变量- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressvolumes: #数据卷挂载,且volumes需要在顶级标题声明- mysql-data:/var/lib/mysql- /app/myconf:/etc/mysql/conf.drestart: always #崩溃后自动重启networks: #加入的网络,且networks需要在顶级标题声明- blogwordpress: container_name: wordpress-appimage: wordpressports:- 8080:80environment: - WORDPRESS_DB_HOST=mysql:3306 - WORDPRESS_DB_USER=root- WORDPRESS_DB_PASSWORD=123456- WORDPRESS_DB_NAME=wordpressrestart: alwaysnetworks: - blogvolumes:- wordpress:/var/www/htmldepends_on: #表示先开启mysql容器- mysqlnetworks: #顶级标题声明网络blog:volumes: #顶级标题声明数据卷mysql-data:wordpress:
compose开启与关闭
compose开启语法
- 默认配置文件后台启动:
docker compose up -d
- 自定义配置文件后台启动:
docker compose -f 文件名.yaml up -d
compose关闭语法
docker compose -f 文件名.yaml down
docker compose -f 文件名.yaml down -rmi all -v
-rmi -v这个参数表示compose关闭容器时删除相应的数据卷
补充:docker logs 容器名 查看日志
这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!