157 lines
9.6 KiB
Markdown
157 lines
9.6 KiB
Markdown
### 准备在Ubuntu上安装Docker
|
||
|
||
你可以在Ubuntu 18.04、20.04、21.10和22.04版本上安装最新的Docker版本。支持x64_64/AMD64、ARMhf、ARM64和S390x架构。
|
||
|
||
有几种方法可以安装Docker,你的选择将取决于你需要的功能和你喜欢的软件包管理方法。你将在本指南中了解所有可能的选项。
|
||
|
||
#### 选择一个Docker Flavor
|
||
|
||
Linux上的Docker传统上是只用终端的。一个正常的安装包括Docker引擎,一个运行容器的守护程序,以及与守护程序互动的 `docker` 命令行界面(CLI)。
|
||
|
||
[Docker桌面](https://www.wbolt.com/go?_=df5dc7c8d0aHR0cHM6Ly93d3cuZG9ja2VyLmNvbS9wcm9kdWN0cy9kb2NrZXItZGVza3RvcA%3D%3D)是使用Docker的另一种方式。历史上只在Windows和Mac上可用,它在2022年5月推出了Linux版。Ubuntu上的Docker Desktop需要一个AMD64处理器和Ubuntu 21.10或22.04。它提供了一个管理容器的图形界面,一个集成的Kubernetes集群,以及对第三方扩展的支持。Docker Desktop还为你提供了 `docker` 和Docker Compose CLI。
|
||
|
||
Docker Desktop与Docker Engine不同,它使用虚拟机来运行你的容器(这就是为什么Windows和MacOS用户需要Docker Desktop)。尽管在Ubuntu上可以并排使用这两个版本,但你可能会发现 `docker` CLI版本之间的冲突。最好是选择一个并坚持使用。如果你对你的终端很满意,并且希望得到最好的支持和性能,那么就选择Docker Engine。Docker Desktop的虚拟机使其略显沉重,但如果你想要一个集成的用户界面或计划使用Kubernetes,则是更好的选择。
|
||
|
||
### 在Ubuntu上安装Docker引擎
|
||
|
||
Docker Engine是在Ubuntu上运行Docker的标准方式。它适用于所有支持的版本和环境,从本地的Ubuntu桌面机到你的Ubuntu服务器云主机。在你继续之前,请确保你运行的Ubuntu版本是18.04或更新的。
|
||
|
||
Docker引擎有3种不同的安装方法:
|
||
|
||
1. 一个官方的Ubuntu `apt` 资源库
|
||
|
||
2. 一个独立的Debian软件包(`.deb`)
|
||
|
||
3. 一个自动安装脚本
|
||
|
||
选项1,即Ubuntu `apt` 软件库,是最常用的。它将Docker添加到你的软件包列表中,这样你就可以通过运行 `apt upgrade` 轻松安装未来的更新。选项2,不支持自动更新,但非常适合在有空气过滤的离线系统上安装Docker。自动安装脚本是最简单的入门方法,但[其配置只适合开发使用](https://www.wbolt.com/go?_=1dc9a57d32aHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL2luc3RhbGwvdWJ1bnR1LyNpbnN0YWxsLXVzaW5nLXRoZS1jb252ZW5pZW5jZS1zY3JpcHQ%3D)。Docker建议不要在生产环境中使用它。
|
||
|
||
当你与生产系统一起工作,想要轻松更新,或需要在所有环境中使用相同的机制时,使用 `apt` 仓库。
|
||
|
||
如果你想在自己的机器上试验Docker时获得快速的安装体验,请使用自动安装脚本。
|
||
|
||
#### 1. 使用apt仓库安装Docker
|
||
|
||
Docker publishes packages to its own `apt` repository. You’ll need to add this repository to your `apt` sources list, otherwise, your `apt` installation won’t be able to find the Docker packages.
|
||
|
||
Docker将软件包发布到自己的 `apt` 仓库。你需要将这个仓库添加到你的 `apt` 源列表中,否则,你的 `apt` 安装将无法找到Docker包。
|
||
|
||
首先,更新你现有的软件包列表,并为下面的步骤安装一些依赖项。 `ca-certificates`, `curl`, `gnupg` 和 `lsb_release` 工具将被用来下载正确的Docker `apt` 仓库细节和你系统的签名密钥。尽管你可能已经有了这些软件包,但确保它们是可用的也无妨。
|
||
|
||
$ sudo apt update
|
||
|
||
$ sudo apt install ca-certificates curl gnupg lsb-release
|
||
|
||
接下来,在apt上注册Docker的GPG密钥圈。这将让 `apt` 验证你安装的Docker包。
|
||
|
||
$ sudo mkdir -p /etc/apt/keyrings
|
||
|
||
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||
|
||
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||
|
||
`curl` 命令为Ubuntu下载Docker的GPG密钥,将其转换为标准的OpenGPG编码,并将其保存到apt的keyring目录中。 `chmod` 用来设置keyring文件的权限,以便 `apt` 能够可靠地检测到它。
|
||
|
||
现在你可以把Docker包的源代码添加到你的系统中。运行下面的命令:
|
||
|
||
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
|
||
这使用shell替换来自动检测你的系统架构,如AMD64或ARM64,并下载相应的软件包列表。它将使用之前添加的GPG密钥进行验证。该软件库被作为一个新的软件包列表添加到 `apt /etc/apt/sources.list.d directory.`中。
|
||
|
||
再次更新你的软件包列表,让 `apt` 知道Docker软件包的存在:
|
||
|
||
$ sudo apt update
|
||
|
||
现在你可以使用 `apt install` 命令将Docker的组件添加到你的系统中。你将会安装最新版本的Docker社区版(CE)。有三个软件包需要安装:
|
||
|
||
- `docker-ce`: Docker引擎守护程序。
|
||
|
||
- `docker-ce-cli`: 你将与之互动的Docker CLI。
|
||
|
||
- `containerd.io`: 被[称为containerd](https://www.wbolt.com/go?_=11e6738913aHR0cHM6Ly9jb250YWluZXJkLmlvLw%3D%3D)的容器运行时间,用于启动和运行你的容器。
|
||
|
||
$ sudo apt install docker-ce docker-ce-cli containerd.io
|
||
|
||
#### 2. 使用Debian Packagers安装Docker
|
||
|
||
官方的 `.deb` 包设置起来很简单,但你必须手动下载和安装每个新版本。软件包被托管在一个[简单的文件服务器](https://www.wbolt.com/go?_=f703ea2518aHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9kaXN0cw%3D%3D)上。首先浏览Docker的[发布说明页面](https://www.wbolt.com/go?_=42b1de2189aHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlbGVhc2Utbm90ZXM%3D),找到最新的可用版本号,比如20.10.20。接下来,[前往containerd的GitHub页面](https://www.wbolt.com/go?_=ef964bbef7aHR0cHM6Ly9naXRodWIuY29tL2NvbnRhaW5lcmQvY29udGFpbmVyZC9yZWxlYXNlcw%3D%3D),也可以查看其版本号。它将看起来像1.6.8。
|
||
|
||
现在你可以运行下面的命令序列,为你的平台下载正确的软件包。将`<DOCKER_VERSION>` 和 `<CONTAINERD_VERSION>` 分别替换为当前Docker和containerd的版本号。
|
||
|
||
$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/docker-ce_<DOCKER_VERSION>~3-0~ubuntu-focal_amd64.deb -o docker-ce.deb
|
||
|
||
$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/docker-ce-cli_<DOCKER_VERSION>~3-0~ubuntu-focal_amd64.deb -o docker-ce-cli.deb
|
||
|
||
$ curl https://download.docker.com/linux/ubuntu/dists/$(lsb_release --codename | cut -f2)/pool/stable/$(dpkg --print-architecture)/containerd.io_<CONTAINERD_VERISON>-1_amd64.deb -o containerd.deb
|
||
|
||
你也可以通过在浏览器中访问你的Ubuntu版本的[目录列表](https://www.wbolt.com/go?_=f703ea2518aHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L3VidW50dS9kaXN0cw%3D%3D)来下载文件并检查所有可用的版本。
|
||
|
||
一旦你下载了Docker CE、CLI和containerd软件包,使用以下命令来安装它们:
|
||
|
||
$ sudo apt install ./docker-ce.deb ./docker-ce-cli.deb ./containerd.deb
|
||
|
||
如果你没有使用上面提供的脚本而手动下载软件包,请调整文件名。
|
||
|
||
#### 3. 使用安装脚本安装Docker
|
||
|
||
Docker的[便利脚本](https://www.wbolt.com/go?_=1dc9a57d32aHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL2luc3RhbGwvdWJ1bnR1LyNpbnN0YWxsLXVzaW5nLXRoZS1jb252ZW5pZW5jZS1zY3JpcHQ%3D)可以自动安装所有Docker组件。它是非交互式的,所以你可以坐下来等待,而你的系统已经为你准备好了。
|
||
|
||
首先下载该脚本:
|
||
|
||
$ curl -fsSL https://get.docker.com -o get-docker.sh
|
||
|
||
现在以root权限运行该脚本:
|
||
|
||
$ sudo sh get-docker.sh
|
||
|
||
Executing docker install script
|
||
|
||
...
|
||
|
||
等到脚本达到完成。你应该看到一条确认信息,显示Docker已经安装。
|
||
|
||
这个脚本是为了提供一个通用的解决方案。如果不直接修改脚本的源代码,你就无法定制它的功能。它也不是为执行Docker更新而设计的,因为它不会将依赖关系更新到最新版本。
|
||
|
||
#### 确保Docker引擎在Ubuntu上运行
|
||
|
||
无论你使用哪种安装方法,你都应该通过启动一个容器来确保一切正常:
|
||
|
||
$ sudo docker run hello-world
|
||
|
||
你会看到Docker客户端将 `hello-world:image` 从Docker Hub仓库拉到你的机器上:
|
||
|
||
Unable to find image 'hello-world:latest' locally
|
||
|
||
latest: Pulling from library/hello-world
|
||
|
||
2db29710123e: Pull complete
|
||
|
||
Digest: sha256:7d246653d0511db2a6b2e0436cfd0e52ac8c066000264b3ce63331ac66dca625
|
||
|
||
Status: Downloaded newer image for hello-world:latest
|
||
|
||
然后,一个新的容器将自动启动。hello-world “的启动镜像被配置为运行一个简单的命令,输出一些关于Docker的基本信息,然后立即退出:
|
||
|
||
Hello from Docker!
|
||
|
||
This message shows that your installation appears to be working correctly.
|
||
|
||
To generate this message, Docker took the following steps:
|
||
|
||
1. The Docker client contacted the Docker daemon.
|
||
|
||
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
|
||
|
||
(amd64)
|
||
|
||
3. The Docker daemon created a new container from that image which runs the
|
||
|
||
executable that produces the output you are currently reading.
|
||
|
||
4. The Docker daemon streamed that output to the Docker client, which sent it
|
||
|
||
to your terminal.
|
||
|
||
看到上面显示的输出意味着Docker已经可以使用了。守护进程成功地从Docker Hub拉出了[hello-world:latest image](https://www.wbolt.com/go?_=2712683cf7aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9fL2hlbGxvLXdvcmxk),并使用它启动了一个容器。从 “Hello from Docker “一行开始的所有内容都是由容器内的进程发出的。
|
||
|