Part 1 — Remote Developing with PyCharm [Docker SSH Server]

In this part, you will learn how to start developing using PyCharm and Docker.

Table of contents

Step 1 — Create a working directory

The first thing you need to do is to create a directory in which you can store docker and ssh related files.

As an example, we will create a directory named remote_dev inside our project and move into that directory with the command:

mkdir remote_dev && cd remote_dev

Step 2 — Create SSH key

On your client system – the one you’re using to connect to the server – you need to create a pair of key codes.

To generate a pair of SSH key codes, enter the command:

ssh-keygen -t rsa -b 4096 -f my_key

Files my_key and my_key.pub will be created in the working directory.

Step 3 — Docker Image

Let's create all the files necessary for building the container.

1. Create Dockerfile

Let's create a simple image in which we will deploy the SSH server:

remote_dev/Dockerfile

ARG IMAGE
FROM $IMAGE

RUN apt-get update && apt-get install -y openssh-server
EXPOSE 22

RUN apt-get install -y sudo
RUN mkdir -p /run/sshd

ARG home=/root
RUN mkdir $home/.ssh
COPY my_key.pub $home/.ssh/authorized_keys
RUN chown root:root $home/.ssh/authorized_keys && \
    chmod 600 $home/.ssh/authorized_keys

COPY sshd_daemon.sh /sshd_daemon.sh
RUN chmod 755 /sshd_daemon.sh
CMD ["/sshd_daemon.sh"]
ENTRYPOINT ["sh", "-c", "/sshd_daemon.sh"]

Add a script to start the server:

remote_dev/sshd_daemon.sh

#!/bin/bash -l

echo $PATH
/usr/sbin/sshd -D

2. Create docker-compose

Since we need a GPU inside the container, we will take Image with pre-installed CUDA as a basis and set runtime to nvidia. For convenience, let's create a docker-compose file:

remote_dev/docker-compose.yml

version: "2.2"
services:
  remote_dev_service:
    shm_size: '8gb'
    runtime: nvidia
    build:
      context: .
      args:
        IMAGE: nvidia/cuda:11.1.1-devel-ubuntu18.04
    ports:
      - "1234:22"
    volumes:
      - "./data:/data"

3. Build container

Don't forget to install docker and nvidia-docker2

curl https://get.docker.com | sh \
  && sudo systemctl --now enable 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
sudo apt update
sudo apt install -y nvidia-docker2
sudo systemctl restart docker

The basic syntax used to build an image using a docker-compose is:

docker-compose up --build -d

Once the image is successfully built, you can verify whether it is on the list of containers with the command:

docker ps | grep remote_dev_service

Step 4 — Connect to container over SSH

Add server with the ports specified in docker-compose.yml

~/.ssh/config (example)

Host docker_remote_container
    HostName ip_of_your_docker_container
    User root
    Port 1234
    IdentityFile path_to_ssh_secret_key

To connect to container by SSH, use command:

ssh docker_remote_container

Step 5 — Connect to container in PyCharm

1. Create new project

2. Add new interpreter

  • Open Preferences -> Python Interpreter

  • Show all

  • Plus button

3. Configure interpreter

4. Run simple code

Last updated