自定义docker网络

如何自定义docker网络

自定义镜像

Dockerfile

Docker 镜像采用分层存储(基于 UnionFS 联合文件系统):

基础镜像(如ubuntu:20.04)是最底层的只读层;

  • 你每执行一个定制操作(如安装软件、复制文件),都会在原有层之上新增一个只读层;
  • 最终所有层叠加,形成完整的自定义镜像,容器启动时会在镜像层之上挂载一个可写层。
  • 这种分层机制的好处是:复用已有层(节省空间)、构建增量更新(只重新构建修改的层)。

示例:制作预装 Python3 的 Ubuntu 自定义镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Dockerfile
# 1. 指定基础镜像(必选,第一层)
FROM ubuntu:20.04

# 2. 维护者信息(可选)
LABEL maintainer="yourname <your@email.com>"

# 3. 执行命令(安装Python3,清理缓存减少镜像体积)
RUN apt-get update && \
    apt-get install -y python3 python3-pip && \
    rm -rf /var/lib/apt/lists/*  # 关键:清理缓存,避免层过大

# 4. 设置工作目录(后续命令的默认目录)
WORKDIR /app

# 5. 容器启动默认命令
CMD ["python3", "--version"]

构建镜像

1
2
# 假设 Dockerfile 所在目录为当前目录
docker build -t docker-demo .

这句话分为三个部分

  • docker build:构建镜像命令;
  • -t docker-demo:指定镜像名称和标签;
  • .:当前目录,即 Dockerfile 所在目录。

然后我们创建容器

1
docker build -t docker-demo .

此时观察容器状态

容器已经跑起来了

1
2
3
4
5
6
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND                   CREATED              STATUS                    PORTS                                                  NAMES
e6ff2fceb771   docker-demo   "java -jar /app.jar"      About a minute ago   Up About a minute         0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              dd
bfb1069106a2   mysql:8.0     "docker-entrypoint.s…"   17 hours ago         Up 19 minutes             0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
7bf0d447a7f9   nginx         "/docker-entrypoint.…"   21 hours ago         Exited (0) 18 hours ago                                                          nginx
[root@localhost ~]#

创建自定义docker网络

  • docker自定义网络可以直接使用容器名相互访问,不需要知道ip

查看自定义网络

1
docker network ls

创建自定义docker网络

1
2
# 创建自定义docker网络
docker network create shuimo

让mysql容器加入自定义网络

1
docker network connect shuimo mysql

创建容器的时候自己连接自定义网络

1
docker run -d --name dd -p 8080:8080 --network shuimo docker-demo

连接配置成功的结果

docker run -d
–name mysql
–network shuimo
-p 3306:3306 \ -v /root/mysql/data:/var/lib/mysql
-v /root/mysql/conf:/etc/mysql/conf.d \ -v /root/mysql/sql:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=1743355601
-e MYSQL_INITDB_SKIP_TZINFO=1 \ -e LANG=C.UTF-8
–restart always \ mysql:8.0

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计