docker面试题

发布于:2025-04-18 ⋅ 阅读:(64) ⋅ 点赞:(0)

1.docker网络

Docker网络是Docker容器之间进行通信的关键功能。Docker提供了多种网络模式和驱动,以满足不同的网络需求。以下是Docker网络的详细介绍:
1.Docker网络模式
Docker提供了以下几种网络模式,每种模式适用于不同的场景:
1.1 Bridge(默认模式)
特点:每个容器都有自己的虚拟网络接口,并连接到Docker的默认桥接网络(docker0)。
适用场景:适用于需要容器之间互相通信的场景。

docker run -d --name container1 -p 8080:80 nginx

1.2 Host
特点:容器直接使用宿主机的网络栈,没有网络隔离。
适用场景:适用于需要高性能网络的场景。

docker run -d --name container2 --network host nginx

1.3 None
特点:容器没有网络功能,需要手动配置网络。
适用场景:适用于不需要网络的容器。

docker run -d --name container3 --network none nginx

1.4 Overlay
特点:用于Docker Swarm模式,支持跨主机的容器网络。
适用场景:适用于多主机的容器网络。

docker network create --driver overlay my_overlay_network
docker run -d --name container4 --network my_overlay_network nginx

2.Docker网络驱动

Docker支持多种网络驱动,每种驱动适用于不同的网络需求:
2.1 Bridge Driver
默认驱动,适用于单主机的容器网络。
创建自定义bridge网络:.

docker network create --driver bridge my_bridge_network

2.2 Host Driver
容器直接使用宿主机的网络栈。
适用于需要高性能网络的场景。
2.3 Overlay Driver
适用于Docker Swarm模式,支持跨主机的容器网络。
创建overlay网络:

docker network create --driver overlay my_overlay_network

2.4 MACVLAN Driver
适用于需要容器拥有独立MAC地址的场景。
创建MACVLAN网络:

docker network create --driver macvlan --subnet 192.168.1.0/24 --gateway 192.168.1.1 my_macvlan_network

3.查看和管理Docker网络

查看网络列表:

docker network ls

查看网络详情:

docker network inspect my_bridge_network

创建网络:

docker network create my_bridge_network

删除网络:

docker network rm my_bridge_network

连接容器到网络:

docker network connect my_bridge_network container1

断开容器与网络的连接:

docker network disconnect my_bridge_network container1

4.ADD 和 WORKDIR的区别

在 Dockerfile 中,ADD 和 WORKDIR 是两个完全不同的指令,它们的功能和用途完全不同。以下是它们的详细区别:

1.功能
ADD:
用于将文件或目录从本地主机复制到 Docker 镜像中。
可以复制本地文件、目录,或者从 URL 下载文件。
如果目标路径不存在,Docker 会自动创建所需的目录。
例如:

ADD file.txt /app/
ADD https://example.com/file.txt /app/

WORKDIR:
用于设置 Docker 容器中的工作目录(working directory)。

后续的指令(如 RUN、CMD、ENTRYPOINT 等)都会在这个目录下执行。
如果目录不存在,Docker 会自动创建它。
例如:

WORKDIR /app
RUN echo "Current directory is $(pwd)"

2.用途
ADD:
主要用于将文件或目录复制到镜像中。
适合在构建镜像时添加文件或依赖项。
例如,将代码文件、配置文件或依赖包复制到镜像中。
WORKDIR:
主要用于设置容器内的工作目录。
适合在运行容器时指定工作路径,方便后续命令的执行。
例如,设置工作目录为 /app,然后运行 RUN 命令安装依赖。

3.示例对比
使用 ADD:

FROM alpine
ADD file.txt /app/file.txt  # 将本地的 file.txt 复制到镜像的 /app/ 目录

使用 WORKDIR:

FROM alpine
WORKDIR /app  # 设置工作目录为 /app
RUN echo "Hello World" > file.txt  # 在 /app 目录下创建 file.txt

4.Dockerfile 中 CMD 与 ENTRYPOINT 区别

1.功能区别
CMD:
CMD 是容器启动时的默认命令。
如果用户在运行容器时没有指定命令,CMD 中的命令会被执行。

如果用户在运行容器时指定了命令,则 CMD 中的命令会被覆盖。
通常用于提供容器的默认行为,但允许用户在运行时动态修改。

ENTRYPOINT:
ENTRYPOINT 是容器的入口点(entry point)。
它定义了容器启动时必须执行的命令。

如果用户在运行容器时指定了命令,这些命令会被作为参数传递给 ENTRYPOINT 定义的命令。
ENTRYPOINT 提供了一种更固定的行为,通常用于确保容器始终以某种方式运行。

2.用法区别
CMD:
语法:CMD [“command”, “param1”, “param2”] 或 CMD command param1 param2

CMD ["echo", "Hello World"]

或者

CMD echo Hello World

ENTRYPOINT:
语法:ENTRYPOINT [“command”, “param1”, “param2”] 或 ENTRYPOINT command param1 param2

ENTRYPOINT ["echo", "Hello World"]

或者

ENTRYPOINT echo Hello World

3.覆盖性区别
CMD:
如果用户在运行容器时指定了命令,则 CMD 中的命令会被覆盖。
例如:

docker run my_image echo "Custom Command"

这里,echo “Custom Command” 会覆盖 CMD 中的默认命令。
ENTRYPOINT:
如果用户在运行容器时指定了命令,这些命令会被作为参数传递给 ENTRYPOINT 定义的命令。
例如:

ENTRYPOINT ["echo"]

运行容器时:

docker run my_image "Custom Command"

网站公告

今日签到

点亮在社区的每一天
去签到