【おてがる開発環境をつくろう】Docker であそぶ Python 入りのコンテナつくる
【おてがる開発環境をつくろう】
1.まずは Docker Desktop インストール
2.Docker であそぶ Python 入りのコンテナつくる ←今ココ
3.コンテナで Jupyter Lab 環境
4.さいきょうのえでぃた VS Code
あくまで今回の目的は、マイクロサービスを作るとかではなく
「開発環境をつくる!」です
Dockerコンテナがなんなのか、とか、アーキテクチャみたいなことは
他のサイトにおまかせして、あくまで使い方に終始していきます
コンテナをダウンロード
まずは、Dockerhub のアカウントを用意しておいて
https://hub.docker.com/
Docker ログインする
$ docker login
Dockerhub上のコンテナを、Powershell などで docker pull コマンドでダウンロードする
$ docker pull <container名>:<tag>
最近はだいたいアプリは公式が Dockerhub上にコンテナを用意していたりするので、Dockerhub をググるクセをつけておくと何かと便利、「dockerhub “ほしいもの”」でググると良いでしょう
例)docker ubuntu, docker splunkなどなど
自作コンテナを作ろう
dockerfile 作成
用途によってベースのコンテナを決めて、モジュールを加えてカスタマイズしていきます
例えば Python なら Dockerhub に用意されている tag ごとにインストールされているモジュールが違うので、ベースのコンテナを決めて追加の Pythonモジュールやパッケージインストール、設定ファイルなどをコピーしたりしてをコンテナを作っていきます
その設計図が dockerfile です
dockerfile という名前(拡張子なし)のファイルになります
dockerfile のサンプル(Dateコマンドが出力されるだけ)
# From: ベースになるコンテナを指定、tagなしだとlatestが自動的に選択される(ちゃんと指定しよう) FROM python:3.9.4-slim # WORKDIR ディレクトリ作って、そこに移動して以降のコマンド実行 WORKDIR /oreore # RUN:の後にOS上で実行するコマンド RUN apt update -y # CMD: コンテナ起動時に実行されるコマンド CMD ["date"]
コンテナイメージのビルド
dockerfile と同じ場所にて
docker build . -t <container名>
を実行して dockerfile を元にコンテナイメージを作ります
(例)
$ docker build . –t test_container
コンテナイメージの確認
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE test_container latest 80afafe350ea 55 seconds ago 132MB
コンテナの起動
コンテナを起動は
docker run
(場所はどこでもよい)
上で作った test_container を実行してみます
date コマンド出力結果だけが表示されます
$ docker run test_container .... Sat May 22 13:16:33 UTC 2021
よく使うオプション
--rm:コンテナ終了とともにコンテナを消す
-it:コンテナの入出力に接続
-p:外部からアクセスされるポート番号:コンテナ側のポート番号を指定
-v:ディレクトリのマウント設定、ローカルのディレクトリ:マウントポイント
-name :コンテナ名を指定
コンテナの状況を確認
docker ps コマンドで
起動中のコンテナ確認
$ docker ps
起動していないコンテナも含めて確認
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 361bf7a7ffb9 test_container "date" About an hour ago Exited (0) About an hour ago ecstatic_solomon
検証するときや、開発環境用には、 “--rm” オプションをつけよう
作り始めはバンバン修正しながら作っていくのでコンテナ終了してもゴミが残らないように
コンテナ実行
$ docker run --rm <コンテナイメージ名>
コンテナ実行と同時にコンテナに入る(bashがある場合)
画面表示のオプション-it と、実行シェル /bin/bash を指定
$ docker run --rm –it <コンテナイメージ名> /bin/bash
ローカルの Pythonファイルを編集
おてがる開発環境を作る上での目玉の手法です
Docker のホストマウントを使います
Pythonファイルはローカルのエディタで編集しつつ
実行するのは、コンテナの中で実行
こうすることで、開発環境を作っては、FTPやSCPでファイルを送ったりSSHして vi みたいな手間が全部無くなります
コンテナからローカルフォルダをマウント方法
オプション -v "ローカルフォルダ : コンテナ内のマウントポイント"
(例)
$ docker run --rm -it -v “C:\work\sample\app\:/home/app" --name python394 test_container /bin/sh
これで準備完了
あとは、
・ローカルのエディタで python ファイルを編集
・Docker コンテナは好きなバージョンの Python 環境を用意して、実行して確認
開発環境をいつでも潰して、作りなおしたり、持ち運びができます
コンテナイメージの更新
コンテナでは基本的に起動後はコンテナ内のファイルは固定(変更しない)、いつ起動しても同じ環境を再現できるイミュータブル性を確保します
なので、コンテナにパッケージやモジュールを追加したい場合は、dockerfile を修正してコンテナを再作成しよう
おまけ
本番環境でコンテナを作るのときのセキュリティについて
#ベースコンテナのtag(バージョン)はちゃんと指定することFROM python:x.x.x
# 設定ファイルの書き込み権限をなくすRUN chmod a-w /etc
# シェルを実行させないRUN rm –rf /bin/*
# ユーザ指定する(デフォルトは root になる)USER appuser