Разработка с использованием PyCharm в Docker Container на AWS Instance - PullRequest
0 голосов
/ 15 января 2019

Я использую PyCharm Professional для разработки Python.

Я могу подключить графический интерфейс PyCharm run / debugs к интерпретатору python локального образа Docker и запускать локальный код с помощью библиотек среды Python Docker Container, например. с помощью описанной здесь процедуры: Настройка удаленного переводчика через Docker .

Я также могу подключаться к SSH в экземплярах AWS с помощью PyCharm и подключаться к удаленным интерпретаторам python, которые отображают файлы из моего локального проекта в удаленный каталог и снова позволяют мне запускать GUI, шагая по удаленному коду, как если бы он был локальным например с помощью описанной здесь процедуры: Настройка удаленных переводчиков по SSH .

У меня есть образ Docker на концентраторе Docker, который я хотел бы развернуть в экземпляре AWS, а затем подключить мой локальный графический интерфейс PyCharm к среде внутри удаленного контейнера, но я не могу понять, как это сделать, может кто-нибудь помогите мне?

[РЕДАКТИРОВАТЬ] После того, как было выдвинуто предложение поместить сервер SSH в удаленный контейнер и подключить мой локальный PyCharm непосредственно в контейнер через SSH, например, , как описано здесь . Это одно из решений, но оно было широко критиковано в других местах - есть ли более каноническое решение?

1 Ответ

0 голосов
/ 21 января 2019

Проведя небольшое исследование, я пришел к выводу, что установка SSH-сервера внутри моего контейнера и вход через удаленный интерпретатор PyCharm SSH - это лучшее, что нужно сделать, несмотря на опасения, высказанные в других местах. Мне удалось это следующим образом.

Приведенный ниже Dockerfile создаст образ с SSH-сервером внутри, в который вы можете войти по SSH. У него также есть anaconda / python, так что есть возможность запустить сервер ноутбука внутри и подключиться к нему обычным способом для Jubyter. Обратите внимание, что у него есть простой текстовый пароль (screencast), вы обязательно должны включить регистрацию с помощью ключа, если вы используете это для чего-то важного.

Он возьмет локальные библиотеки и установит их в вашу библиотеку пакетов внутри контейнера, и при желании вы также можете извлекать репозитории из GitHub (зарегистрируйтесь для получения ключа API в GitHub, если вы хотите это сделать, поэтому вам не нужно введите простой текстовый пароль). Также требуется, чтобы вы создали открытый текст requirements.txt, содержащий все другие пакеты, которые вам нужно будет установить в pip.

Затем выполните команду build, чтобы создать образ, и выполните команду, чтобы создать контейнер из этого образа. В Dockerfile мы выставляем SSH через порт контейнера 22, поэтому давайте подключим его к неиспользуемому порту в экземпляре AWS - через этот порт мы будем проходить через SSH. Также добавьте еще одну пару портов, если вы хотите использовать Jupyter с локального компьютера в любой момент:

docker build -t your_image_name .

не пропустите . в конце - это важно!

docker run -d -p 5001:22 -p8889:8889 --name=your_container_name your_image_name

Nb. вам нужно будет прорваться в контейнер (docker exec -it xxxxxxxxxx bash) и включить Jupyter с помощью jupyter notebook.

Dockerfile:

ROM python:3.6

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

# Load an ssh server. Change root username and password. By default in debian, password login is prohibited,
# go into the file that controls this and make a change to allow password login
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN /etc/init.d/ssh restart

# Install git, so we can pull in some repos
RUN apt-get update && apt-get upgrade -y && apt-get install -y git

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

# Install the requirements and the libraries we need (from a requirements.txt file)
COPY requirements.txt /tmp/
RUN python3 -m pip install -r /tmp/requirements.txt

# These are local libraries, add them (assuming a setup.py)
ADD your_libs_directory /your_libs_directory
RUN python3 -m pip install /your_libs_directory
RUN python3 your_libs_directory/setup.py install

# Adding git repos (optional - assuming a setup.py)
git clone https://git_user_name:git_API_token@github.com/YourGit/git_repo.git
RUN python3 -m pip install /git_repo
RUN python3 git_repo/setup.py install

# Cleanup
RUN apt-get update && apt-get upgrade -y && apt-get autoremove -y

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...