@Last Update: 2022/03/22
本例程前提条件: 如果需要nvidia-docker的话,需要安装好NVIDIA驱动以及cuda
0.支持的Ubuntu版本
- Ubuntu Groovy 20.10
- Ubuntu Focal 20.04 (LTS)
- Ubuntu Bionic 18.04 (LTS)
- Ubuntu Xenial 16.04 (LTS)
Docker 引擎支持在x86_64
(或amd64
), armhf
, and arm64
上运行.
1.卸载旧版本docker
1 | sudo apt-get remove docker docker-engine docker.io containerd runc |
执行以上命令将会卸载docker,但是docker本地保存的images, containers, volumes, and networks将会保存。
使用一下命令将清除本地保存的内容:
1 | sudo apt-get purge docker-ce docker-ce-cli containerd.io |
2.安装docker
参考:https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine
设置仓库
安装环境:
1
2
3
4
5
6
7
8sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common添加Docker官方GPG key:
1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
1
sudo apt-key fingerprint 0EBFCD88
设置稳定版仓库.
1 | sudo add-apt-repository \ |
安装docker引擎
使用以下命令安装最新版docker。
1
2sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io以下是安装指定版本docker的方法:
a. 试用一下命令查看可安装的版本:
1
apt-cache madison docker-ce
docker-ce | 5:18.09.13-0ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:18.09.03-0ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.1ce3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.0ce3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
…b. 使用以下命令,安装指定版本的docker
5:18.09.1~3-0~ubuntu-xenial
.1
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
运行
hello-world
.1
sudo docker run hello-world
4.授权多用户使用docker服务
1.创建docker组:sudo groupadd docker
2.将当前用户加入docker组:sudo gpasswd -a [授权的用户名]docker
3.重启服务:sudo service docker restart
4.刷新docker成员:newgrp - docker
5.安装nvidia-docker
参考来源:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#getting-started
执行以下命令添加仓库:
1 | distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ |
安装 nvidia-docker2
:
1 | sudo apt-get update |
重启docker守护进程
1 | sudo systemctl restart docker |
测试:
1 | sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi |
6.修改docker文件存储位置
1、停止docker服务运行
2、在Ubuntu中,需要修改以下文件:/lib/systemd/system/docker.service
1 | ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock |
后面新加
1 | --graph=/data/docker |
/data/docker 是指新的存储位置
3、转移原先的docker的文件到新的文件夹
4、重新载入配置并重启:
1 | sudo systemctl daemon-reload |
7.添加国内加速源
修改/etc/docker/daemon.json(没安装过nvidia-docker,可能需要创建本文件),并加入registry-mirrors项。
一定要注意格式!!!!简单方法请参考这里!
示例(安装过nvidia-docker的情况下):
1 | { |
重新载入配置并重启:
1 | sudo systemctl daemon-reload |
8.Docker容器日志查看与清理
docker容器日志导致主机磁盘空间占用严重。很占用空间,不用的日志可以清理掉了。
解决方法
8.1 找出Docker容器日志
在linux上,容器日志一般存放在/var/lib/docker/containers/container_id/
下面, 以json.log结尾的文件(业务日志)很大,查看各个日志文件大小的脚本docker_log_size.sh,内容如下:
1 | !/bin/sh |
1 | chmod +x docker_log_size.sh |
8.2 清理Docker容器日志(治标)
如果docker容器正在运行,那么使用rm -rf
方式删除日志后,通过df -h
会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf
或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log
,当然你也可以通过rm -rf
删除后重启docker。接下来,提供一个日志清理脚本clean_docker_log.sh
,内容如下:
1 | !/bin/sh |
1 | chmod +x clean_docker_log.sh |
但是,这样清理之后,随着时间的推移,容器日志会像杂草一样,卷土重来。
8.3 设置Docker容器日志大小(治本)
- 设置一个容器服务的日志大小上限
上述方法,日志文件迟早又会涨回来。要从根本上解决问题,需要限制容器服务的日志大小上限。这个通过配置容器docker-compose的max-size选项来实现
1 | nginx: |
重启nginx容器之后,其日志文件的大小就被限制在5GB,再也不用担心了。
- 全局设置
新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:
1 | vim /etc/docker/daemon.json |
1 | { |
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
1 | // 重启docker守护进程 |
注意:设置的日志大小,只对新建的容器有效。
8.4 本节参考文章
https://blog.csdn.net/xunzhaoyao/article/details/72959917
https://www.cnblogs.com/testzcy/p/7904829.html