Dockerの備忘録
- コンテナの中に入るときは -v オプションでhostのファイルシステムと同期する
$ docker run -it --rm -v (ホストの絶対パス):(コンテナの絶対パス) -p 3000:3000 <イメージ名> sh
でコンテナの中に入る- Dockerfileは1つのプロジェクトに1つだとは限らない。いくつでも置ける。
ホストのイメージの一覧を確認する
$ docker images
アクティブなコンテナを表示
$ docker ps
全てのコンテナを表示
$ docker ps -a
ポートをつなげる
$ docker run -it --rm -p 8000:8000 <イメージ> bash
runについて
--rm
でコンテナをexit後に消す。つまり一度きりのコンテナ。
$ docker run
の詳細
- イメージを探す→なかったらdocker hubからpull
- イメージからコンテナを作成
- 中のプログラム(デフォルトのCMD)を実行
- exitする
つまり runをするたびに新しいコンテナが作成される
コンテナの削除
$ docker rm <コンテナ>
コンテナを停止
$ docker stop <コンテナ>
全消し
$ docker system prune
Dockerfile
イメージにタグ(別名)をつける
docker build -t <名前> .
ベストプラクティス:レイヤーは最小限にする。
レイヤーを作るのは ADD, RUN, COPY
Dockerfileを書いている途中ではRUNを連発するほうがいい。なぜならキャッシュを使用することでビルドが早くなるから。
CMD: デフォルトのコマンドを定義する。Dockerfileには最後に一回だけ書く。一回しか使えない。
ADDとCOPYを使うことで、build contextのファイルをコンテナに持っていくことができる。99%はCOPYでよい。ADDはtarの圧縮ファイルを解凍するときに使う
Dockerfile内では
cd
を使わない。代わりにWORKDIR
を使う。cd
を使うと&&で繋げないとルートディレクトリに戻ってきてしまう。Dockerfileを変更すると必ず再度ビルドする必要がある。さもないと古いイメージが使われてしまう。
docker-compose
runのコマンドが長い or 複数のコンテナをまとめる役割で使用する。
docker-compose.yml
に指定するパスは必ず相対パスを使う。-it
はtty: true
(綺麗に表示する)stdin_open: true
(入力できるようにする) オプションである。$ docker-compose up
はビルドもできる。古いイメージを使わないためには--build
を使う。もしくは$ docker-compose build
つまり↓の手順1 Dockerfileからイメージを作成
- 2 作成したイメージからコンテナを作成
- 3 コンテナを起動してデフォルトのコマンドを実行
Dockerによる開発
- ホストのファイルとコンテナのファイルを同期
- ホストの環境では原則何もインストールしない
- コンテナの中に入っていろいろインストール && サーバーを立てる
- docker-compose run <サービス名>でコンテナに対してコマンドを実行する
- ホストでファイルを編集→コンテナのサーバーで動作確認