Docker 教程

Linux 下安装 Docker

下面将介绍如何在 Ubuntu22.04 系统上面安装 Docker 服务,步骤如下:

  • 卸载默认安装的 Docker(或者旧版本 Docker)

  • 安装 Docker 必要依赖或支持工具

  • 添加 Docker 官方 GPG key

  • 添加 APT 源

  • 更新源

  • 安装最新版本 Docker

  • 查看 Docker 版本

  • 查看 Docker 运行状态

  • Docker 仓库地址配置

卸载默认安装的 Docker

执行“sudo apt-get remove docker docker-engine docker.io containerd runc”命令卸载操作系统默认安装的 Docker,或者旧版本 Docker(即 docker-io),如下:

hxstrive@g450:~$ sudo apt-get remove docker docker-engine docker.io containerd runc
[sudo] password for hxstrive: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package docker-engine

安装 Docker 必要依赖或支持工具

执行“sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release”命令,去安装如下依赖工具:

  • apt-transport-https:工具包允许 APT(Advanced Packaging Tool)使用 HTTPS 协议来访问软件仓库。当你需要从支持 HTTPS 的软件源(如一些官方和第三方的软件仓库)安装软件包时,apt-transport-https 是必不可少的。例如,在安装一些需要从特定的安全软件源获取的软件时,就会用到这个工具包。

  • ca-certificates:包含了一组受信任的证书颁发机构(CA)的证书。在使用需要安全连接的软件和服务时,如浏览器访问安全网站、使用安全的软件仓库等,ca-certificates 确保了连接的安全性。如果没有正确安装这些证书,可能会出现连接失败或安全警告。

  • curl一个强大的命令行工具,用于通过各种网络协议(如 HTTP、HTTPS、FTP 等)从服务器下载文件或与服务器进行交互。

  • software-properties-common:提供了用于管理软件仓库的工具和库。当你需要添加一个新的软件源或者更改软件源的设置时,software-properties-common 提供了方便的命令行工具。例如,你可以使用它来添加一个 PPA(Personal Package Archive),以便安装特定的软件版本或获取最新的开发版本。

  • gnupg:GNU Privacy Guard 的缩写,是一个用于加密、签名和验证文件的工具。在安装软件包时,系统会使用 gnupg 来验证软件包的签名,以确保软件的安全性。此外,开发者和用户也可以使用 gnupg 来加密文件、发送加密邮件等,保护敏感信息的安全。

  • lsb-release:提供了有关 Linux 标准基础(Linux Standard Base,LSB)的信息。在一些脚本和软件中,需要根据系统的发行版信息来进行不同的操作。例如,某些软件可能需要根据不同的 Linux 发行版进行特定的配置。lsb-release 可以提供这些信息,使得软件能够更好地适应不同的系统环境。

hxstrive@g450:~$ sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
lsb-release is already the newest version (11.1.0ubuntu4).
...
Processing triggers for gnome-menus (3.36.0-1ubuntu3) ...
Processing triggers for libglib2.0-0:amd64 (2.72.4-0ubuntu2.3) ...
Processing triggers for man-db (2.10.2-1) ...

添加 Docker 官方 GPG key

使用 curl 命令添加 Docker 官方 GPG key ,⚠️注意:目前国内现在访问可能会存在问题,导致无法访问:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

因此,国内推荐使用阿里云的 GPG key(当然,你也可以使用其他国内源),命令如下:

hxstrive@g450:~$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加 APT 源

下面是添加 Docker 官网的 APT 源命令:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

⚠️注意,国内访问可能存在问题,因此,建议使用阿里 APT 源:

hxstrive@g450:~$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新源

前面添加了源地址,接下来使用“apt update”和“apt-get update”命令来更新源:

apt update:

hxstrive@g450:~$ sudo apt update
Hit:1 http://mirrors.aliyun.com/ubuntu jammy InRelease
...                                                                                              
Get:40 http://mirrors.aliyun.com/ubuntu jammy-proposed/multiverse amd64 c-n-f Metadata [400 B]                                                                                              
Fetched 10.1 MB in 8s (1,253 kB/s)                                                                                                                                                          
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
93 packages can be upgraded. Run 'apt list --upgradable' to see them.

