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:3306
    environment:             #环境变量
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=wordpress
    volumes:                 #数据卷挂载,且volumes需要在顶级标题声明
      - mysql-data:/var/lib/mysql
      - /app/myconf:/etc/mysql/conf.d
    restart: always          #崩溃后自动重启
    networks:                #加入的网络,且networks需要在顶级标题声明
      - blog

  wordpress: 
    container_name: wordpress-app
    image: wordpress
    ports:
      - 8080:80
    environment: 
      - WORDPRESS_DB_HOST=mysql:3306 
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=123456
      - WORDPRESS_DB_NAME=wordpress
    restart: always
    networks: 
      - blog
    volumes:
      - wordpress:/var/www/html
    depends_on:              #表示先开启mysql容器
      - mysql
 
networks:                 #顶级标题声明网络
  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 容器名 查看日志

这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