Skip to content

Update docker installation docs & FAQs #43

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: 2.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 74 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,88 @@
# QDUOJ Docker 镜像部署文档

## 环境准备

### Linux 环境

1. 安装必要的依赖

- `apt`仅适用于Debian系(例如Debian、Ubuntu)Linux,红帽系(例如CentOS)请使用yum安装这些依赖

- 如果apt速度慢请参阅[FAQ](./doc/faq.md#安装依赖组件超时或速度慢)

```bash
sudo apt-get update && sudo apt-get install -y vim python-pip curl git
pip install docker-compose
sudo apt-get update
sudo apt-get install -y vim python3-pip curl git
sudo pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
# 注意:国外服务器直接sudo pip3 install docker-compose即可,不需要指定软件源。
# 验证安装
docker-compose version
# docker-compose version 1.25.0, build 1110ad01
```

- 注意:pip更新后如果出现`Cannot import name "main"`请参阅[此处](./doc/pip-cannot-import-name-main.md)

- 执行`docker-compose version`时如提示找不到文件,请参阅[此处](./doc/cannot-find-docker-compose.md)

2. 安装 Docker

国内用户使用脚本一键安装: `sudo curl -sSL https://get.daocloud.io/docker | sh`
国外用户使用脚本一键安装: `sudo curl -sSL get.docker.com | sh`

详细步骤参照: [https://docs.docker.com/install/](https://docs.docker.com/install/)
- 使用一键脚本

- 国内服务器

```bash
curl -fsSL https://get.daocloud.io/docker -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
sudo service docker start
```

- 国外服务器

```bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo service docker start
```

- 注意:Docker并不推荐在生产环境中使用一键脚本安装(参阅[链接](https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-convenience-script))

- 分步安装

- 请参阅:

- [在Ubuntu服务器上安装Docker CE和docker-compose](./doc/ubuntu-docker-installation.md)

- [Docker官网](https://docs.docker.com/install/)

3. 配置非root用户运行

- 如果需要非root用户也能运行docker(例如运维不开放root用户),请参阅[FAQ](./doc/faq.md#配置非root用户运行)

- 注意:将非root添加至`docker`用户组后,由该用户运行的容器仍可获得root权限,可能会有一定安全隐患。[参阅](https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface)

4. 国内服务器配置Docker镜像源

- 参阅[FAQ](./doc/faq.md#国内服务器配置阿里云Docker镜像仓库)

5. 安装Docker时的常见问题

- 参阅[FAQ](./doc/faq.md)

- 问题列表:

- 安装依赖组件超时或速度慢

- 国内服务器安装Docker超时或速度慢

- Docker pull 或 docker-compose pull 超时速度慢

- 安装docker-compose后运行提示/usr/bin/docker-compose: No such file or directory

- Couldn't connect to Docker daemon at ... - is it running?

- 配置非root用户运行

- 国内服务器配置阿里云Docker镜像仓库

### Windows 环境

Expand Down
20 changes: 20 additions & 0 deletions doc/cannot-find-docker-compose.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Cannot find /usr/bin/docker-compose 的解决办法

1. 确认已经安装`docker-compose`

1. 执行`whereis docker-compose`找到`docker-compose`的安装位置,例如pip会将其安装在`/usr/local/bin/docker-compose`

1. 建立软链接

```bash
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
```

- 如果安装路径不在/usr/local/bin,将第一个路径换成实际的安装位置

4. 验证

```bash
docker-compose version
# docker-compose version 1.25.0, build 1110ad01
```
47 changes: 47 additions & 0 deletions doc/faq.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# 常见问题

## 安装依赖组件超时或速度慢

- 请检查网络连接,国内服务器请自行切换至国内apt源,比如[中科大源](http://mirrors.ustc.edu.cn/help/ubuntu.html)。

## 国内服务器安装Docker超时或速度慢

- 请参阅[Docker安装教程](./ubuntu-docker-installation.md)使用阿里云软件源安装Docker。

## Docker pull 或 docker-compose pull 超时速度慢

- 请参阅[安装说明](../README.md)步骤4 [国内服务器配置Docker镜像源]。

## 安装docker-compose后运行提示/usr/bin/docker-compose: No such file or directory

- 参阅[此处](./cannot-find-docker-compose.md)

## Couldn't connect to Docker daemon at ... - is it running?

- 请检查Docker daemon是否在运行,使用命令`sudo systemctl status docker`或者`sudo service docker status`

- 请检查是否由root用户(或sudo)执行docker或`docker-compose`

- 如需使用非root用户操作docker请参阅本条下方 [配置非root用户运行]。

## 配置非root用户运行

- 如果需要非root用户也能运行docker(例如运维不开放root用户),执行以下命令将该用户添加到docker用户组

```bash
sudo usermod -aG docker ${用户名}
```

- 配置完成后,需要**重新登录**。

- 注意:将非root添加至`docker`用户组后,由该用户运行的容器仍可获得root权限,可能会有一定安全隐患。[参阅](https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface)

## 国内服务器配置阿里云Docker镜像仓库

1. 首先你需要一个阿里云账户

1. 打开产品与服务-弹性计算-容器镜像服务,或者[点这个链接](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors)

1. 点击左侧「镜像加速器」,参考「配置镜像加速器」提供的地址和代码配置阿里云Docker镜像源。

- 注意:如果使用WSL2,配置完成后会提示无法调用systemd,请使用`sudo service docker restart`重启Docker服务。
40 changes: 40 additions & 0 deletions doc/pip-cannot-import-name-main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# pip/pip3升级后提示Cannot import name main的解决办法

- 使用文本编辑器打开`/usr/bin/pip`或`/usr/bin/pip3`,进行如下修改:

1. 将`from pip import main`改为`from pip import __main__`

1. 将`sys.exit(main())`改为`sys.exit(__main__._main())`

- 之后,执行命令验证

```bash
# pip (Python 2)
pip -V
# pip3 (Python 3)
pip3 -V
```

- 例如,修改前

```python
import re
import sys
from pip import main

if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
```

- 修改后

```python
import re
import sys
from pip import __main__

if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(__main__._main())
```
145 changes: 145 additions & 0 deletions doc/ubuntu-docker-installation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Ubuntu服务器安装Docker和docker-compose

> 原文:https://docs.docker.com/install/linux/docker-ce/ubuntu/
>
> 加入了阿里云Docker软件源和镜像仓库

0. 首先确保运行的是以下几个版本之一:

- Disco 19.04

- Cosmic 18.10

- Bionic 18.04 (LTS)

- Xenial 16.04 (LTS)

- 如果运行的是Ubuntu 14.04,请参考[这里](https://docs.docker.com/v18.03/install/linux/docker-ce/ubuntu/)安装Docker 18.03。

> 注意:所有安装操作均须root权限,如果不是root用户,命令前面的`sudo`不能省略。

1. 卸载旧版Docker及相关软件包

```bash
sudo apt-get remove -y docker docker-engine docker.io containerd runc
```

2. 更新软件源

```bash
sudo apt-get update
```

- 如果apt速度慢请参阅[FAQ](./faq.md#安装依赖组件超时或速度慢)

3. 安装依赖组件

```bash
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
```

4. 添加GPG密钥和软件源(国内服务器请跳至步骤5)

```bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```
- **如果是国内服务器请参阅步骤5的替代软件源**

- 验证密钥

```bash
sudo apt-key fingerprint 0EBFCD88
```

> 出现类似如下的字样说明密钥添加成功

pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <[email protected]>
sub rsa4096 2017-02-22 [S]

- 添加软件源(国内服务器请跳过此步骤)

```bash
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
```

5. 国内服务器添加GPG密钥和软件源(国外服务器请跳至步骤6)

```bash
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
```

- 如果是阿里云服务器,可以直接使用内网软件源,无需采用上面的源:

```bash
# 经典网络
curl -fsSL http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# VPC网络
curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
```

6. 更新软件源

```bash
sudo apt-get update
```

7. 安装Docker CE

```bash
sudo apt-get install docker-ce docker-ce-cli containerd.io
```

8. 国内服务器配置Docker镜像源(国外服务器请跳过)

- 参阅[FAQ](./faq.md#国内服务器配置阿里云Docker镜像仓库)

9. 验证Docker安装

```bash
sudo docker run hello-world
# 显示Hello from Docker!等字样且无报错即为成功运行
```

- 验证后,可以通过`sudo docker rm $(docker ps -aq); sudo docker rmi hello-world`删除`hello-world`镜像(前半句命令会删除本机的所有docker容器,请确保没有其他重要容器存在,如有请使用`sudo docker ps -a`找到`hello-world`容器并执行`sudo docker rm ${容器ID}`手动删除该容器。

10. 安装 `docker-compose`

```bash
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
```

- 如果因为网络原因无法下载,可以使用以下命令获取到下载地址(在服务器上执行),接着通过能下载的机器下载该文件,并远程复制到`/usr/local/bin/docker-compose`路径:

```bash
echo "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)"
```

- 验证安装

```bash
docker-compose --version
# docker-compose version 1.25.0, build 1110ad01
```

- 如果提示未找到文件,请参阅[此处](./cannot-find-docker-compose.md)

11. 配置非root用户运行

- 参阅[FAQ](./faq.md#配置非root用户运行)