Skip to content

Instantly share code, notes, and snippets.

@wtnbgo
Last active October 12, 2022 14:28
Show Gist options
  • Save wtnbgo/ce939e9792ef58b9185db77aa27c7079 to your computer and use it in GitHub Desktop.
Save wtnbgo/ce939e9792ef58b9185db77aa27c7079 to your computer and use it in GitHub Desktop.
Docker超概要めも

docker超ざっくり概要

「特殊なコマンドライン環境」または「Webアプリ環境」をお手軽にローカルマシンで実行できるシステム

この動作環境を「コンテナ」と呼びます。 docker desktop はWindows 上でのこの「コンテナ」を管理 するためのアプリで、docker コマンドで操作できます。

※ほんとに超ざっくりなので正確なところは別途お調べください

実例1:コマンドライン環境 python3.7 で動作確認する必要があるけど手元の環境にインストールしたくない

# python 3.7 のイメージを取得
docker pull python:3.7

# それを指定してコンテナ起動して bash を実行。このときローカルの c:\work フォルダを /work にわりあて
docker run -it -v c:\work:/work --rm python:3.7 bash

これで python3.7 が使える状態の Linux の bash 環境が簡単に使えます。 ファイルのやりとりは -v で共有したフォルダを使います。 pip とかで任意のライブラリをインストールしてもホストのOSには影響ありません。

exit すると終了してもどってきますが、--rm 指定してるので、 作成された環境(コンテナ)はそのまま破棄されます。

実例2: slack代用で使えそうな mattermost を試してみたい

docker pull mattermost/mattermost-preview
docker run --name mattertest -d -p 8065:8065 mattermost/mattermost-preview

-d 指定してるのでログは出さずにバックグラウンドで起動します。 -p はコンテナのネットワークポートとローカルPCのネットワークポートをつなぐ指定です。 これによって localhost にブラウザでアクセスするとコンテナに繋がるようにできます

しばらくして以下にアクセスすると使える状態になってます ※ -d で起動した場合のログなどをみたい場合は、Docker Desktop のコンテナ一覧の先から見れます

http://localhost:8065

-d で起動してる場合は、コンテナを停止したい場合は別途命令します。 (-d なし起動で ctrl-c は stop に相当します)

docker stop mattertest # コンテナ停止(作成時に指定した名前で処理)
docker rm  mattertest # コンテナ削除(作成時に指定した名前で処理)

コマンド概要

docker pull  : ネットワーク上で配布されてるイメージを取得
docker build : Dockerfile に記述された手順に従ってイメージを作成
docker run   : イメージを使ってコンテナを作成して起動する
docker stop  : コンテナを停止
docker start : コンテナを開始
docker rm    : コンテナを削除
docker exec  : コンテナに接続してコマンド実行

「コンテナ」を起動するときは、その中に入ってるファイル情報などを集めた 「イメージ」が必要です。イメージは 「Dockerfile」 というファイルに決まって書式で定義された手順によって作成できます。 また、あらかじめ構築済みのイメージが DockerHub などで公開されているので、 それを pull すれば自分で構築しなくても使えます。

著名な言語、OS環境、Webアプリなどは、たいてい公式が Docker イメージをつくって配布してるので、それを使うとローカル環境には 影響しない形で簡単に動作テストできます

docker コマンドは、単体動作するコンテナなら特に過不足なく使えるのですが、 複数コンテナを組み合わせてつかいたい場合や、コンテナ用のネットワークや 変数指定などの細かい制御をしたい場合だと対応しきれません。

この場合は「docker-compose.yml」という、コンテナの同士の制御を行う 定義を記述して使うことができます。このファイルがある場所で docker compose コマンドを使うとその定義した構成で一括制御できます

docker compose build  定義にしたがってイメージ再構築
docker compose up     定義に従ってコンテナを構築して実行
docker compose stop   構築済みコンテナを停止
docker compose start  構築済みコンテナの停止してるものを再開
docker compose down   構築済みコンテナを全部削除

docker 上で動作するアプリ構成を配布したい場合は、単純なものなら Dockerfile のみ、 複雑なものは docker-compose.yml つきの形で配布しておけば、誰でもそれをつかって 再構築して自分の docker 環境に登録して使えることになります

ここまで踏まえてから例の案件の解説

$ git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git

git はファイルを履歴記録して共有するためのシステムです。 これで参照してるURL の先には、 AbdBarho さんが、stable diffusion と、Webアプリとしての AUTOMATIC1111 一式がきちんと動作するようにいいかんじに構築してくれた Dockerfile と docker-compose.yml が入った Docker 用の構築ファイル一式があります。

git clone は該当ファイル一式(レポジトリ)を取得するコマンドです

$ cd stable-diffusion-webui-docker

git clone で取得してきたフォルダに入ります

$ docker compose --profile download up --build

docker compose を使って、docker-compose.yml の中に定義されてるコンテナ処理を起動してます。 docker-compose.yml の中には複数の処理を含めることができて、ここでは download として定義されてる処理を、イメージ構築、クラスタ作成して起動、 してることになります。

こちら詳細は省きますが、該当処理では、Stable Diffusion 用のデータ一式をダウンロードしたら そのまま速やかに終了するような処理がかかれてます。基本的には1度実行したら、 モデルデータなどの更新がなさそうな場合は実行しなくて大丈夫です

$ docker compose --profile auto up --build

profile名 auto を指定して、イメージ構築、クラスタ起動してます。 こちらの処理が本命の AUTOMATIC1111 のWebアプリ処理が入ってます。 処理完了したらlocalhost:7680 に目的のWebアプリが立ち上がってそのまま起動しつづけます

作成されたコンテナの操作

基本的にコンテナは、1度作成されたら削除されるまで残ってます。 docker run または docker compose up 時に -d オプション指定した場合は、ログをださずにバックグラウンドで動きます。 -d なしの場合は、ログ出力してターミナルと接続したままになり、Ctrl-C で停止できるようになってます

停止後、再起動する場合は、docker start すればいいのですが、docker compose で準備したものは 基本的には同じフォルダで docker compose start/up するほうが適切な起動手順になります (複数コンテナがある場合など一括で処理しないとうまく動かない場合があります)

up はコンテナ立ち上げからしてくれますので、通常は up でOKです。

down するとコンテナやコンテナ動作中のファイルを記録してるボリュームまで消されるので注意必要です。 もうつかわなくなった環境を破棄する場合は down すれば関連物を一括で消してくれます。

--build があると、build してから up します。DockerFile や docker-compose.xml が更新されていた 場合にはこれで再構築が行われることになります

マシンが再起動した場合は、コンテナは停止した状態になりますが、 docker run 時に -always を指定、あるいは、docker compose の場合は、 docker-compose.xml 中に restart: always 指定があると、 docker desktop が起動したときにそのコンテナもあわせて起動してくれるようになります。 必要に応じて設定できます

該当案件の更新処理

https://github.com/AbdBarho/stable-diffusion-webui-docker.git

は、作者さんが日々最新の状況にあわせて更新してます。 なのでそれを自分にも反映したい場合は、git コマンドで更新取得後、 イメージとコンテナをつくりなおす必要があります この場合は以下の手順をとってください

git pull

git を最新の状態に更新。Dockerfile やら docker-compose.xml が更新されることになります。 これを反映するには構築ごと再実行します。

docker compose --profile download up --build
docker compose --profile auto up --build

--build つきで再起動すれば、更新部分が反映されてクラスタが再構成されます。

※git や docker コマンドの詳細はまた別途お調べ下さい

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment