REF:
1. 安装 docker
1.1 安装
- **apt **
sudo apt update
sudo apt-get install docker.io
- 安装包安装
wget -qO- https://get.docker.com/ | sh
1.2. 更新dockers 用户组
sudo gpasswd -a ${USER} docker
newgrp docker
1.3. 测试dockers 是否安装成功
# common cmd to test docker
docker images # 查看当前下载的images
docker version
docker container ls # 查看当前正在运行的container
docker container ls -a # 查看所有的container
docker run hello-world
(base) XXX@XXXX-pc:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e535113fa206 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago elegant_swirles
1.4 设置开机自动启动
sudo systemctl start docker
sudo systemctl enable docker
2. 安装 Nvidia-docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
安装 nvidia-docker2
sudo apt-get update
sudo apt-get install -y nvidia-docker2
测试是否正确安装
docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
(base) xxx@xxx-pc:~$ docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Fri Mar 1 06:28:33 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.239.06 Driver Version: 470.239.06 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 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A |
| 0% 31C P8 9W / 170W | 45MiB / 12050MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
3. 常见dockers命令
docker images 命令
- 下载dockers images
# docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] docker pull ubuntu:18.04
- 通过 images 创建docker container
docker run -it --rm ubuntu:18.04 bash
- -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。
- –rm:这个参数是说容器退出后随之将其删除。默认run 之后 dockers不会手动删除
- bash:放在镜像名后的是 命令,
exit
退出当前 container
- [TODO] 将当前 container 打包成一个 image
dokcer container 命令
- container 的 启动,停止和重启
[name] 是 CONTAINER ID 、NAMES 都是可以的
docker container start [name]
- 启动已经终止(
exited
)的容器
- 启动已经终止(
docker container start [name]
- 重启启动
docker container restart [name]
docker run 常用参数
arg | 说明 |
---|---|
--name | 为容器指定一个名称 |
-it | 通过终端的方式交互 |
-p , --publish | 发布一个容器的端口到宿主机上 |
-v , --volume | 绑定挂载一个卷。 |
--gpus | 允许容器访问GPU。 |
进入正在运行的container
docker exec -it <container-id>
$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 69d137adef7a ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds zealous_swirles $ docker exec -it 69d1 bash root@69d137adef7a:/#
docker 中的数据管理
docker container 中有由 数据卷(Volumes) 和 **挂载主机目录(Bind mounts)**两种类型
- 挂在主机目录
-
-v
: 一种简化的挂载方式, 只需提供源路径和目标路径即可docker run -v /host/path:/container/path my_image
-
--mount
更为灵活和强大的挂载方式,允许你指定多个选项。可以指定挂载的类型(volume、bind mount),源路径、目标路径,并且可以设置一些额外的选项,比如读写权限。docker run --mount type=bind,source=/host/path,target=/container/path,readonly my_image # --mount参数指定了一个绑定挂载,将主机的 /host/path 目录挂载到容器的 /container/path目录,并设置为只读。
-
docker 中 网络配置
TODO
update: 2024.06.25
走代理进行 docker pull/push
- 使用国内镜像更新失效了,所以使用代理。
- 终端配置好proxy 之后,docker 并不能直接proxy. 需要稍微设置一下。
REF:
1. 解决docker pull无法拉取镜像的问题(配置代理)
2. https://neucrack.com/p/286
-
docker pull 的代理被 systemd 接管,所以需要设置 systemd
mkdir -p /etc/systemd/system/docker.service.d vim /etc/systemd/system/docker.service.d/proxy.conf
-
添加以下内容,根据自己的proxy设置进行相应更改。
[Service] Environment="HTTP_PROXY=http://127.0.0.1:7890/" Environment="HTTPS_PROXY=http://127.0.0.1:7890/" Environment="NO_PROXY=localhost"
-
重启systemd和docker服务:
systemctl daemon-reload systemctl restart docker
-
查看是否添加完成
systemctl show --property=Environment docker
docker build 代理
TODO