1. 容器启动时如何指定容器的主机名

通过添加参数--hostname或者-h


2. 如何在容器启动时指定hosts

可以使用--add-host 参数来向容器的 /etc/hosts 文件中添加自定义的主机名解析记录。


3. 如何在容器启动时指定dns服务器地址

可创建带有自定义DNS的网络:

docker network create --driver bridge --subnet=172.25.0.0/24 --gateway=172.25.0.1 \
  --opt com.docker.network.bridge.name=br0 \
  --opt com.docker.network.driver.mtu=1500 \
  --opt com.docker.network.bridge.enable_ip_forwarding=true \
  --opt com.docker.network.bridge.host_binding_ipv4=172.25.0.1 \
  --opt com.docker.network.bridge.default_bridge=false \
  --opt dns=8.8.8.8 \
  my_custom_network

也可在deamon.json中添加或修改dns配置项。

{
  "dns": ["8.8.8.8", "114.114.114.114"]
}


4. 如何在启动容器时,让容器在后台启动

在docker run 后面加入-d参数


5. 一般情况下容器中会启动多少主进程

一般情况下只运行一个主进程。


6. 当这个主进程执行完毕后,会发生什么事情

当主进程(前台进程)执行完毕或退出后,容器会立即停止运行。这是因为容器的生命周期是与它的主进程绑定的。


7. 容器适合运行数据库吗

不适合,因为数据库需要持久化存储,而且在大环境中会导致性能瓶颈。不过在测试或者开发环境中可以使用数据库容器进行测试与开发。


8. 对一个服务进行容器化,需要注意什么

对服务进行容器化时,需确保使用合适的基础镜像、前台运行主进程、合理配置数据持久化与网络、设置自启动策略,并遵循安全、日志、监控和命名规范,以保障服务稳定、可维护且易于管理。


9. 什么是多阶构建

多阶构建 是 Docker 提供的一项功能,允许您在 一个 Dockerfile 中使用多个 FROM 指令,每个阶段可以基于不同的基础镜像,并只保留需要的文件,最终生成一个体积更小、安全性更高、适合部署的镜像。


10. 什么是悬挂镜像,如何清理

悬挂镜像是指没有标签且不被任何容器引用的 Docker 镜像,可通过 docker image prune 或 docker image prune -a 命令进行清理,以释放磁盘空间并保持镜像仓库整洁。


11. 如何清理掉所有未被使用的 Docker 对象

可以使用 docker system prune -a --volumes 命令来清理所有未被使用的 Docker 镜像、容器、网络和数据卷,释放磁盘空间并保持环境整洁。

清理没有标签的中间镜像可以使用:

docker image prune -a

清理未使用的容器、镜像、网络和卷

docker system prune

总而言之,清理未被使用的Docker对象可以在docker 对象后面加上 prune


12. 如何查看容器占用的资源

可以使用 docker stats 实时查看容器的 CPU、内存、网络和磁盘 I/O 使用情况,也可以通过 docker inspect 查看详细资源配置,并结合 cAdvisor 或 Prometheus 实现图形化监控。

场景

推荐命令

实时监控资源使用

docker stats

查看详细配置和限制

docker inspect

日志排查问题

docker logs <容器名>

查看进程占用

docker exec -it <容器名> top

图形化监控

cadvisor, Prometheus + Grafana

磁盘空间分析

docker system df


13. 如何限制容器可使用的内存和CPU

在docker rum后面加入-m和--cpus参数。


14. 什么是Docker compose,什么场景下使用

Docker Compose 是一个用于定义和运行 多容器 Docker 应用程序 的工具。它通过一个 docker-compose.yml 文件来配置多个服务(services)、网络(networks)、数据卷(volumes)等资源,然后使用一条命令即可启动整个应用环境。


15. Docker compose有哪些局限性

Docker Compose 的局限性在于它只适合单机环境下的多容器编排,缺乏集群管理、自动扩缩容、高可用等生产级功能。


16. 什么是镜像仓库,常用的有哪些

镜像仓库是用于存储、管理和分发 Docker 镜像的服务,常用的包括 Docker Hub、阿里云 ACR、Harbor、AWS ECR、Google GCR 和 GitHub GHCR,适用于不同的部署场景和需求。


17. 本地部署一个Harbor镜像仓库

安装docker和docker-compose

sudo apt update && sudo apt install docker-compose -y

从github上下载harbor安装包

wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz

随后解压harbor,并编辑配置文件harbor.yml

tar -xvf harbor-offline-installer-v2.11.0.tgz 

执行准备脚本,随后使用docker-compose启动harbor

sudo ./prepare
sudo docker-compose up -d

启动完成


18. 配置机器信息Harbor仓库,并成功上传下载镜像

登录harbor

docker login 192.168.75.130:80 -u admin -p 密码

给本地镜像打tag

docker tag 镜像 tagid

然后我选择本地删除镜像后再次拉取

docker pull 镜像仓库端口+镜像位置


19. 普通用户可以执行docker容器吗

可以,只要普通用户在docker组里,或者启用了rootless模式


20. 如何让普通用户可以运行docker容器

1.加入docker组:

usermod -aG docker your_username

2.启用rootless模式

安装扩展包

sudo apt install -y docker-ce-rootless-extras

启动rootless模式

dockerd-rootless-setuptool.sh install

随后systemctl启用服务。

以他人的幸福为幸福,以他人的享乐为享乐。