Docker - 安装与配置
Docker 是一个开源的应用容器引擎,基于 GO 语言开发,开发者可以打包应用及依赖包到一个可移植的容器中,然后发布到任何操作系统的机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。
组成部分
- Docker Client:客户端,命令行
- Docker Daemon:服务端守护进程,接受并处理来自客户端的消息
- Docker Image:镜像,相当于面向对象编程 类 的概念
- Docker Container:容器,相当于面向对象编程 对象 的概念
镜像(Docker Images)
一个只读层被称为镜像,一个镜像是永久不会变的。因为 Docker 使用统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的,由于所有的变更都发生在顶层的可写层,所以下层的原始的只读镜像文件并未发生变化。
每一个镜像都可能依赖一个或者由多个下层镜像组成的另一个镜像。
容器(Docker Containers)
镜像运行后的进程。因为 Docker 的容器实在太轻量级了,很多时候用户都是随用随建,用完即删。
仓库(Docker Registry)
集中存放镜像的地方。官方提供公共仓库,也支持搭建私有镜像仓库。
与虚拟机的区别
- 容器与容器之间只是进程隔离,而虚拟机是完全的资源隔离;
- 虚拟机的启动需要分钟级别,Docker 启动是秒级或者更短;
- 容器共享宿主操作系统的内核,减少内核的开销;而虚拟机使用完全独立的内核。
优点
- 快速交付应用:应用打包、部署、测试、交付流程自动化,缩短开发交付周期;
- 复杂环境管理:不同软件版本运行兼容和依赖问题;环境快速复制的能力;
- 轻量:对于系统内核来说,Docker 只是一个进程,一个系统可以运行上千个容器。
安装
1. 查看服务器发行版本
$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
2. 查看服务器内核版本
# Docker 要求 CentOS 内核版本高于 3.10
$ uname -a
3.10.0-1160.el7.x86_64
3. 下载对应依赖包
# -y 不询问直接安装
$ yum install -y yum-utils device-mapper-persistent-data lvm2
...
Complete!
yum-utils 包提供yum-config-manager
命令,该命令是对资源库(/etc/yum.repos.d/)进行增删改查,用于设置下载源。系统默认没有安装。
Device Mapper 是一个基于内核的框架,它支持 Linux 上的许多高级卷管理技术。Docker 的 devicemapper 存储驱动程序利用此框架的精简配置和快照功能来进行映像和容器管理。
devicemapper requires the lvm2 and device-mapper-persistent-data packages to be installed.
4. 设置 docker 下载源
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
...
repo saved to /etc/yum.repos.d/docker-ce.repo
5. 下载安装 docker
$ yum -y install docker-ce
docker-ce.x86_64 3:20.10.12-3.el7
...
Complete!
6. 验证 docker 安装成功
# 查看版本信息
$ docker version
Client: Docker Engine - Community
...
Server: Docker Engine - Community
...
# 查看系统信息
$ dcoker info
...
7. 设置开机自启动
# centOS
$ systemctl start docker
$ systemctl enable docker
- ubantu 自动启动,无需设置
- MacOS 和 Windows 通过桌面版启动
8. 配置镜像仓库国内源
# 阿里云需要自己去申请,xxx 为申请的 key
# https://account.aliyun.com
# 将源地址写入配置文件
$ tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":[
"https://xxx.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
EOF
# 重启生效
$ systemctl daemon-reload
$ systemctl restart docker
# 验证源
$ docker info
...
Registry Mirrors:
https://xxx.mirror.aliyuncs.com/
https://registry.docker-cn.com/
http://hub-mirror.c.163.com/