Docker基础知识 (1) - Docker 架构、Docker 安装、Docker 镜像加速
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker 能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,可以大大减少编写代码和在生产环境中运行代码之间的延迟。
Docker 的应用场景:
(1) Web 应用的自动化打包和发布。
(2) 自动化测试和持续集成、发布。
(3) 在服务型环境中部署和调整数据库或其他的后台应用。
(4) 编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 的优点:
(1) 快速、一致地交付应用程序
(2) 响应式部署和扩展
(3) 在同一硬件上运行更多工作负载
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),一般使用社区版就可以了。
Docker:https://www.docker.com
Docker Github:https://github.com/docker/docker-ce
1. Docker 架构
Docker 包括三个基本概念:
(1) 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
(2) 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
(3) 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
Docker 容器通过 Docker 镜像来创建,容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
容器 | 对象 |
镜像 | 类 |
Docker 相关的一些概念,见下表。
概念 | 描述 |
镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Registry |
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。 我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Machine |
Docker Machine 是一个简化 Docker 安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装 Docker, 比如 VirtualBox、 Digital Ocean、Microsoft Azure。 |
2. Docker 安装
1) CentOS 7 下安装
Docker 支持以下的 64 位 CentOS 版本:
更高版本 ...
CentOS 8
CentOS 7
Docker 要求 CentOS 系统的内核版本高于 3.08,通过 uname -r 命令查看当前内核版本。
$ uname -r
3.10.0-1160.el7.x86_64
确保 yum 包更新到最新。
$ yum update
使用官方安装脚本自动安装:
$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
如果自动安装不成功,可以手动安装,步骤如下。
(1) 卸载旧版本
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
(2) 设置 Docker 仓库
安装所需的软件包,yum-utils 提供了 yum-config-manager,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
使用官方仓库地址(访问速度比较慢):
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
使用阿里云仓库地址:
$ sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
使用清华仓库地址:
$ sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
(3) 安装 Docker Engine-Community
a) 安装默认版本
$ sudo yum install docker-ce docker-ce-cli containerd.io
如果提示您接受 GPG 密钥,选择:y。
Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。
b) 安装指定版本
列出并排序存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
$ sudo yum list docker-ce --showduplicates | sort -r
1 * updates: mirrors.aliyun.com 2 Loading mirror speeds from cached hostfile 3 Loaded plugins: fastestmirror, langpacks 4 Installed Packages 5 * extras: mirrors.aliyun.com 6 docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable 7 docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable 8 docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable 9 docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable 10 docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable 11 12 ... 13 14 docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable 15 docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable 16 docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable 17 docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable 18 docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable 19 20 ... 21 22 * base: mirrors.aliyun.com 23 Available Packages
通过软件包名称安装指定版本,软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1。
$ sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
(4) 启动 Docker
启动 Docker,运行如下命令:
$ sudo systemctl start docker
查看 docker 镜像列表,运行如下命令:
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
非 root 用户启动 Docker:
将非 root 用户添加至 docker 用户组,加入 docker 用户组后,非 root 用户可以不用 sudo 启动 docker。
# 将当前登陆的非 root 用户加入到 docker 用户组中
$ sudo gpasswd -a $USER docker
# 更新用户组
$ newgrp docker
$ systemctl start docker
注:使用命令 sudo groupadd 'groupname' 来添加用户组。
(5) 卸载 docker
删除安装包:
$ sudo yum remove docker-ce
删除镜像、容器、配置文件等内容:
$ sudo rm -rf /var/lib/docker
2) Ubuntu 18.04 下安装
Docker Engine-Community 支持以下的 Ubuntu 版本:
更高版本 ...
Disco 19.04
Cosmic 18.10
Bionic 18.04 (LTS)
Xenial 16.04 (LTS)
Docker Engine - Community 支持上 x86_64(或 amd64)armhf,arm64,s390x (IBM Z),和 ppc64le(IBM的Power)架构。
更新 apt 包索引。
$ sudo apt-get update
使用官方安装脚本自动安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
如果自动安装不成功,可以手动安装,步骤如下。
(1) 卸载旧版本
Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
$ sudo apt-get remove docker docker-engine docker.io containerd runc
当前称为 Docker Engine-Community 软件包 docker-ce。
(2) 设置 Docker 仓库
安装 apt 依赖包,用于通过 HTTPS 来获取仓库:
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加 Docker 的官方 GPG 密钥:
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。
$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S]
使用以下指令设置稳定版仓库
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) \
stable"
注:这里使用国内镜像站 https://mirrors.ustc.edu.cn,如果无法安装,可以尝试替换为 http://mirrors.tuna.tsinghua.edu.cn 或 https://mirrors.aliyun.com 。
(3) 安装 Docker Engine-Community
a) 安装默认版本
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
b) 安装指定版本
列出本地仓库中可用的版本:
$ apt-cache madison docker-ce
docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages docker-ce | 18.06.1~ce~3-0~ubuntu | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages docker-ce | 18.06.0~ce~3-0~ubuntu | https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu xenial/stable amd64 Packages ...
使用第二列中的版本字符串安装特定版本,例如 5:18.09.1~3-0~ubuntu-xenial。
$ sudo apt-get install docker-ce=5:18.09.1~3-0~ubuntu-xenial docker-ce-cli=5:18.09.1~3-0~ubuntu-xenial containerd.io
正常情况下安装完 Docker Engine-Community 之后,就可以运行 docker 命令,比如查看镜像列表,运行如下命令:
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
注:将非 root 用户添加至 docker 用户组,非 root 用户可以不用 sudo 运行 docker 命令。可以运行如下命令:
# 将当前登陆的非 root 用户加入到 docker 用户组
$ sudo gpasswd -a $USER docker
# 更新 docker 用户组
$ newgrp docker
(4) 卸载 Docker
删除安装包:
$ sudo apt-get purge docker-ce
删除镜像、容器、配置文件等内容:
$ sudo rm -rf /var/lib/docker
(5) 升级 Docker
安装运行一段时间后,可以运行如下命令更新 Docker 版本:
$ sudo apt-get update
$ sudo apt-get upgrade docker-ce docker-ce-cli
3) macOS 10.13 下安装
(1) 使用 Homebrew 安装
Homebrew 的 Cask 支持 Docker for Mac,可以使用 Homebrew Cask 来进行安装,命令如下:
$ brew install --cask --appdir=/Applications docker
==> Creating Caskroom at /usr/local/Caskroom ==> We'll set permissions properly so we won't need sudo in the future Password: # 输入 macOS 密码 ==> Satisfying dependencies ==> Downloading https://download.docker.com/mac/stable/21090/Docker.dmg ######################################################################## 100.0% ==> Verifying checksum for Cask docker ==> Installing Cask docker ==> Moving App 'Docker.app' to '/Applications/Docker.app'. 🍺 docker was successfully installed!
在载入 Docker app 后,点击 Next,可能会询问你的 macOS 登陆密码,你输入即可。之后会弹出一个 Docker 运行的提示窗口,状态栏上也有有个小鲸鱼的图标()。
(2) 手动下载安装
点击以下链接下载 Install Docker Desktop on Mac:
https://docs.docker.com/docker-for-mac/install/
同 macOS 其它软件一样,安装也非常简单,双击下载的 .dmg 文件,然后将鲸鱼图标拖拽到 Application 文件夹即可。
从应用中找到 Docker 图标并点击运行。可能会询问 macOS 的登陆密码,输入即可。
3. Docker 镜像加速
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
(1) 阿里云:https://<你的ID>.mirror.aliyuncs.com
(2) 网易:https://hub-mirror.c.163.com/
(3) 七牛云加速器:https://reg-mirror.qiniu.com
(4) 科大镜像:https://docker.mirrors.ustc.edu.cn/
当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址。
1) Ubuntu14.04、Debian7Wheezy
对于使用 upstart 的系统而言,编辑 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中配置加速器地址:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
重新启动服务:
$ sudo service docker restart
2) Ubuntu16.04+、Debian8+、CentOS7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
{"registry-mirrors":["https://hub-mirror.c.163.com/","https://reg-mirror.qiniu.com","https://docker.mirrors.ustc.edu.cn/"]}
重新启动服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
3) macOS
在任务栏点击 Docker for mac 应用图标 -> Perferences ... -> Daemon -> Registry mirrors。在列表中填写加速器地址即可。修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。
4) 检查加速器是否生效
检查加速器是否生效配置加速器之后,可以手动检查加速器配置是否生效,运行如下命令:
$ sudo docker info
...
Registry Mirrors:
https://hub-mirror.c.163.com/
https://reg-mirror.qiniu.com/
4. Docker 资源
1) Docker 官方
Docker 主页: https://www.docker.com
Docker 博客: https://blog.docker.com/
Docker 文档: https://docs.docker.com/
Docker Store: https://store.docker.com
Docker Cloud: https://cloud.docker.com
Docker Hub: https://hub.docker.com
Docker 的源代码仓库: https://github.com/moby/moby
Docker 发布版本历史: https://docs.docker.com/release-notes/
Docker 常见问题: https://docs.docker.com/engine/faq/
Docker 远端应用 API: https://docs.docker.com/develop/sdk/
2) Docker 国内镜像
官方镜像:https://registry.docker-cn.com
网易镜像:http://hub-mirror.c.163.com
中科大镜像:https://docker.mirrors.ustc.edu.cn
阿里云镜像:https://help.aliyun.com/document_detail/60750.html(注册后使用)
道客云镜像:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)