1. Docker 是什么?
答案:
Docker 是一个开源的应用容器引擎,基于 Go 语言开发,遵循 Apache2.0 协议。
可以让开发者打包应用及依赖到一个轻量级、可移植的容器中 ,然后发布到任何主流 Linux 机器上,实现一次封装,到处运行。
2. 容器 vs 虚拟机(必问)
答案:
-
传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
-
容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
-
每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
3. Docker 三大核心概念
答案:
-
镜像(Image):只读模板,用来创建容器。
-
容器(Container):镜像的运行实例。
-
仓库(Repository):存放镜像的地方(Docker Hub、私有仓库)。
4. Docker 为什么快?
答案:
-
容器共享宿主机内核,不需要启动完整 OS
-
容器是进程级启动,秒级启动
-
联合文件系统(UnionFS),分层存储,复用层
5. Docker 常用命令(必背)
答案:
# 搜索/拉取/查看/删除镜像
docker search
docker pull
docker images
docker rmi
# 容器操作
docker run # 创建并启动
docker ps # 查看运行中容器
docker ps -a # 所有容器
docker start/stop/restart 容器ID
docker rm # 删除容器
docker exec -it 容器ID /bin/bash # 进入容器
docker logs 容器ID # 查看日志
6. docker run 常用参数
答案:
-
-d:后台运行 -
-p:端口映射 宿主机:容器 -
-P:随机端口 -
--name:指定容器名 -
-v:挂载目录 -
--restart=always:开机自启 -
-e:设置环境变量
7. Docker 数据卷(Volume)是什么?
答案:
数据卷是宿主机目录 / 文件,直接挂载到容器内部。
作用:
-
持久化数据,容器删除数据不丢
-
容器与宿主机共享数据
-
多个容器共享数据
8. Docker 网络模式
答案:
四种常用网络模式:
-
bridge:默认,独立网络,端口映射
-
host:与宿主机共享网络
-
none:无网络
-
container:与另一个容器共享网络
9. Dockerfile 是什么?
答案:
Dockerfile 是构建镜像的脚本文件,包含一条条指令。
通过 docker build 自动构建镜像。
10. Dockerfile 常用指令
答案:
FROM # 基础镜像
MAINTAINER # 作者
RUN # 构建时执行命令
CMD # 容器启动默认命令
ENTRYPOINT # 固定启动命令
EXPOSE # 暴露端口
ENV # 环境变量
ADD/COPY # 拷贝文件
VOLUME # 数据卷
WORKDIR # 工作目录
11. CMD vs ENTRYPOINT
答案:
-
CMD:可被命令行参数覆盖
-
ENTRYPOINT
:不会被覆盖,一定会执行
常配合使用:
ENTRYPOINT + CMD
12.如何优化 Docker 镜像体积?
-
选择体积小的基础镜像;
-
合并 RUN 命令;
-
删除无用缓存;
-
使用
.dockerignore; -
使用多阶段构建。
13.镜像和容器的区别
镜像是静态的模板,用于创建容器。
容器是镜像的运行实例,带有可写层。
多个容器可以共享同一个镜像。