安装并配置docker
1. 更新软件源
bash
sudo apt update
sudo apt upgrade
2. 安装必要的证书并允许 apt 包管理器使用以下命令通过 HTTPS 使用存储库
bash
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
3. 添加 Docker 的官方 GPG 密钥和官方库
bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. 更新ubuntu源列表
bash
sudo apt update
5. 安装最新的docker ce
bash
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
(可选)查看可以安装的其他docker版本
bash
apt-cache madison docker-ce
输出如下所示:
"
docker-ce | 5:27.3.1-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:27.3.0-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:27.2.1-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:27.2.0-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:27.1.2-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:27.1.1-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:27.1.0-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
"
挑选版本进行安装,如下:
bash
sudo apt install docker-ce=5:27.3.0-1~ubuntu.22.04~jammy docker-ce-cli=5:27.3.0-1~ubuntu.22.04~jammy containerd.io
6. 验证 Docker 服务是否在运行
bash
systemctl status docker
如果输出如下,则安装成功.
bash
"● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
Active: active (running) since Wed 2024-11-27 08:32:25 CST; 20min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 49566 (dockerd)
Tasks: 21
Memory: 21.5M
CPU: 759ms
CGroup: /system.slice/docker.service
└─49566 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/con>
"
7. Docker配置
7.1 Docker设置代理
7.1.1 创建或编辑Docker配置文件
bash
sudo gedit /etc/systemd/system/docker.service.d/http-proxy.conf
7.1.2 在文件中添加内容如下(<PROXY_URL>为自己的代理地址):
bash
"
[Service]
Environment="HTTP_PROXY=http://<PROXY_URL>"
Environment="HTTPS_PROXY=http://<PROXY_URL>"
"
7.1.3 重新加载和重启 Docker
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
7.1.4 验证代理配置
bash
docker info | grep Proxy
7.2 Docker加入用户组(避免每次使用sudo)
7.2.1 将用户加入docker用户组,避免每次都要使用sudo.
7.2.2 检查 docker组是否存在:
bash
getent group docker
如果输出中有 docker❌...,说明组存在。
7.2.3 将用户添加到docker组:
bash
sudo usermod -aG docker $USER
7.2.4 注销并重新登录: 让组权限生效,需要注销当前会话并重新登录。
验证: 执行以下命令,验证是否还需要 sudo.
bash
docker run hello-world
如果不再需要 sudo,说明权限配置成功。
docker的基本使用
1. docker镜像拉取
bash
docker pull <镜像名>:<tag id>
2. 查看docker中存在的镜像
bash
docker images
3 删除指定镜像
bash
docker rmi <镜像ID>
4. 从镜像创建docker容器并运行
bash
docker run -it \
-p 2222:22
--name $CONTAINER_NAME \
--network host \
--privileged \
--gpus all \
-e DISPLAY=$DISPLAY \
-e QT_X11_NO_MITSHM=1 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $WORKSPACE_DIR:/workspace \
-v /dev:/dev \
-v /etc/localtime:/etc/localtime:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
--security-opt seccomp=unconfined \
$IMAGE_NAME \
/bin/bash
5. 开启容器
bash
docker start <容器ID或容器名>
6. 停止容器
bash
docker stop <容器ID或容器名>
7. 进入已经存在的容器
bash
docker exec -it <容器名> /bin/bash
8. 列出docker中的所有容器
bash
docker ps -a
9. 删除指定容器
bash
docker rm <容器ID或容器名> (已经停止的容器)
docker rm -f <容器ID或容器名> (强制删除一个运行中的容器)
常用脚本
Nvidia docker一键安装脚本(nvidia_container_install.sh)
bash
# 添加 NVIDIA 包仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 更新包列表
sudo apt-get update
# 安装 NVIDIA Container Toolkit
sudo apt-get install -y nvidia-container-toolkit
# 配置 Docker 守护进程
sudo nvidia-ctk runtime configure --runtime=docker
# 重启 Docker 守护进程
sudo systemctl restart docker
一键创建带有ssh的docker终端的shell脚本(setup_nvidia_docker.sh)
bash
#!/bin/bash
# ====== 用户自定义参数 ======
IMAGE_NAME="pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime" # Docker镜像名
CONTAINER_NAME="sparseocc" # 容器名称
USER_NAME="sparseocc" # 容器内用户名
USER_PASSWORD="210510" # 容器内用户密码
HOST_SSH_PORT=2248 # 主机映射的SSH端口
HOST_MOUNT_DIR="/home/kiku/data/code_data/docker/workspace/sparseocc_project" # 本地挂载目录
CONTAINER_MOUNT_DIR="/workspace" # 容器内挂载目录
# ===========================
# 1. 生成容器并安装ssh、sudo、x11依赖
docker run -itd \
--gpus all \
--name ${CONTAINER_NAME} \
--hostname ${CONTAINER_NAME} \
-p ${HOST_SSH_PORT}:22 \
-e DISPLAY=$DISPLAY \
-e QT_X11_NO_MITSHM=1 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ${HOST_MOUNT_DIR}:${CONTAINER_MOUNT_DIR} \
${IMAGE_NAME} \
bash
# 2. 配置X11转发(主机需允许本地连接)
xhost +local:root
# 3. 在容器内创建用户、安装ssh、设置密码等
docker exec -it ${CONTAINER_NAME} bash -c "
apt update && apt install -y sudo openssh-server vim
useradd -m -s /bin/bash ${USER_NAME}
echo '${USER_NAME}:${USER_PASSWORD}' | chpasswd
usermod -aG sudo ${USER_NAME}
mkdir -p /var/run/sshd
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
service ssh start
"
# 4. 设置SSH端口映射(host模式下可省略,直接用容器IP和22端口)
# docker run时如用-p ${HOST_SSH_PORT}:22 --network bridge,则需此步
echo "容器已启动,用户名: ${USER_NAME},密码: ${USER_PASSWORD}"
echo "SSH登录命令(host网络模式下,容器IP与主机一致):"
echo "ssh ${USER_NAME}@localhost -p ${HOST_SSH_PORT}"
echo "如需图形界面,确保主机已执行:xhost +local:root"
PyCharm远程ssh进入docker中使用docker的python解释器
1. 确保使用setup_nvidia_docker.sh 安装完成了docker容器中的nvidia驱动,并且在docker hub中拉取你需要的镜像,然后使用setup_nvidia_docker.sh脚本,创建对应的容器。
2. 查看容器当前的状态以及对应的端口号
如下所示:
容器的端口号对应为2248,与sh脚本中设置的一致,并且docker处于激活状态。可以直接在pycharm中添加对应的解释器了。
3. pycharm进行ssh解析器配置

Username:输入上述脚本中对应的名字, Host输入本机的ip(localhost) 端口与sh脚本中自定义端口一致,点击 Next,进入下一步。
密码栏输入sh脚本中设置的自定义密码,点击Next。

Interpreter选择docker环境中你需要使用的python解释器,sync folders选择的分别是你本机上的工作空间与docker环境中的工作空间路径,pycharm会给这两个路径之间生成映射。这样整个环境就配置完成了。
此时查看右下角的解释器就变为了docker中的解释器了。