转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
1. 如何批量清理临时镜像文件?
-
所谓的“临时镜像”或“虚悬镜像”(dangling images)是指那些没有被任何容器引用的层,通常是在构建新镜像时遗留下来的中间层。可以使用sudo docker rmi $(sudo docker images -q -f "dangling=true")命令。
2. 如何查看镜像支持的环境变量?
-
可以使用sudo docker run ${IMAGE} env命令,如:sudo docker run nginx env
3. 本地的镜像文件都存放在哪里?
-
与Docker相关的本地资源默认都存放在/var/lib/docker/目录下,其中
containers
目录存放容器信息;image
目录存放镜像信息;aufs
/overlay2
目录下存放具体的镜像层文件;network
存储Docker网络相关信息;volumes
存储 Docker 卷的数据;swarm
存储 Swarm 集群的状态和配置等。
4. 构建 Docker 镜像应该遵循哪些原则?
整体原则上,尽量保持镜像功能的明确和内容的精简,要点包括:
-
尽量选取满足需求但较小的基础系统镜像;
-
清理编译生成文件、安装包的缓存等临时文件。
-
安装各个软件时候要指定准确的版本号,并避免引人不需要的依赖。
-
从安全角度考虑,应用要尽量使用系统的库和依赖。
-
如果安装应用时候需要配置一些特殊的环境变量,在安装后要还原不需要保持的变量值
-
使用 Dockerfle 创建镜像时候要添加 .dockerignore 文件或使用干净的工作目录。
5. 容器退出后,通过 docker ps命令查看不到,数据会丢失么?
-
容器退出后会处于终止(exited)状态,此时可以通过
docker ps -a
查看。其中的数据也不会丢失,还可以通过docker start
命令来启动它。只有删除掉容器才会清除所有数据。
6. 如何停止所有正在运行的容器?
-
可以使用
sudo docker kill $(sudo docker ps -g)
命令。
7. 如何清理批量后台停止的容器?
-
可以使用
sudo dockerrm$(sudo docker ps-a -q)
命令
8. 如何给容器指定一个固定IP地址,而不是每次重启容器IP地址都会变?
-
先创建一个自定义网络,然后再固定IP:
docker network create --subnet=192.168.1.0/24 my_custom_network
docker run -d --name my_container --network my_custom_network --ip 192.168.1.100 my_image
9. 如何临时退出一个正在交互的容器的终端,而不终止它?
-
先按
Ctrl-p
,然后按ctrl-q
即可。如果按Ctr1-c
往往会让容器内应用进程终止,进而会终止容器。
10. 可以在一个容器中同时运行多个应用进程吗?
-
一般并不推荐在同一个容器内运行多个应用进程。如果有类似需求,可以通过一些额外的进程管理机制,比如
supervisord
、runit
、systemd
等来管理所运行的进程。
11. 使用“docker port”命令映射容器的端口时,系统报错Error:No public port '80'published for e7d817698b6f,是什么意思?
-
创建镜像时 Dockerfle 要指定正确的 EXPOSE 的端口;
-
容器启动时指定 PublishAllPort=true;
12. 如何控制容器占用系统资源(CPU、内存)的份额?
-
在使用docker create命令创建容器或使用docker run 创建并启动容器的时候,可以使用-cl--cpu-shares[=0]参数来调整容器使用 CPU 的权重;使用 -m|-memory[=MEMORY]参数来调整容器使用内存的大小。
13. 从非官方仓库(例如dldockerpool.com)下载镜像时候,有时候会提示“Error:Invalid registry endpoint https://dl.dockerpool.com:5000/v1/......”?
-
Docker自1.3.0版本往后,加强了对镜像安全性的验证,需要手动添加对非官方仓库的信任。编辑 Docker 配置文件,在其中添加:
DOCKER OPTS="--insecure-registry dl.dockerpool.com:5000"
之后,重启 Docker 服务即可。
14. Docker 的配置文件放在哪里,如何修改配置?
-
Centos 系统的配置文件放在/etc/docker,关键的配置文件是 daemon.json。这个文件用于配置Docker守护进程(Docker Daemon)的各项参数,包括但不限于数据存储位置、网络设置、日志配置、信任代理等。
15. 如何更改Docker的默认存储位置?
-
Docker的默认存储位置是/var/lib/docker,如果希望将Docker的本地文件存储到其他分区,可以使用Linux软连接的方式来完成。
16. Docker、podman、containerd的相同和不同点?
相同点:
-
这三者都用于管理容器的创建、运行和操作,允许用户在隔离的环境中运行应用程序;
-
Docker、Podman 和containerd都遵循Open Container Initiative (OCI) 的容器镜像和运行时规范,这确保了容器镜像的兼容性和可移植性;
-
它们都支持容器的生命周期管理,包括容器的创建、启动、停止、删除等基本操作;
不同点:
-
Docker是一个全功能的容器平台,包含了容器的创建、运行、构建和编排功能。
-
Podman是一个无守护进程、rootless支持的容器管理工具,强调安全性和对 Pod 的支持。
-
containerd是一个专注于容器运行时的低层次组件,主要用于与其他容器管理工具的集成。
17. 如何将一台宿主主机的 docker 环境迁移到另外一台宿主主机?
-
停止 Docker 服务。将整个 docker 存储文件夹复制到另外一台宿主主机,然后调整另外一台宿主主机的配置即可。
出处:《Docker技术入门与实践》,版权为原作者所有