Docker官网: Docker
DockerHub: Docker Hub
菜鸟课程:菜鸟课程
Docker学习文档:Docker文档
Docker学习 B站 B站视频
-
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
-
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 容器通过 Docker 镜像来创建
下载 Docker for Mac
Docker容器的本质是宿主机上的进程,与宿主机共享宿主机的内核,不是共享操作系统
下图为传统虚拟机的运行模式:
下图为容器化技术,即为Docker:
比较 Docker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件;
- 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了 ;
- 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响;
Docker的安装与卸载
安装方法 https://docs.docker.com/engine/install/centos/#install-using-the-repository
您可以根据需要以不同的方式安装 Docker Engine:
- 大多数用户 设置 Docker 的存储库并从中安装,以便于安装和升级任务。这是推荐的方法。
- 一些用户下载 RPM 包并 手动安装它并完全手动管理升级。这在诸如在无法访问 Internet 的气隙系统上安装 Docker 等情况下很有用。
- 在测试和开发环境中,一些用户选择使用自动化 便利脚本来安装 Docker。
使用存储库安装
在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。
设置存储库
安装yum-utils
包(提供yum-config-manager
实用程序)并设置稳定的存储库(这里的sudo 是指最高权限)。
# 安装环境
sudo yum install -y yum-utils
# 设置镜像仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云仓库
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum 软件包索引
sudo yum makecache fast
# 安装 Docker 引擎(最新版)
# 安装最新版本的 Docker Engine 和 containerd,或者进入下一步安装特定版本:
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动Docker
sudo systemctl start docker
# 查看Docker 版本信息
docker version
# 运行一下docker Hello world 这里也是一个测试容器
docker run hello-world
# 查看镜像
docker images
# 卸载 Docker 引擎
# 卸载 Docker 引擎、CLI 和 Containerd 软件包:
sudo yum remove docker-ce docker-ce-cli containerd.io
# 主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 您必须手动删除任何已编辑的配置文件(这里官方并未详细说明)。
# 将 Docker 配置为开机启动
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
# 要禁用此行为,请disable改用。
sudo systemctl disable docker.service
sudo systemctl disable containerd.service
# 阿里云镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
卸载 https://docs.docker.com/engine/install/centos/#uninstall-old-versions
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Hello world 的执行流程(docker run hello-world)
Docker的底层原理
Docker 是怎么工作的
Docker是一个client- Server结构的系统, Docker的守护进程运行在主机上.通过 Socket从客户端访问
Docker Server接收到 Docker-Client的指令,就会执行这个命令!
Docker 为什么比虚拟机(VM)快
优势
(1)Docker有着比虚拟机更少的抽象层。由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上Docker将会在效率上有优势,具体的效率对比在下几个小节里给出。在IO设备虚拟化上,Docker的镜像管理有多种方案,比如利用Aufs文件系统或者Device Mapper实现Docker的文件管理,各种实现方案的效率略有不同。
(2)Docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。我们知道,引导、加载操作系统内核是一个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而Docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个Docker容器只需要几秒钟。另外,现代操作系统是复杂的系统,在一台物理机上新增加一个操作系统的资源开销是比较大的,因此,Docker对比虚拟机在资源消耗上也占有比较大的优势。事实上,在一台物理机上我们可以很容易建立成百上千的容器,而只能建立几个虚拟机。
劣势
1.资源隔离方面不如虚拟机,Docker是利用cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。
2.安全性问题。Docker目前并不能分辨具体执行指令的用户,只要一个用户拥有执行Docker的权限,那么他就可以对Docker的容器进行所有操作,不管该容器是否是由该用户创建。比如A和B都拥有执行Docker的权限,由于Docker的server端并不会具体判断Docker cline是由哪个用户发起的,A可以删除B创建的容器,存在一定的安全风险。
3.Docker目前还在版本的快速更新中,细节功能调整比较大。一些核心模块依赖于高版本内核,存在版本兼容问题
Docker容器 | 虚拟机(VM) | |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行宿主机OS |
存储大小 | 镜像小,便于存储与传输 | 镜像庞大(vmdk等) |
运行性能 | 几乎无额外性能损失 | 操作系统额外的cpu、内存消耗 |
移植性 | 轻便、灵活、适用于Linux | 笨重、与虚拟化技术耦合度高 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |