Dockerのお勉強 (2)
続き
第3回 Docker入門(第三回)~各種dockerコマンドとDockerイメージ作成について~
自分でミドルウェアやアプリを追加したDockerイメージを作る
docker run
のその他オプション-i
アタッチしていなくても STDIN をオープンにし続ける-t
疑似ターミナル (pseudo-TTY) の割り当て-v ホスト側ディレクトリ:コンテナ側ディレクトリ
ホストとコンテナのディレクトリ共有
- CentOS7のイメージ名
centos:7
- ホストからコンテナへのコピー
docker cp ホスト側ファイル コンテナ名:コンテナ側ディレクトリ
- コンテナが起動してなくてもログが取得できるようにディレクトリを共有しておく
- dockerコンテナを作るふたつの方法
- コマンドをdockerfileに書いて作成する
- コンテナからイメージを作成する
docker commit コンテナ名 作成するDockerイメージ名
- 再現性の点からdockerfileを使う方法がおすすめ
Infrastructure as a codeだなあ
第4回 Docker入門(第四回)~Dockerfileについて~
dockerfileの中身について
- dockerfile
FROM コンテナ名
コンテナの指定RUN コマンド
コンテナ内でコマンドを実行ADD tar.gzファイル ディレクトリ
コンテナにtar.gzを展開するUSER ユーザ名
ユーザ変更WORKDIR ディレクトリ名
ディレクトリ変更CMD ["コマンド" "オプション"]
コンテナ起動時に実行するコマンドの指定
- dockerfileからイメージを作成
docker build -t Dockerイメージ名 Dockerfileのディレクトリ
- dockerfileの各コマンドを実行するたびに中間イメージ(レイヤー)を作る
- ディレクトリがもとに戻ってしまうので注意
- RUNでコマンドを連続して実行したい場合は&&などを使う
- レイヤーはキャッシュとして利用される
- 複数のイメージで共通に行う処理は先頭の方に入れておくとキャッシュが有効に利用される
- 一つのコンテナでは一つの機能(アプリケーション)を動かすのが普通なのでコンテナ間通信が必要
- --linkオプションを使う方法はレガシーなので使わない
- Dockerネットワークを作ってコンテナ名で接続する
- DNS設定がされてコンテナ名で名前解決ができる
- 接続先を設定するところでコンテナ名を指定することになる
- Dockerネットワークを作成する
docker network create Dockerネットワーク名
- Dockerネットワークの一覧
docker network ls
- Dockerネットワークの詳細表示
docker network inspect Dockerネットワーク名
- Dockerネットワークの指定
docker run --network Dockerネットワーク名
- 複数ホストの間で通信を行うときはKubernetesなどのコンテナオーケストレーションツールを使うと便利
第6回 Docker入門(第六回)〜Docker Compose〜
- Docker Composeは複数コンテナをまとめて管理するツール
- コンテナのビルドや起動をdocker-compose.ymlに書いて使う
- Dockerネットワークは自動的に作成されるので記述は不要
- イメージのビルド
docker-compose build
--build-arg http_proxy=http://プロキシサーバIP:ポート
プロキシ設定(http)--build-arg https_proxy=http://プロキシサーバIP:ポート
プロキシ設定(https)
- 実行
docker-compose up -d
- 起動状態の確認
docker-compose ps
- コンテナの停止
docker-compose stop
- コンテナの削除
docker-compose rm
-f
強制的に削除
- 停止、削除、ネットワーク削除
docker-compose down
--rmi all
イメージも削除
使いそうな分はだいたいわかった気がする
あとは公式のリファレンスでいけるかな?