客服

使用支持 Docker 实例教程

如何在矩池云实例中使用 Docker

目前矩池云已经支持在 Linux 实例中使用 Docker 了。
接下来和大家介绍下如何租用并在 Linux 实例中使用 Docker。
本文预估阅读时间6分钟。

1 租用机器

首先您需要在机器租用界面 -> 功能筛选 -> 点选:支持Docker ,会自动给您筛选出所有支持 Docker 的机器。
点击租用按钮,选一个基础镜像,比如:Tensorflow 2.8,然后点击下单即可。
机器租用成功后,租用页面会显示服务器 ssh 链接等信息。

2 选择一个工具连接服务器

你可以选择任意你熟悉的 ssh 连接工具远程连接服务器,在矩池云支持中心有很多相关教程,如:Pycharm、VScode、Xshell、PuTTY等,点击查看相关教程

3 基础使用

接下来将以:利用 Docker 快速 pull 一个镜像并 run 起来为例子,给大家介绍一下 Docker 基本使用。
bash
docker images 查看系统内镜像列表
docker ps 查看系统内正在运行的容器
docker ps -a 查看系统内所有容器(包括已经退出的)

第一步:拉取镜像

指令格式:
bash
docker pull 镜像名称

'''
镜像名称一般包括两部分:镜像REPOSITORY:镜像TAG
如:pytorch/pytorch:latest
'''
比如拉取 pytorch 最后版本镜像。
bash
(myconda) root@localhost:~# docker pull pytorch/pytorch:latest
latest: Pulling from pytorch/pytorch
fb668870d8a7: Pull complete 
9968c75a4b0a: Pull complete 
79136b60862d: Pull complete 
d3c07c3b7a0f: Pull complete 
Digest: sha256:083b841fc46681ecf304214409ca79bd0a037c465c0740004a3354932ea4a073
Status: Downloaded newer image for pytorch/pytorch:latest
docker.io/pytorch/pytorch:latest

第二步:创建容器

指令格式:
bash
docker run -d --name=容器名称 --gpus all 镜像名称/镜像id
'''
-d 表示容器运行成功后挂后台运行
--name 指定容器名称
--gpus all 容器内也能使用机器显卡
'''
比如我们用上面拉取的镜像创建一个名为 torch 的容器。
bash
(myconda) root@localhost:~# docker run -d -it --name=torch --gpus all pytorch/pytorch:latest bash
c208adf4f3cb6ead623ee4870206f66d0f94d3cd3c61e7f2b2663933f75cb2ef
由于 Pytorch 官方镜像 build 的时候没有设置 ENTRYPOINT,创建容器无法直接挂后台运行(直接运行容器会自动退出),所以这里我们启动容器时需要加上 -it 参数。
如果镜像设置了 ENTRYPOINT,容器启动是不需要加 -it 参数的。
启动容器如果加上 -it 参数,需要设置对应的交互指令,比如 bash。

第三步 进入容器

指令格式:
bash
docker exec -it 容器名称/容器id 入口指令
'''
-it 表示以交互模式进入
'''
进入容器后,可以进行一些操作,比如查看显卡情况、CUDA版本、运行代码等。
bash
(myconda) root@localhost:~# docker exec -it torch bash
root@b56f9ef8b8d3:/workspace# nvidia-smi
Tue Dec 20 09:09:42 2022   
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla P100-SXM2...  On   | 00000000:00:06.0 Off |                    0 |
| N/A   38C    P0    24W / 300W |      0MiB / 16280MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                           
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
root@b56f9ef8b8d3:/workspace# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_Mar__8_18:18:20_PST_2022
Cuda compilation tools, release 11.6, V11.6.124
Build cuda_11.6.r11.6/compiler.31057947_0
root@b56f9ef8b8d3:/workspace# python3
Python 3.10.8 (main, Nov  4 2022, 13:48:29) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.13.0'            
>>> torch.cuda.is_available()
True
...

第四步:将容器打包成新镜像

指令格式:
bash
docker commit -m="注释内容" 容器名称/容器id 新镜像REPOSITORY:新镜像TAG
如果你在容器里做了很多修改,可以通过 docker commit 指令将修改后的容器转变成一个新的镜像。
bash
(myconda) root@localhost:~# docker commit -m="new /home/123.txt" torch torch1.13-cnn:1.0
sha256:93cbcd0afd6f21f732c6483c14244be91fa78faba644054a6613bb4b6ae37db2

第五步:导出与导入镜像

指令格式:
bash
docker save -o 保存文件路径 镜像名称/镜像id
'''
-o 指定保存文件路径
'''
将镜像导出保存成tar包。
bash
(myconda) root@localhost:~# docker save -o /mnt/imgs/torch1.13-cnn.tar torch1.13-cnn:1.0
(myconda) root@localhost:~# ls -alh /mnt/imgs/torch1.13-cnn.tar
-rw------- 0 root root 9.4G Dec 20 10:16 /mnt/imgs/torch1.13-cnn.tar
指令格式:
bash

docker load -i 镜像tar文件包路径
'''
-i 指定镜像tar文件包路径
'''
从tar包导入镜像。
bash
(myconda) root@localhost:~# docker load -i /mnt/imgs/torch1.13-cnn.tar
Loaded image: torch1.13-cnn:1.0
(myconda) root@localhost:~# docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
torch1.13-cnn     1.0       93cbcd0afd6f   22 minutes ago   9.97GB

查看GPU使用情况

由于目前支持 Docker 机器还没接入GPU CPU监控,无法在页面查看 GPU 使用情况,你可以直接在机器中输入指令查看。
  • 查看 GPU 使用情况:nvidia-smi
bash
watch -n 0.2 nvidia-smi
'''
-n 0.2 表示每 0.2 秒刷新一次
'''
  • 查看内存使用情况:free -m

保存环境

当你在服务器对你拉取的镜像做了一些修改后,下次租用机器想接着使用,有两种方法:
  • 方法一:如果镜像很大,建议将修改后的镜像导出成 tar 包保存到网盘,下次租用机器再导入即可。
bash
(myconda) root@localhost:~# docker save -o /mnt/imgs/torch1.13-cnn.tar torch1.13-cnn:1.0
(myconda) root@localhost:~# ls -alh /mnt/imgs/torch1.13-cnn.tar
-rw------- 0 root root 9.4G Dec 20 10:16 /mnt/imgs/torch1.13-cnn.tar
下次租用机器导入方法:
bash
(myconda) root@localhost:~# docker load -i /mnt/imgs/torch1.13-cnn.tar
Loaded image: torch1.13-cnn:1.0
(myconda) root@localhost:~# docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
torch1.13-cnn     1.0       93cbcd0afd6f   22 minutes ago   9.97GB
  • 方法二:如果改动不多,镜像不大,可以直接租用界面选择 更多->保存到个人环境。(如果保存环境很大,下次从保存环境启动机器可能会很慢)
保存环境会保存您除了矩池云网盘(机器中/mnt目录)外所有的改动。
从保存环境启动机器及环境管理方法点击查看