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=/app
app-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