Docker 教程
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 的优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
- 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
- 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
- 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
- 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
Docker 架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker 引擎
3 个更新渠道: stable, test和 nightly:
Stable 渠道提供给你最新可用的稳定版本。
Test 渠道提供了在发布之前的预览,被用于 general availability (GA) 之前的测试。
Nightly 渠道在针对下一个主要发行版本的每天晚间自动构建包。稳定版
在 CentOS 上安装 Docker 引擎
要在 CentOS 上开始使用 Docker Engine,请确保 满足先决条件,然后 安装 Docker。
先决条件
操作系统要求
要安装 Docker 引擎,您需要 CentOS 7 或 8 的维护版本。不支持或测试存档版本。
该centos-extras
库必须启用。默认情况下启用此存储库,但如果您已禁用它,则需要 重新启用它。
overlay2
推荐使用存储驱动。
内核要求
centOs7内核要求3.0以上
uname -srm
Linux 3.10.0-327.el7.x86_64 x86_64
卸载旧版本
旧版本的 Docker 被称为docker
或docker-engine
。如果安装了这些,请卸载它们以及相关的依赖项。
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
如果yum
报告没有安装这些软件包,那也没关系。
的内容/var/lib/docker/
,包括图像、容器、卷和网络,将被保留。Docker 引擎包现在被称为docker-ce
.
安装方法
您可以根据需要以不同方式安装 Docker Engine:
- 大多数用户 设置 Docker 的存储库并从中安装,以便于安装和升级任务。这是推荐的方法。
- 一些用户下载 RPM 包并 手动安装并完全手动管理升级。这在诸如在无法访问互联网的气隙系统上安装 Docker 等情况下非常有用。
- 在测试和开发环境中,一些用户选择使用自动化的 便捷脚本来安装 Docker。
使用仓库安装
在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker。
设置仓库
安装yum-utils
包(提供yum-config-manager
实用程序)并设置稳定存储库。
$ 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
清华大学源
$ sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
可选:启用夜间或测试存储库。
这些存储库包含在
docker.repo
上面的文件中,但默认情况下是禁用的。您可以在稳定存储库旁边启用它们。以下命令启用夜间存储库。
$ sudo yum-config-manager --enable docker-ce-nightly
要启用测试通道,请运行以下命令:
$ sudo yum-config-manager --enable docker-ce-test
您可以通过运行带有标志的命令来禁用夜间或测试存储库 。要重新启用它,请使用该标志。以下命令禁用夜间存储库。
yum-config-manager``--disable``--enable
$ sudo yum-config-manager --disable docker-ce-nightly
安装 Docker 引擎
安装最新版本的 Docker Engine 和 containerd
安装最新版本的 Docker Engine 和 containerd,或者进入下一步安装特定版本:
$ sudo yum install docker-ce docker-ce-cli containerd.io
如果提示接受 GPG 密钥,请验证指纹是否匹配060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
,如果匹配 ,请接受。
有多个 Docker 存储库?
如果您启用了多个 Docker 存储库,则在
yum install
或yum update
命令中未指定版本的情况下安装或更新始终会安装可能的最高版本,这可能不适合您的稳定性需求。
此命令会安装 Docker,但不会启动 Docker。它还会创建一个 docker
组,但是,默认情况下它不会向该组添加任何用户。
要安装特定版本的 Docker Engine(本人采用方式),
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
请在 repo 中列出可用版本,然后选择并安装一种。列出并排序您的存储库中可用的版本。此示例按版本号对结果进行排序,从高到低,并被截断:
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
返回的列表取决于启用了哪些存储库,并且特定于您的 CentOS 版本(.el7
在本示例中由后缀表示)。
湾 通过完全限定的包名称安装特定版本,即包名称 ( docker-ce
) 加上从第一个冒号 ( :
)开始的版本字符串(第 2 列),直到第一个连字符,由连字符 ( -
)分隔。例如,docker-ce-18.09.1
。
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
# yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
对应版本如下
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
此命令会安装 Docker,但不会启动 Docker。它还会创建一个 docker
组,但是,默认情况下它不会向该组添加任何用户。
- 启动 Docker。
$ sudo systemctl start docker
- 通过运行
hello-world
映像验证 Docker Engine 是否已正确安装。$ sudo docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
这将安装并运行 Docker 引擎。使用sudo
运行泊坞窗命令。继续Linux postinstall以允许非特权用户运行 Docker 命令和其他可选配置步骤。
升级 Docker 引擎
要升级 Docker Engine,请按照安装说明进行操作,选择要安装的新版本。
从包安装
如果您无法使用 Docker 的存储库来安装 Docker,您可以下载该.rpm
版本的 文件并手动安装。每次要升级 Docker Engine 时都需要下载一个新文件。
- 前往https://download.docker.com/linux/centos/ 并选择您的 CentOS 版本。然后浏览
x86_64/stable/Packages/
并下载.rpm
要安装的 Docker 版本的文件。笔记
要安装每晚或测试(预发布)包,
stable
请将上述 URL 中的单词更改为nightly
或test
。 了解nightly和test频道。
- 安装 Docker Engine,将下面的路径更改为您下载 Docker 包的路径。
$ sudo yum install /path/to/package.rpm
Docker 已安装但未启动。该docker
组被创建,但没有用户添加到组。
- 启动 Docker。
$ sudo systemctl start docker
- 通过运行
hello-world
映像验证 Docker Engine 是否已正确安装。$ sudo docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条消息并退出。
这将安装并运行 Docker 引擎。使用sudo
运行泊坞窗命令。继续Linux 的安装后步骤以允许非特权用户运行 Docker 命令和其他可选配置步骤。
升级 Docker 引擎
要升级 Docker Engine,请下载更新的包文件并重复 安装过程,使用yum -y upgrade
代替yum -y install
,并指向新文件。
使用便利脚本安装
Docker 在get.docker.com 上提供了一个方便的脚本,可以快速且非交互地将 Docker 安装到开发环境中。不建议将便捷脚本用于生产环境,但可以用作示例来创建适合您需求的配置脚本。另请参阅使用存储库安装 步骤以了解使用软件包存储库进行安装的安装步骤。该脚本的源代码是开源的,可以docker-install
在 GitHub 上的 存储库中找到。
在本地运行之前,请务必检查从 Internet 下载的脚本。在安装之前,让自己熟悉便利脚本的潜在风险和限制:
- 脚本需要
root
或sudo
特权才能运行。 - 该脚本尝试检测您的 Linux 发行版和版本并为您配置包管理系统,并且不允许您自定义大多数安装参数。
- 该脚本无需确认即可安装依赖项和建议。这可能会安装大量软件包,具体取决于主机的当前配置。
- 默认情况下,该脚本会安装 Docker、containerd 和 runc 的最新稳定版本。使用此脚本配置机器时,可能会导致 Docker 的主要版本意外升级。在部署到生产系统之前,始终在测试环境中测试(主要)升级。
- 该脚本并非旨在升级现有的 Docker 安装。使用脚本更新现有安装时,依赖项可能不会更新到预期版本,从而导致使用过时的版本。
提示:运行前预览脚本步骤
您可以运行带有
DRY_RUN=1
选项的脚本以了解脚本在安装过程中将执行的步骤:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ DRY_RUN=1 sh ./get-docker.sh
此示例从get.docker.com下载脚本 并运行它以在 Linux 上安装 Docker 的最新稳定版本:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
<...>
安装了 Docker。该docker
服务在基于 Debian 的发行版上自动启动。在RPM
基于发行版的发行版上,例如 CentOS、Fedora、RHEL 或 SLES,您需要使用适当的systemctl
orservice
命令手动启动它。如消息所示,默认情况下,非 root 用户无法运行 Docker 命令。
以非特权用户身份使用 Docker,还是以无根模式安装?
安装脚本需要
root
或sudo
具有安装和使用 Docker 的权限。如果要授予非 root 用户访问 Docker 的权限,请参阅 Linux 的安装后步骤。Docker 也可以在没有root
特权的情况下安装,或配置为在无根模式下运行。有关在无根模式下运行 Docker 的说明,请参阅以 非 root 用户身份运行 Docker 守护进程(无根模式)。
安装预发行版
Docker 还在test.docker.com 上提供了一个方便的脚本来在 Linux 上安装 Docker 的预发布版本。此脚本与 中的脚本等效get.docker.com
,但将您的包管理器配置为从我们的包存储库启用“测试”通道,其中包括 Docker 的稳定版和预发布版(测试版、候选发布版)。使用此脚本可以提前访问新版本,并在它们稳定发布之前在测试环境中对其进行评估。
要从“测试”频道在 Linux 上安装最新版本的 Docker,请运行:
$ curl -fsSL https://test.docker.com -o test-docker.sh
$ sudo sh test-docker.sh
<...>
使用便利脚本后升级 Docker
如果您使用便利脚本安装 Docker,则应直接使用您的包管理器升级 Docker。重新运行便利脚本没有任何好处,如果它尝试重新添加已经添加到主机的存储库,它可能会导致问题。
卸载 Docker 引擎
- 卸载 Docker Engine、CLI 和 Containerd 包:
$ sudo yum remove docker-ce docker-ce-cli containerd.io
- 主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有镜像、容器和卷:
$ sudo rm -rf /var/lib/docker
$ sudo rm -rf /var/lib/containerd
您必须手动删除任何已编辑的配置文件。
Compose 安装
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。
运行以下命令以下载 Docker Compose 的当前稳定版本:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
显示下载路径【linux】
# echo https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)
# https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
要安装其他版本的 Compose,请替换 1.24.1。
将可执行权限应用于二进制文件:
$ sudo chmod +x /usr/local/bin/docker-compose
创建软链:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
$ docker-compose --version
cker-compose version 1.24.1, build 4667896b
注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。Compose 安装
Linux
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。
运行以下命令以下载 Docker Compose 的当前稳定版本:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安装其他版本的 Compose,请替换 1.24.1。
将可执行权限应用于二进制文件:
$ sudo chmod +x /usr/local/bin/docker-compose
创建软链:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
$ docker-compose --version
cker-compose version 1.24.1, build 4667896b
注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。
docker compose 安装 gitea
Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。
由于码云对免费企业版进行了人数限制,公司需要自建git服务,经对比,从gitlab,gogs和gitea中选中gitea
本安装教程依赖于docker compose
,如未安装,请阅读 CentOS 7安装 docker compose教程
新建docker-compose.yml
version: "2"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
environment:
- USER_UID=1000
- USER_GID=1000
- DB_TYPE=mysql
- DB_HOST=db:3306
- DB_NAME=gitea
- DB_USER=gitea
- DB_PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: mysql:5.7
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
MYSQL_DATABASE=gitea
networks:
- gitea
lumes:
- ./mysql:/var/lib/mysql
根据实际情况进行修改,例如,mac上没有/etc/timezone和/etc/localtime,所以需要手动设置时区;另外由于系统使用了mysql8,所以需要升级mysql,修改后如下:
version: "2"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
environment:
- USER_UID=1000
- USER_GID=1000
- DB_TYPE=mysql
- DB_HOST=db:3306
- DB_NAME=gitea
- DB_USER=gitea
- DB_PASSWD=gitea
- TZ=Asia/Shanghai
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: mysql:8.0.20
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
MYSQL_DATABASE=gitea
networks:
- gitea
lumes:
- ./mysql:/var/lib/mysql
运行
docker-compose -f docker-compose.yml up -d
安装
访问http://localhost:3000/,点击右上角`登录`,进入安装界面,数据库等配置不用改,其他根据自身情况填写,填写完成后点击`立即安装`
使用
点击注册,注册完成后即可登录,效果如下: