以下の練習を行うためのリポジトリ。 ※ApplicationサーバはFlaskで作成。このサーバの処理内容はhealthチェックAPIくらいしか持たない(この部分はこのリポジトリのコア目的ではないため)
- Nginx+Gunicorn(uWSGI)にてWebサーバ+APPサーバの構成をローカルで立ち上げられるようにする。[Completed]
- 1の設定をheroku上でデプロイ。[Skip]
- Webサーバ、APPサーバをDocker化。[Completed]
- 3をdocker-composeで管理[Now]
- DBサーバ(PostgresSQL)をかませる。[Order Changed]
- Ansible等を利用してさらなる管理効率化。
- make build - app-server、web-serverコンテナイメージをビルド
- make run - appサーバ、webサーバのコンテナをdocker-composeにて起動。基本はこれを利用。
- make run_web - webサーバコンテナを起動
- make run_app - appサーバコンテナを起動
- make cleanup - 停止コンテナを破棄、さらにapp-server、web-serverコンテナイメージを削除
http://localhost:8000/ http://localhost:8000/health/ http://localhost:8000/test/
1つのYAMLファイルに複数のDockerコンテナ定義を行い、 複数コンテナの管理、連携を効率化するツール。k8sよりも手軽に使える分、k8sよりもできることはかなり少ない。ローカルでLTレベルの動作確認を行うのであればこれで十分だと思われる。
docker-compose -f {YAML_FILE} up -d
- -f {YAML_FILE} : 起動時のyamlファイルを指定。指定なしだとカレントの「docker-compose.yml」が設定される。
- -d : upのオプション。バックグラウンドで実行される。逆に-dを指定しなければ、ターミナル上にcompose構成コンテナのログを見ることができる。
docker image build -f deployment/dockerfiles/web-server/Dockerfile -t centos:nginxtest . # 最後の「.」がカレントディレクトリで実行の意
- -f {DOCKER_FILE} : Dockerファイルの指定。
- -t タグの指定.「:」の左側がリポジトリ名称、右側がタグ名称となる。
docker run --rm --name nginx_test -p 9090:9123 centos:nginxtest
- --rm : 終了時、自動的にコンテナを削除
- --name : コンテナの名称を指定
- -p : ポートフォワーディング。左側がDockerコンテナのポート、右側がホストPCのポート。
- docker ps : 現在稼働中のコンテナの一覧。「-a」をつけるとすべてのコンテナを表示。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc967a8d3527 centos:nginxtest "nginx -g 'daemon of…" 4 seconds ago Up 2 seconds 80/tcp, 0.0.0.0:9090->9123/tcp nginx_test
- docker images/ docker image ls : イメージ一覧。「-a」をつけると中間イメージも含めて表示
- docker container rm {CONTAINER_ID} : 指定したコンテナを削除
- docker image rm {IMAGE_ID} : 指定したイメージを削除。ただし、指定イメージで作成されたコンテナが存在している場合エラーとなる。この場合、コンテナを削除してからイメージを削除する必要あり。
- docker exec {CONTAINER_NAME} {COMMAND} : 稼働中のコンテナ内で{COMMAND}を実行。結果はコンソールに表示。
- docker attach {CONTAINER_NAME} : 稼働中のコンテナ内部に入る。Ctrl+Qでホストの戻ることができる。
link
or network
での接続が可能。ただしlink
は公式ドキュメント上でlegacy feature
とされており、推奨されていない。よってnetwork
よりデフォルトで提供されるBridgeインターフェースを用いる。
- ネットワークの確認
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
518552b941b8 bridge bridge local <-使うのはこれ
be46431a0b28 host host local
50e2c508a603 none null local
- 独自Bridgeネットワークの作成
docker network create --driver bridge {NW_NAME}
docker network inspect {NW_NAME} # 確認用コマンド
- コンテナをネットワークに所属させて起動
docker container run --network {NW_NAME} {IMAGE_NAME}