Docker 常见面试题
1. Docker 概述
1.1 Docker 是什么
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
- 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
- 容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
- 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
1.2 Docker 能干什么
- Web 应用的自动打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
虚拟机技术缺点:
- 资源占用过多
- 冗余步骤多
- 启动慢
比较 Docker 和 虚拟机技术的不同:
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件;
- Docker 容器内的应用直接运行在宿主机的内容,容器没有自己的内核,也没有虚拟硬件;
- 每个容器都是相互隔离的,每个容器都有属于自己的文件系统,互不影响。
1.3 Docker 的基本组成
- 镜像:Image,docker 镜像就好比是一个模版,可以通过这个模版来创建容器服务。可以类比 Java 中的类,它本身不具备执行运行的能力,是一个对象抽象的模版。每个模版可以有多个版本,用 tag 来区分。镜像可以通过 Dockerfile 来构建。
- 容器:Container,Docker 运行的最小单位对象。它是通过镜像实例化出来的一个可运行对象。容器的修改,可以通过提交反作用于镜像,更新这个容器的模版。
- 仓库:Repository,用于存储管理镜像的仓库,类似于 git 管理代码的仓库一样,可以管理多版本的镜像。
2. Docker 的基本使用
2.1 镜像相关指令
- 查看本地主机的所用镜像:
docker images
- 搜索镜像:
docker search mysql
- 下载镜像:
docker pull mysql
,没写 tag 就默认下载最新的 lastest - 下载指定版本的镜像:
docker pull mysql:5.7
- 删除镜像:
docker rmi -f 镜像id 镜像id 镜像id
2.2 容器相关的命令
- 运行容器:
docker run [可选参数] image
- 运行并进入容器centos:
docker run -it centos /bin/bash
- 停止并退出容器(后台方式运行则仅退出):
exit
- 退出容器但不停止:
Ctrl + p + q
- 列出所有运行过的容器:
docker ps -a
- 删除容器:
docker rm 容器id
(不能删除运行中的容器) - 强制删除容器,包括运行中的容器:
docker rm -f 容器ID
- 启动和停止容器命令:
docker start 容器id #启动容器 docker restart 容器id #重启容器 docker stop 容器id #停止当前运行的容器 docker kill 容器id #强制停止当前容器
docker 中 run 和 start 的区别是什么
- docker run 相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
- docker start 的作用是,重新启动已存在的镜像。
2.3 常用的其它命令
- 后台启动:
docker run -it centos /bin/bash
- 查看日志:
docker logs
- 查看容器内部进程信息:
docker top 容器id
- 查看镜像的元数据:
docker inspect 容器id
- 进入当前正在进行的容器:
docker exec -it 容器id /bin/bash
docker attach 容器id
exec 进入容器后开启一个新的终端,可以在里面操作(常用)
attach 进入容器正在执行的终端,不会启动新的进程!
- 从容器拷贝文件到主机:
docker cp 容器id:路径 主机路径
- 从主机拷贝文件到容器: