1. 容器中的端口如何映射到宿主机上
在启动容器时,可以通过 -p 参数指定端口映射规则。
示例如下:
docker run -d -p <宿主机端口>:<容器内部端口> <镜像名称>
2. 如何复制宿主机上的文件到容器中
可以使用docker cp指令。
示例如下:
docker cp <宿主机上的文件路径> <容器名或容器ID>:<容器内的目标路径>
3. 如何复制容器中的文件到宿主机
同样可以使用docker cp指令。
示例如下:
docker cp <容器名或容器ID>:<容器内的文件路径> <宿主机上的目标路径>
4. 容器中的数据如何挂载到宿主机上
在 Docker 中,可以通过 挂载 Volume 或 绑定宿主机目录 的方式将容器中的数据持久化并映射到宿主机上。
docker run -d \
-v /宿主机/目录路径:/容器内挂载路径 \
--name <容器名称> \
<镜像名称>也可以使用命名卷
docker volume create app_datadocker run -d \
-v app_data:/容器内路径 \
--name my_container \
my_image
5. 如何设置容器在异常退出后能够自动启动
可以通过设置 重启策略(Restart Policy) 来确保容器在异常退出后能够自动启动。Docker 提供了多种重启策略,适用于不同的使用场景。
docker run -d \
--restart=<策略名称>[:重试次数] \
--name <容器名称> \
<镜像名称>
6. 容器的自启动选项都有哪些值,分别是什么含义
7. 什么是时区,一般情况下,容器中的时区是什么
时区(Time Zone) 是指地球上某个区域内统一使用的一种时间标准。由于地球自转一周为24小时,全球被划分为 24个时区,每个时区相差约1小时。
UTC(Coordinated Universal Time):世界协调时间,是所有时区的基准时间。
本地时间(Local Time):根据所在地区的时区对 UTC 进行偏移后的时间。例如:
北京时间(UTC+8)
美国东部时间(UTC-5 或 UTC-4,视夏令时而定)
容器本质上是一个隔离的进程环境,它默认继承宿主机的操作系统时区设置。
可以运行以下命令来查看当前时区与时间与时区信息:
docker run --rm alpine date
8. 如何让容器中的时区与宿主机保持一致
可以通过-v挂载宿主机的时区配置文件到文件中。
9. 容器的实现原理是什么
Docker 容器的本质是利用 Linux 内核的 命名空间隔离、资源控制(Cgroups) 和 联合文件系统 来实现轻量级虚拟化。它不是完整的虚拟机,但提供了接近原生的性能和极高的可移植性,非常适合微服务、云原生应用部署。
1. Namespaces(命名空间)
Namespaces 是 Linux 内核提供的一种隔离机制,它为每个容器提供一个独立的运行环境视图。
2. Cgroups(Control Groups)
Cgroups 是 Linux 的另一个核心功能,用于对进程组进行资源限制和监控。
3. Union File System(联合文件系统)
Docker 使用 UnionFS(如 AUFS、OverlayFS)来构建容器的文件系统。这种文件系统允许将多个只读层与一个可写层叠加,形成一个统一的文件系统视图。
4. 容器运行时引擎(如 containerd、runc)
Docker 并不直接操作内核,而是通过容器运行时(如 containerd 或 runc)来管理容器生命周期。
containerd:负责管理容器的启停、日志、快照等runc:负责实际调用内核接口启动容器进程
10. Dockerfile是什么
Dockerfile 是一个文本文件,其中包含了一系列指令(instructions),用于定义如何构建一个 Docker 镜像(image)。它是容器化应用的标准构建描述文件,类似于“菜谱”,告诉 Docker 引擎如何一步步组装镜像。
11&12. Dockerfile中常用命令有哪些,比如FROM、RUN,这些命令都有什么含义,什么场景下使用
常见 Dockerfile 指令
13. COPY和ADD有什么区别
14. CMD和ENTRYPOINT有什么区别
15. 什么是环境变量,有什么应用场景
环境变量(Environment Variables) 是操作系统或运行环境中提供的一组动态值,用于影响程序的运行行为。它们是键值对形式的字符串,存储在系统或进程的环境中。
作用:为程序提供配置信息、路径设置、用户身份等运行时所需的数据。
生命周期:通常只在当前会话或进程中有效,除非持久化保存(如写入
.env文件或 Dockerfile 中使用ENV指令)。
16. Dockerfile中如何指定环境变量
通过使用 ENV 变量名 变量
以下是示例:
ENV TZ Asia/Shanghai
17. 启动容器时如何在命令行中设置环境变量
可以通过-e 变量名=变量来设置
例如:
-e APP_ENV=production
18. 基于Nginx镜像制作一个Docker,要求替换首页为自己制作的首页
index.html:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>我的定制Nginx首页</title>
</head>
<body>
<h1>欢迎访问我的定制Nginx首页</h1>
<p>这是基于官方 Nginx 镜像构建的自定义镜像。</p>
</body>
</html> Dockerfile:
# 使用官方 Nginx 镜像作为基础镜像(推荐显式指定版本)
FROM nginx:latest
# 设置工作目录
WORKDIR /usr/share/nginx/html
# 替换默认首页
COPY index.html index.html
# 暴露 80 端口(默认已暴露)
EXPOSE 80
# 容器启动命令(默认已由 nginx 镜像定义)
CMD ["nginx", "-g", "daemon off;"]在包含Dockerfile与index.html的目录下执行docker build

19. 启动自己制作的镜像,并设置宿主机上的端口为23456,并挂载Nginx的配置目录到宿主机
docker run -d -p 23456:80 --name custom-nginx-container my-custom-nginx
20. 启动容器时如何为容器指定名称,指定名称有什么作用
在使用--name作为参数时可以指定名称,指定有意义的名称有助于更好地管理容器。