Docker+PyCharm+ssh部署深度学习docker环境

安装并配置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中的解释器了。

相关推荐
redwingz38 分钟前
kolla安装openstack
docker·openstack
一点.点3 小时前
李沐动手深度学习(pycharm中运行笔记)——12.权重衰退
pytorch·笔记·深度学习·pycharm
Linux技术支持工程师4 小时前
docker镜像封装与发布微服务学习
学习·docker·微服务
DouMiaoO_Oo6 小时前
Idea/Pycharm用法总结
pycharm
5283010 小时前
容器技术入门与Docker环境部署
java·docker·容器
51710 小时前
通过Docker挂载nginx并修改页面
nginx·docker·容器
@十八子德月生13 小时前
第十章——8天Python从入门到精通【itheima】-99~101-Python基础综合案例-数据可视化(案例介绍=JSON格式+pyecharts简介)
大数据·python·信息可视化·pycharm·echarts·数据可视化
猫头虎16 小时前
2025最新Python 100个常用函数在线体验项目
android·java·python·pycharm·django·pandas·pip
Fireworkitte17 小时前
如何使用 Dockerfile 创建自定义镜像
运维·docker·容器