# Docker：启用容器支持与配置

> 如何在 Pigsty 启用 Docker 容器支持？Docker 的安装部署配置，以及如何解决DockerHub被“墙”的问题
---

Pigsty 提供了 [**`DOCKER`**](/zh/docs/docker) 模块，但默认并不安装。您可以使用 [`docker.yml`](/zh/docs/docker#dockeryml) 剧本在指定节点上安装并启用 Docker。

```bash
./docker.yml -l <ip|group|cls>   # 在指定的节点、分组、集群上安装并启用 Docker
```



-------

## 如何建配置代理服务器？

本文不会介绍如何“翻墙”，而是假设你已经有了一个可用的 HTTP(s) 代理服务器，应该如何配置，让 Docker 可以通过代理服务器，访问 docker hub 或 quay.io 等镜像站点：

你的代理服务器软件应该会提供一个形如：

- `http://<ip|domain>:<port>` 或者 `https://[user]:[pass]@<ip|domain>:<port>` 的代理地址

例如，假设您使用的代理服务器配置为：

```bash
export ALL_PROXY=http://192.168.0.104:8118
export HTTP_PROXY=http://192.168.0.104:8118
export HTTPS_PROXY=http://192.168.0.104:8118
export NO_PROXY="localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
```

您可以使用 `curl` 命令，检验代理服务器是否可以正常工作，例如成功可以访问 Google，通常说明代理服务器工作正常。

```bash
curl -x http://192.168.0.104:8118 -I http://www.google.com
```


-------

## 如何为Docker Daemon配置代理服务器？

如果您希望 Docker 在 Pull 镜像时使用代理服务器，那么应当在 `pigsty.yml` 配置文件的全局变量中，指定 [`proxy_env`](/zh/docs/reference/param#proxy_env) 参数：

```yaml
all:
  vars:
    proxy_env:                        # global proxy env when downloading packages
      no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
      http_proxy: http://192.168.0.104:8118
      all_proxy: http://192.168.0.104:8118
      https_proxy: http://192.168.0.104:8118
```

那么当 Docker 剧本执行，时，这些配置会被渲染为 `/etc/docker/daemon.json` 中的代理配置：

```json
{
  "proxies": {
    "http-proxy": "{{ proxy_env['http_proxy'] }}",
    "https-proxy": "{{ proxy_env['http_proxy'] }}",
    "no-proxy": "{{ proxy_env['no_proxy'] }}"
  }
}
```

> 请注意，Docker Daemon 不使用 `all_proxy` 参数

如果您希望手工指定代理服务器，可以选则直接修改 `/etc/docker/daemon.json` 中的 `proxies` 配置；
或者也可以修改 `/lib/systemd/system/docker.service` (Debian/Ubuntu) 与 `/usr/lib/systemd/system/docker.service` 的服务定义，在 `[Service]` 一节中添加环境变量声明，并重启生效：

```ini
[Service]
Environment="HTTP_PROXY=http://192.168.0.104:8118"
Environment="HTTPS_PROXY=http://192.168.0.104:8118"
Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
```

重启后生效：

```bash
systemctl restart docker
```


-------

## 如何使用其他镜像站点？

您可以在 [`docker_registry_mirrors`](/zh/docs/reference/param#docker_registry) 参数中指定其他镜像站点，例如阿里云、腾讯云、清华大学等镜像站点：

```yaml
[ "https://mirror.ccs.tencentyun.com" ]         # tencent cloud mirror, intranet only
["https://registry.cn-hangzhou.aliyuncs.com"]   # aliyun cloud mirror, login required
```

不过目前来看，所有位于中国大陆的 DockerHub 公有镜像站都已经被封禁了，建议使用代理服务器直接访问 Docker Hub

如果您需要使用其他镜像站，例如 `quay.io`，可以首先执行：

```bash
docker login quay.io
username #> # input your username
password #> # input your password
```
