Docker常见问题

Docker常见问题

1.什么Docker

Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。

2.Docker与虚拟机有何不同

A 容器不需要引导操作系统内核,因此可以在不到一秒的时间内创建容器。此功能使基于容器的虚拟化比其他虚拟化方法更加独特和可取。
B 由于基于容器的虚拟化为主机增加了很少或没有开销,因此基于容器的虚拟化具有接近本机的性能。
C 对于基于容器的虚拟化,与其他虚拟化不同,不需要其他软件。
D 主机上的所有容器共享主机的调度程序,从而节省了额外资源的需求。
E 与虚拟机映像相比,容器状态(Docker或LXC映像)的大小很小,因此容器映像很容易分发。
F 容器中的资源管理是通过cgroup实现的。Cgroups不允许容器消耗比分配给它们更多的资源。虽然主机的所有资源都在虚拟机中可见,但无法使用。这可以通过在容器和主机上同时运行top或htop来实现。所有环境的输出看起来都很相似。

3.什么是Docker镜像

Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像。

4.什么是Docker容器

Docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。

5.Docker容器有几种状态

四种状态:运行、已暂停、重新启动、已退出。

6.Dockerfile中最常见的指令是什么

FROM:指定基础镜像
LABEL:功能是为镜像指定标签
RUN:运行指定的命令
CMD:容器启动时要运行的命令
COPY/ADD

7.docker常用命令

docker pull 拉取或者更新指定镜像
docker push 将镜像推送至远程仓库
docker rm 删除容器
docker rmi 删除镜像
docker images 列出所有镜像
docker ps 列出所有容器

8.容器与主机之间的数据拷贝命令

docker cp 命令用于容器与主机之间的数据拷贝
主机到容器:

docker cp /www 96f7f14e99ab:/www/

容器到主机:

docker cp 96f7f14e99ab:/www /tmp/

9.启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令

docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx

10.Docker使用流程

创建Dockerfile后,您可以构建它以创建容器的镜像
推送或拉取镜像。

11.如何批量清理临时镜像文件?

docker rmi $(docker images -q)

12.如何查看镜像支持的环境变量?

docker run IMAGE env

13.本地的镜像文件都存放在哪里?

与Docker相关的本地资源存放在/var/lib/docker/目录下,其中container目录存放容器信息,graph目录存放镜像信息,aufs目录下存放具体的镜像底层文件。

14.构建Docker镜像应该遵循哪些原则?

A:整体原则上,尽量保持镜像功能的明确和内容的精简,要点包括:
B:尽量选取满足需求但较小的基础系统镜像,建议选择debian:wheezy镜像,仅有86MB大小
C:清理编译生成文件、安装包的缓存等临时文件
D:安装各个软件时候要指定准确的版本号,并避免引入不需要的依赖
E:从安全的角度考虑,应用尽量使用系统的库和依赖
F:使用Dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录

15.容器退出后,通过docker ps 命令查看不到,数据会丢失么?

容器退出后会处于终止(exited)状态,此时可以通过 docker ps -a 查看,其中数据不会丢失,还可以通过docker start 来启动,只有删除容器才会清除数据。

16.如何停止所有正在运行的容器?

docker start $(docker ps -q)

17.如何清理批量后台停止的容器?

docker rm $(docker ps -a -q)

18.如何获取某个容器的PID信息?

docker  inspect  --format '{{ .State.Pid }}' 

19.如何获取某个容器的IP地址?

docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress }}' yuanhao

20.如何给容器指定一个固定IP地址,而不是每次重启容器IP地址都会变?

docker run -it --name xingdian --net bridge --ip 172.17.0.2 centos /bin/bash

21.如何临时退出一个正在交互的容器的终端,而不终止它?

Ctrl+p+q

22.很多应用容器都是默认后台运行的,怎么查看它们的输出和日志信息?

docker logs 容器名称或容器id

23.使用docker port 命令映射容器的端口时,系统报错Error: No public port ‘80’ published for …,是什么意思?

创建镜像时Dockerfile要指定正确的EXPOSE的端口

24.可以在一个容器中同时运行多个应用进程吗?

一般不推荐在同一个容器内运行多个应用进程,如果有类似需求,可以通过额外的进程管理机制,比如supervisord来管理所运行的进程

25.如何控制容器占用系统资源(CPU,内存)的份额?

在使用docker create命令创建容器或使用docker run 创建并运行容器的时候,可以使用-c|–cpu-shares[=0]参数来调整同期使用CPU的权重,使用-m|–memory参数来调整容器使用内存的大小。

26.仓库(Repository)、注册服务器(Registry)、注册索引(Index)有何关系?

首先,仓库是存放一组关联镜像的集合,比如同一个应用的不同版本的镜像,注册服务器是存放实际的镜像的地方,注册索引则负责维护用户的账号,权限,搜索,标签等管理。注册服务器利用注册索引来实现认证等管理。

27.从非官方仓库(如:dl.dockerpool.com)下载镜像的时候,有时候会提示“Error:Invaild registry endpoint https://dl.docker.com:5000/v1/…”?

Docker 自1.3.0版本往后以来,加强了对镜像安全性的验证,需要手动添加对非官方仓库的信任。DOCKER_OPTS=”–insecure-registry dl.dockerpool.com:5000”   重启docker服务

28.docker pull 某一个镜像很慢,比如说centos. 这种情况是因为docker官方的镜像库是国外,我们应该配置国内的镜像库或者加速器。

加速器可以用阿里云镜像加速器,进入阿里云网站在控制台可以看到,根据提示来即可。配置文件 /etc/docker/daemon.json 添加如下命令 
DOCKER_NETWORK_OPTIONS="--registry-mirror=https://....."
地址可以为国内镜像地址,也可为公司内网镜像仓库地址。

29.docker push镜像时碰到的443问题,这是因为docker默认会走ssl加密的。

如果是公司内网的,直接在/etc/sysconfig/docker-network 里面添加如下配合DOCKER_NETWORK_OPTIONS=“--insecure-registry xxx-ip”

30.Docker的配置文件放在那里。如何修改配置?

Ubuntu系统下Docker的配置文件是/etc/default/docker,CentOS系统配置文件存放在/etc/sysconfig/docker

31.如何更改Docker的默认存储设置?

Docker的默认存放位置是/var/lib/docker,如果希望将Docker的本地文件存储到其他分区,可以使用Linux软连接的方式来做。

32.Docker与LXC(Linux Container)有何不同?

LXC利用Linux上相关技术实现容器,Docker则在如下的几个方面进行了改进:
移植性:通过抽象容器配置,容器可以实现一个平台移植到另一个平台;
镜像系统:基于AUFS的镜像系统为容器的分发带来了很多的便利,同时共同的镜像层只需要存储一份,实现高效率的存储;
版本管理:类似于GIT的版本管理理念,用户可以更方面的创建、管理镜像文件;
仓库系统:仓库系统大大降低了镜像的分发和管理的成本;
周边工具:各种现有的工具(配置管理、云平台)对Docker的支持,以及基于Docker的Pass、CI等系统,让Docker的应用更加方便和多样化。

你可能感兴趣的:(Linux,docker,docker,linux)