dockerの使い方
- ユースケース
- 最終的な提出物になることが多い
debian, ubuntuへのインストール
- デフォルトパッケージと
aptで入るdockerは良くないらしい - 公式のドキュメントに従って入れる
- ユーザをdocker groupに追加する
sudo usermod -aG docker $USER
dockerをインストールしていることでOSの調子が悪い時
- 動作させているカーネルのバージョンを下げる
- 下げた状態で
docker-ceなどdocker関連のパッケージを削除することで復帰することができる - 公式のdockerが安定するまでしばらく様子を見る
コンテナとイメージの違い
- イメージ
- コンテナの元。ここからコンテナというインスタンス(実態)を生成
- コンテナ
- イメージから生成された実態
- commitすることでイメージすることができる
各コマンドと機能
localhostで起動しているサーバに接続したいとき
- コンテナ起動時のオプションに
--network="host"をつなげるとIPを分離しなくなる
-t, --ttyオプションについて
ttyをホストのttyに接続するかどうかのオプション
多くの場合、ttyに接続しても動作するが、GCEのスタートアップスクリプトなどはttyが存在しなく、-tオプションなしで動作を期待することがある
-i, --interactiveオプションについて
-tと組み合わせて利用するケースが多い
dockerコンテナと対話式にすすめるケースにこのオプションを設定する
-v, --volumeオプションについて
docker -it -v volume:/volumeとdocker -it -v $PWD/volume:/volumeでは意味が異なる
POSIXパスで記入すると、ローカルのファイルシステムにマップするものになる
そうでないと、docker volumeというdocker固有のファイルシステムにマップされる
-m, --mountオプションについて
--volumeオプションとほぼ同一であるが、歴史的経緯により、残っている
引数がカンマ区切り
- 具体例
--mount type=bind,source=$(pwd)/app,target=/app$(pwd)/appとdockerの/appをバインドする
--mount type=volume,source=app-data,target=/appapp-dataボリュームと/appにマウントする
volumeの確認
$ docker volume ls
-e, --envオプションについて
環境変数をコンテナに設定するもの
dockerfileに記述すると都合が悪いものは、実行時に渡すなどする
$ docker run --env FOO=$FOO -it <container-name>
FOOという環境変数を渡す例
dockerfileに記述済みの環境変数をunsetするには以下のように、具体的な値無しで指定して実行する
$ docker run --env FOO= -it <container-name>
--env-fileオプションについて
ファイルから環境変数を読み込むもの
$ docker run --env-file <file-name> -it <container-name>
--network=hostオプションについて
hostにredisサーバなどが建っている時に、コンテナからlocalhostでアクセスしたいときに、このオプションにする
$ docker run -it --network=host <container-name>
不要なイメージ、コンテナ、ボリュームの削除
$ docker system prune -a
コンテナを起動する
既存にイメージがある場合
$ docker start <container-image>
イメージが無ければ作る or ダウンロードして起動
$ docker run <container-image>
イメージをpull/ダウンロードする
$ docker pull <container-name>
コンテナを強制終了する
$ docker kill <container-name or id>
- dockerのコードは
Ctrl + cでキャンセルできないことがあるので、docker psでプロセスを特定して終了する必要がある
コンテナの標準入出力に接続する
$ docker attach <container-name or id>
コンテナをpush/アップロードする
$ docker push <container-name or id>
コンテナを一時停止
$ docker pause <container-name or id>
ネットワークの一覧を表示
$ docker network list