apt-get update:

hxstrive@g450:~$ sudo apt-get update
Hit:1 http://mirrors.aliyun.com/ubuntu jammy InRelease
...        
Hit:6 https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy InRelease    
Hit:7 https://packages.redis.io/deb jammy InRelease                        
Reading package lists... Done

安装最新版本的Docker

执行“sudo apt install docker-ce docker-ce-cli containerd.io”命令,安装 Docker:

hxstrive@g450:~$ sudo apt install docker-ce docker-ce-cli containerd.io
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libflashrom1 libftdi1-2
Use 'sudo apt autoremove' to remove them.
...
Setting up docker-ce (5:27.1.1-1~ubuntu.22.04~jammy) ...
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
Setting up git (1:2.34.1-1ubuntu1.11) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.8) ...

查看Docker版本

使用“sudo docker version”命令查看 Docker 版本信息,如下:

hxstrive@g450:~$ sudo docker version
Client: Docker Engine - Community
 Version:           27.1.1
 API version:       1.46
 Go version:        go1.21.12
 Git commit:        6312585
 Built:             Tue Jul 23 19:57:01 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          27.1.1
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.12
  Git commit:       cc13f95
  Built:            Tue Jul 23 19:57:01 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.19
  GitCommit:        2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
 runc:
  Version:          1.7.19
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

查看Docker运行状态

使用“sudo systemctl status docker”命令查看 Docker 运行状态,如下:

hxstrive@g450:~$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-08-09 20:28:35 CST; 4min 16s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 41536 (dockerd)
      Tasks: 8
     Memory: 41.9M
        CPU: 719ms
     CGroup: /system.slice/docker.service
             └─41536 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
8月 09 20:28:34 g450 systemd[1]: Starting Docker Application Container Engine...
8月 09 20:28:34 g450 dockerd[41536]: time="2024-08-09T20:28:34.858760410+08:00" level=info msg="Starting up"
8月 09 20:28:34 g450 dockerd[41536]: time="2024-08-09T20:28:34.861953113+08:00" level=info msg="detected 127.0.0.53 nameserver, assuming systemd-resolved, so using resolv.conf: /run/system>
8月 09 20:28:35 g450 dockerd[41536]: time="2024-08-09T20:28:35.102897252+08:00" level=info msg="Loading containers: start."
8月 09 20:28:35 g450 dockerd[41536]: time="2024-08-09T20:28:35.706991958+08:00" level=info msg="Loading containers: done."
8月 09 20:28:35 g450 dockerd[41536]: time="2024-08-09T20:28:35.766333681+08:00" level=info msg="Docker daemon" commit=cc13f95 containerd-snapshotter=false storage-driver=overlay2 version=2>
8月 09 20:28:35 g450 dockerd[41536]: time="2024-08-09T20:28:35.767030413+08:00" level=info msg="Daemon has completed initialization"
8月 09 20:28:35 g450 dockerd[41536]: time="2024-08-09T20:28:35.845526681+08:00" level=info msg="API listen on /run/docker.sock"
8月 09 20:28:35 g450 systemd[1]: Started Docker Application Container Engine.

Docker 仓库地址配置

由于 Docker 默认的仓库地址在国外,国内访问存在限制,有时可能还不能访问,因此需要使用国内的 Docker 仓库地址进行替换。替换步骤如下:

(1)查看 /etc/docker 下面是否存在 daemon.json 文件,这是一个 JSON 格式的文件。如果存在,则直接修改;如果不存在,则创建一个新的 daemon.json 文件。

(2)将下面内容写入到 daemon.json 文件:

{
    "registry-mirrors": [ "https://docker.m.daocloud.io" ]
}

修改后,使用“sudo systemctl restart docker”重启 Docker 服务。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号