如何在 Ubuntu 上使用 Docker 管理 Linux 容器
虽然 KVM、Xen 或 Hyper-V 等全硬件虚拟化非常适合在物理主机上运行多个操作系统的完全隔离的实例,但它在性能、资源和配置时间方面带来了各种开销。根据您的使用案例,全机虚拟化实际上可能没有必要。
另一种轻量级虚拟化方法是所谓的 Linux 容器 (LXC),它提供操作系统级虚拟化。无需运行虚拟机的开销,LXC 允许您在轻量级容器沙箱中运行完整 Linux 操作系统的多个实例。当您设置可重复的开发/测试环境或在安全沙箱中部署应用程序时,容器非常有用。
Docker 是一个开源工具,旨在促进 Linux 容器的部署。 Docker 正在迅速成为容器技术事实上的标准,并被 Ubuntu 和 Red Hat 等主要 Linux 发行版所采用。
在本教程中,我将演示如何在 Ubuntu 18.04 LTS 上使用 Docker 管理 Linux 容器。请注意,早期版本的 Ubuntu 的说明可能略有不同。如果您想在 Fedora 或 CentOS 上尝试 Docker,请参阅本教程。
目前,Ubuntu 上提供的 Docker 软件包仅支持 64 位系统。要在 32 位计算机上运行它,您需要从源代码构建 32 位版本的 Docker。
安装 Docker
Docker 在基本 Ubuntu 存储库中以 docker.io 形式提供(由于与名为“docker”的系统托盘应用程序的命名冲突)。但是,建议您按照本文所述从官方来源安装最新稳定版本的 Docker。
第一步是在 Ubuntu 系统上安装依赖项并配置官方 Docker 存储库:
$ sudo apt update
$ sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt update
最后,使用 apt 命令安装 Docker。
$ sudo apt install -y docker-ce
要允许非root用户运行Docker,请将您自己添加到docker
组。下面的命令将允许当前用户在没有 root 权限的情况下运行 Docker。
$ sudo usermod -a -G docker $USER
注销并重新登录以激活组成员身份更改。
可选:为 Docker 添加代理配置
如果您需要在 HTTP 代理后面使用 Docker,请按以下步骤操作。如果您没有代理,请跳过此步骤。
为代理创建一个 systemd
配置文件:
$ sudo mkdir /etc/systemd/system/docker.service.d
$ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://<your-proxy-IP-address:proxy-port>/"
NO_PROXY=localhost,127.0.0.1
之后,重新启动 Docker 服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
管理 Docker 容器
如果要启动Ubuntu操作系统的新Docker容器,请先拉取Ubuntu Docker镜像。以下命令将通过网络下载最新的 Docker 映像 (Ubuntu 20.04 LTS)。第一次运行此命令时,需要几分钟才能完成。下载的镜像将缓存在本地,因此后续对同一镜像的拉取将立即完成。
$ docker pull ubuntu
您可以按如下方式以交互模式启动 Ubuntu Docker。
$ docker run -i -t ubuntu /bin/bash
在上面的命令中,最后一个参数 /bin/bash
是容器启动后将在容器内执行的命令,在本例中是一个简单的 bash
shell。因此它会立即启动一个 Ubuntu 容器(这就是容器的美妙之处!),并在容器内给你一个 shell 提示符。此时,您应该能够在沙盒环境中访问最小的 Ubuntu 操作系统。

要退出 Docker 容器,请在容器内的提示符下键入 exit
。
您可以启动不同风格的容器。例如,启动 Fedora 容器:
$ docker run -i -t fedora /bin/bash
如果本地没有可用的 Fedora Docker 映像,该命令将首先自动下载该映像,然后启动 Docker。

如果您想启动具有特定发行版的容器,您也可以通过指定版本号来实现。例如,要启动 Ubuntu 18.04
Docker:
$ docker run -i -t ubuntu:18.04 /bin/bash
容器网络
Docker 使用 Linux 桥来互连容器之间,并将它们连接到外部网络。安装 Docker 后,您应该会看到默认情况下自动创建的 docker0
Linux 桥。默认情况下,您创建的每个容器都将连接到 172.17.0.0/16
上的 docker0
桥接口。

自定义默认 Docker 网络 docker0
如果需要,您可以自定义默认 Docker 网络 docker0
以使用不同的子网。例如,如果您要将默认子网 172.17.0.0/16
更改为 10.0.0.0/24
,请执行以下操作。
打开 /etc/systemd/system/multi-user.target.wants/docker.service
,并将 --bip "10.0.0.1/24"
作为参数添加到 /usr/bin/dockerd
中,如下所示。
$ sudo vi /etc/systemd/system/multi-user.target.wants/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --bip "10.0.0.1/24"

要激活更改,请重新启动 Docker 服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
此时,docker0
的网络应更改为10.0.0.1/24
。

从此时起,任何启动的新容器都将被分配一个 10.0.0.0/24
的 IP 地址。对于更雄心勃勃的用户来说,有更先进和用户友好的 Docker 网络工具,它们允许 Docker 容器跨多个主机互连。
其他定制
--dns 8.8.8.8 --dns 8.8.4.4
:指定容器使用的备用 DNS 服务器。--icc=false
:使容器之间相互隔离。
故障排除
1、运行docker
命令时遇到如下错误。
dial unix /var/run/docker.sock: no such file or directory
该错误可能是因为 Docker 守护进程未运行。检查 Docker 守护进程的状态,并确保首先启动它。
$ sudo systemctl status docker
$ sudo systemctl start docker
2、启动Docker容器时遇到如下错误。
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
此错误是因为您没有添加到 docker 组,因此您需要 root 权限才能运行 Docker。如果您想在没有 root 权限的情况下运行 Docker,请将自己添加到 docker
组,如下所示。
$ sudo usermod -a -G docker $USER
注销并重新登录,然后重试。