在linux上安装docker和docker-compose

介绍在linux上安装docker和docker-compose的方式,以及docker的简单使用。 Modified: 2024-09-28 23:03:28 Created: 2021-08-22 09:50:08 Tags: #docker #docker-compose #linux

用 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 container
  • hello-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 的简单使用。