用 docker 可以减少很多环境配置的工作。当然容器较多则可以使用 docker-compose 简单管理。本文介绍 docker/docker-compose 的安装以及 docker 的简单使用。
1 docker 安装
linux 使用国内源
首先修改 Linux 镜像源,加速下载速度。这里使用的是 Rocky Linux,在这里可以查看源,国内可以使用南京大学的源。
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.nju.edu.cn/rocky|g' \
-i.bak \ /etc/yum.repos.d/Rocky-*.repo
sudo dnf makecache
1.2 卸载预先安装的 docker
卸载预先安装的 docker 包,并且安装 docker 依赖项:
sudo dnf remove docker docker-common docker-selinux docker-engine
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
1.3 配置 docker 安装源和安装
先获取 docker 源文件并且指向清华镜像,如果没有权限则要加上sudo
:
sudo wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
sudo dnf makecache fast
sudo dnf install docker-ce -y
# 查看结果
docker --version
# Docker version 20.10.3, build 48d30b5
1.4 nvidia-docker 的安装
随着容器技术的发展,在 docker 中使用 nvidia 的 GPU 是很常见的事情。如果要使用 GPU,需要先安装nvidia 相关工具。安装完成之后,还需要对 docker 进行一些安装配置:
sudo dnf clean expire-cache
sudo dnf install -y nvidia-container-toolkit-base
sudo nvidia-ctk runtime configure
2 配置 docker
主要包括修改运行 docker 的用户所在组,修改 docker 镜像保存位置,修改 docker 镜像下载源。
2.1 配置用户
docker 安装好之后属于 docker 组,通常和登陆的用户不在同一个组。导致每次都要用sudo
才能使用,十分不便。将当前用户添加到 docker 组,后续使用 docker 就不用添加sudo
了。
创建 docker 组:
sudo groupadd docker
sudo usermod -aG docker $USER
重新登陆shell
就可以了。
2.2 配置镜像保存位置
docker 默认镜像(image
)保存位置并不好,需要修改。编辑/etc/docker/daemon.json
(如果没有就新建):
{
"data-root": "/home/chinglin/fastdata/docker"
}
重新启动 docker: sudo systemctl restart docker
。
2.3 配置 docker repository
官方 repository 速度感人,需要更换为国内的 repository,常见的有 163
和中科大
,修改(如果没有就创建)/etc/docker/daemon.json
:
{
// #"registry-mirrors": ["http://hub-mirror.c.163.com"] // for 163
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] // for ustc
}
重启 docker:sudo systemctl restart docker
。
从2024年7月起,中国大陆大部分的公开docker镜像都阵亡了。解决方式是,找一个云计算的主机安装docker,将docker镜像save为一个tar文件,用rsync方式将tar文件传回本地,然后本地load。
至此,docker 已经安装和配置完成,可以进行一些 docker 操作了。
3 docker 基本概念和使用方式
这里先介绍 docker 的基本概念,再介绍一些基本用法。
3.1 镜像,容器,宿主机
- 镜像(image),就是一套打包好的软件环境,类比与以前操作系统的光盘。通过这个镜像实现软件环境的快速传送。
- 容器(container),实际运行的镜像,镜像的实例。
- 宿主机(host),就是安装 docker 的机器,它提供 docker 所需要的硬件和软件环境。
最简单的使用:
docker run -i -t --rm hello-world
参数说明:
-i
iteractive-t
terminal--rm
remove the containerhello-world
image name
如果要使用 gpu,则应该加上 docker 的参数--gpus all
(使用所有 GPU)。
3.2 持续存储
docker 在容器删除之后就会删除所有信息,这和我们想要通过 docker 操作得到一些结果保存下来的想法相矛盾。需要持久存储:
docker run -v local_path:/docker_path xxxxx
这里会将宿主(host)本地路径local_path
映射到容器/docker_path
,在 docker 容器中往/docker_path
路径的文件都会直接到local_path
中去。
3.3 端口转发
docker 容器网络环境和宿主机的环境是隔离的,需要做一些端口转发。使用-p local_port:docker_port
就行了。
3.4 镜像获取和管理
从 docker reistry 中获取一个镜像
docker pull image_name
查看当前机器上所有的镜像
docker images
docker image ls -a # 显示所有镜像
删除某个具体镜像
docker image rm image_name
docker rmi image_name
把镜像打包为xx.tar.gz
文件,在不同机器之间传递
docker save -o xx.tar.gz # 打包某个镜像到一个tar.gz文件
docker load -i xx.tar.gz # 在另一个地方load打包好的文件
3.5 容器管理
容器是镜像的实例。
容器操作,如果是image_name
,则以此镜像构建一个新的容器。如果是container_name
,则运行某个具体的容器。
docker run image_name
docker run container_name
启动容器
docker container start container_name
docker start container_name
停止容器
docker container stop container_name
docker stop container_name
删除容器
docker container rm container_name
4 docker 用户权限问题
docker 默认的账户是 root,会导致宿主机上的文件需要 root 权限才能操作。权限管理
5 docker-compose 安装和使用
直接用pip
安装就行了:
python3 -m pip install --user --upgrade docker-compose
总结
本文介绍了安装配置 docker 和 docker-compose 的方式以及 docker 的简单使用。