夢のかけら

Goエンジニアの技術ブログ

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の詳細

  1. イメージを探す→なかったらdocker hubからpull
  2. イメージからコンテナを作成
  3. 中のプログラム(デフォルトのCMD)を実行
  4. 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に指定するパスは必ず相対パスを使う。

  • -ittty: true(綺麗に表示する) stdin_open: true(入力できるようにする) オプションである。

  • $ docker-compose upはビルドもできる。古いイメージを使わないためには--buildを使う。もしくは $ docker-compose build つまり↓の手順

  • 1 Dockerfileからイメージを作成

  • 2 作成したイメージからコンテナを作成
  • 3 コンテナを起動してデフォルトのコマンドを実行

Dockerによる開発

  1. ホストのファイルとコンテナのファイルを同期
  2. ホストの環境では原則何もインストールしない
  3. コンテナの中に入っていろいろインストール && サーバーを立てる
  4. docker-compose run <サービス名>でコンテナに対してコマンドを実行する
  5. ホストでファイルを編集→コンテナのサーバーで動作確認