一、镜像相关
-
如何备份系统中所有的镜像? 答首先, 备份镜像列表可以使用docker images | awk 'NR>l{prin七2} ' | sort > images.list。 导出所有镜像为当前目录下文件, 可以使用如下命令:
while read img; do echo {img///-}" sudo docker save --output img done< images.list
将本地镜像文件导入为Docker镜像:
while read img; do
echo $img
file="${img/\//-}"
docker load< $file.tar
done< images.list
2. 如何批量清理临时镜像文件? 答:可以使用docker rmi $(docker images -q -f dangling = rue)命令。
-
如何删除所有本地的镜像? 答: 可以使用docker rmi -f $(docker images -q)命令。
-
如何清理Docker系统中的无用数据? 答:可以使用docker system prune --volumes -f命令, 这个命令会自动清理处于停止状态的容器、 无用的网络和挂载卷、 临时镜像和创建镜像缓存。
-
构建Docker镜像应该遵循哪些原则? 答:整体原则上, 尽量保待镜像功能的明确和内容的精简, 避免添加额外文件和操作步骤, 要点包括:
尽量选取满足需求但较小的基础系统镜像, 例如大部分时候可以选择debian:
- wheezy或debian:jessie镜像, 仅有不足百兆大小;
- 清理编译生成文件、 安装包的缓存等临时文件;
- 安装各个软件时候要指定准确的版本号, 并避免引入不需要的依赖;
- 从安全角度考虑, 应用要尽量使用系统的库和依赖;
- 如果安装应用时候需要配置一些特殊的环境变量, 在安装后要还原不需要保持的变量值;
- 使用 Dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录;
- 区分编译环境容器和运行时环境容器, 使用多阶段镜像创建。
二、容器相关
-
容器退出后, 通过docker ps命令查看不到,数据会丢失么? 答:容器退出后会处于终止(exited)状态, 此时可以通过docker ps -a查看。 其中的数据也不会丢失, 还可以通过docker [container] start命令来启动它。 只有删除掉容器才会清除所有数据。
-
如何停止所有正在运行的容器? 答:可以使用docker [container] stop $(docker ps -q)命令。
-
如何获取某个容器的PIO信息? 答:可以使用docker [container] inspect --format ' {{ . State.Pid }} '< CONTAINER ID or NAME>命令。
-
如何临时退出一个正在交互的容器的终端, 而不终止它? 答:按ctrl-p Ctrl-q。 如果按ctrl-c往往会让容器内应用进程终止, 进而会终止容器。
-
如何控制容器占用系统资源(CPU、内存)的份额? 答:在使用docker [container] create命令创建容器或使用docker [container] run 创建并启动容器的时候, 可以使用-c | - cpu -shares[=O]参数来调整容器使用 CPU 的权重;使用-ml-memory[=MEMORY]参数来调整容器使用内存的大小。
三、仓库相关
- 仓库(Repository)、 注册服务器(Registry)、 注册索引(Index)有何关系? 答:仓库是存放一组关联镜像的集合,比如同一个应用的不同版本的镜像。注册服务器是存放实际的镜像文件的地方。注册索引则负责维护用户的账号、权限、搜索、标签等的管理。因此,注册服务器利用注册索引来实现认证等管理。
四、配置相关
-
Docker的配置文件放在哪里, 如何修改配置? 答:使用upstart 的系统(如Ubuntu 16.04)的配置文件在/etc/default/docker, 使用systemd的系 统(如Ubuntu 16.04、Centos等)的配置文件在/etc/systemd/system/dockerservice.d/docker.conf。 Ubuntu下面的配置文件内容如下, 读者可以参考配置(如果出现该文件不存在的情况,重启或者自己新建一个文件都可以解决):
Customize location of Docker binary (especially for development testing) .
#DOCKERD="/usr/local/bin/dockerd"
Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
#if you need Docker to use an HTTP proxy, it can also be specified here. #export http_proxy="http://127.0.0.1:3128/"
This is also a handy place to tweak where Docker's temporary files go.
#export TMPDIR="/mnt/bigdrive/docker-tmp"
五、Docker与虚拟化
- Docker与LXC (Linux Container)有何不同? 答:LXC利用Linux上相关技术实现了容器支持; Docker早期版本中使用了LXC技术,后期演化为新的libcontainer,
在如下的几个方面进行了改进:
- 移植性: 通过抽象容器配置, 容器可以实现从一个平台移植到另一个平台;
- 镜像系统: 基于AUFS的镜像系统为容器的分发带来了很多的便利, 同时共同的镜像层只需要存储一份,实现高效率的存储;
- 版本管理: 类似于Git的版本管理理念, 用户可以更方便地创建、 管理镜像文件;
- 仓库系统: 仓库系统大大降低了镜像的分发和管理的成本;
- 周边工具: 各种现有工具(配置管理、 云平台)对Docker的支持, 以及基于Docker 的PaaS、CI等系统, 让Docker的应用更加方便和多样化。
六、其他方面
- Docker能在非Linux平台(比如macOS或Windows)上运行么? 答:可以。 macOS目前需要使用 docker for mac等软件创建一个轻量级的Linux虚拟机层。 由于成熟度不高,暂时不推荐在Windows环境中使用Docker。