Kubernetes完全ガイド impress top gearシリーズ
- 作者:青山 真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: Kindle版
目次
背景・目的
前回まで取り組みを通じて、
Dockerfileからのイメージの
ビルド、コンテナの作成と
起動を出来るようになりました。
今度はここから、PyCharmと
コンテナを接続して、プロジェクト
のインタプリタにコンテナ側の
Pythonを使えるようにしようと
したのですが、またいろいろ
と知識不足で躓いたところが
ありました。
今回は、上記について調べた
事をメモしつつ、PyCharmと
Dockerコンテナを接続して、
コンテナ側のPythonを
インタプリタとして使える
ようにする方法を紹介して
いきます。
コンテナ側のPythonを使うメリット
プロジェクトに応じて複数の
バージョンを使い分けたい
場合、それを全て同じPCの
ローカルにインストールして
しまうと、いろいろ小細工を
してローカルが汚れたり、
それらが競合して動作が不安定
になったりするなどの問題が
起きやすくなります。
それに対して、各バージョンの
Pythonが入ったコンテナを
用意しておけば、切り替えが楽
になるし、競合しておかしく
なるなんて事も起きなくなる
ので安心です。
PyCharmとDockerコンテナの接続手順
ここから先の手順は全て、
Docker for Windowsを使って
いる事を前提としています。
1. DockerデーモンとのTCP/IP接続を有効にする
Docker DesktopのSetting画面を
開き、そこのGeneralにある
「Expose daemon on
tcp://localhost:2375 without
TLS」にチェックを付けます。
チェックを付けたら、
Docker Desktopを再起動して、
この設定を反映させます。
これでDocker側が、PyCharm
によるポート2375番からの
接続を受け入れるように
なります。
ここでの作業に関連するワード
で調べたのは、TCP/IP, デーモン,
TLSですが、それぞれで参考に
なった記事を一緒に紹介して
おきます。
TCP/IPについて
デーモンについて
TLSについて
2. プロジェクトを作成する
プロジェクト用フォルダを
こちらのようなフォルダ
構成で作ります。
作成したら、このフォルダを
PyCharmで開いておきます。
3. Dockerfileを作成する
イメージをビルドするための
Dockerfileを作成します。
今回は下記のようなものを
作成しました。
# pull base image FROM ubuntu:18.04 # update packages RUN set -x && \ apt update && \ apt upgrade -y # installation RUN set -x && \ apt install -y wget && \ apt install -y sudo # anaconda RUN set -x && \ wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh && \ bash Anaconda3-2019.10-Linux-x86_64.sh -b && \ rm Anaconda3-2019.10-Linux-x86_64.sh # path ENV PATH $PATH:/root/anaconda3/bin # requirements WORKDIR /var/Project ADD requirements.txt /var/Project RUN pip install -r requirements.txt
4. docker-compose.ymlファイルを作成する
詳細な書き方については、
こちらの記事が詳しいので
参照下さい。
qiita.com
今回はこのような内容で
書いてみました。
version: '3' services: hello_world: build: context: '.' dockerfile: 'Dockerfile' image: ubuntu:18.04 container_name: hello_world ports: - 8080:80 volumes: - '../:/var/Project' tty: true working_dir: '/var/Project'
ざっと説明すると、これにより
hello_worldというサービスが
立ち上がります。
このサービスの中で、同じく
hello_worldというコンテナが
作られ、ホスト側のルート
ディレクトリをコンテナ側の
/var/Projectというディレクトリ
マウントして共有します。
5. ビルドしてコンテナを起動させる
こちらのコマンドにより、
docker-compose.ymlを
使ったイメージのビルド
とコンテナの起動を一度
に行う事が出来ます。
$ docker-compose up -d --build
この時にオプションとして、
-dを付けるとコンテナはバック
グラウンドで起動されるので、
ホスト側のターミナル操作が
出来るようになります。
--buildを付けると、コンテナ作成
の前にイメージのビルドを行う
ようになります。
コンテナを作成した後に各設定
を変更したい時は、ファイルを
編集した後でこのコマンドを
実行すれば、全てのコンテナを
一旦停止させて作成し直して
くれます。
$ docker-compose up -d
6. コンテナの作成・起動を確認する
先述したコマンドを実行した後、
このようなメッセージが出力
されれば成功です。
イメージが作られているか確認
してみます。
コンテナが作成され、起動して
いるかも確認してみます。
7. Dockerサーバとの接続を設定する
PyCharmのFileメニューから、
Settingsへ進み、その中の
Build, Execution, Deployment
へ進み、そこのDockerを選び
ます。
左上の赤丸の+アイコンを
押すと新規のDockerサーバが
作られ、その設定画面が開き
ます。そこで、TCP socketによる
接続を選択し、「Connection
successful」のメッセージが
表示されればOKです。
8. インタプリタを設定する
PyCharmのFileメニューから、
Settings -> Project -> Project
Interpreterと進みます。
この時点でコンテナがちゃんと
作成されていれば、こちらの
ような画面になっているはず
です。
作成されたコンテナの中にいる
Pythonがインタプリタとして
設定されている事が分かったら、
OKを押して設定完了です。
9. コンテナに接続する
ここまでの設定が全て完了した
状態で画面左下にあるServicesを
開くと、先程設定したDocker
サーバが表示されているはずです。
まずはこれを右クリックして、
Connectを選んでサーバと接続
します。
接続すると、その中で立ち上がった
サービスやイメージが表示されるので、
そこからdocker -> hello_world ->
hello_worldと表示させます。一つ目の
hello_worldがサービスで、二つ目の
hello_worldがコンテナに当たります。
コンテナのhello_worldを右クリックし、
exec -> create -> コマンドとしてbashを
入力すれば、こちらのようにコンテナに
入る事が出来ます。
10. Pythonスクリプトを作成・実行する
ホスト側のプロジェクトフォルダ内に、
実行させたいPythonスクリプトを
作成します。
「hello_world.py」
print('Hello World!!')
コンテナ内のPythonがインタプリタに
なっているので、コーディング時は
ちゃんとコード補完などが働いて
くれます。
スクリプトが出来たら、コンテナ側
から「python hello_world.py」で
実行出来ます。ファイル自体はホスト
側にありますが、コンテナ側と共有
されたディレクトリ内にあるので、
コンテナ側から参照する事が出来ます。
あとは実行して、コーディングした
通りの動作をしてくれたら成功です。