Docker
Dockerとは
Dockerとは、コンテナ方式で仮想化を行う基盤ソフトウェアです。コンテナは、VMwareやHyper-Vのような仮想化方式に比べるとリソースの消費が少ないのが特徴です。 開発環境から本番環境に持っていったりクラスタ構成にしたりすることが容易 ツールがインストール済みのDockerイメージを仕えば簡単にツールが起動する
Dockerイメージは、Web上のDocker Hubで公開されている
公式なものと個人が公開したものとあるので注意
公式サイト
Dockerのインストール・設定
ここは実施してないので未稿です。
Dockerには無償のCommunity Editionと有償のEnterprise Editionがある
Dockerのインストール・起動・プロキシ設定
Dockerイメージ・コンテナの操作(基本)
コンテナの中身をまとめたものをイメージと呼びます。Dockerのサイトからイメージをダウンロードして使うことができます。各種ディストリビューションだけでなく、ツールをあらかじめ組み込んだイメージが用意されていて、簡単にツールを起動することができます。
イメージを取得する # docker pull イメージ名
CentOS7のイメージ名 centos:7
:7はタグ
持っているイメージの一覧 # docker images
イメージの削除 # docker rmi イメージ名/イメージID
イメージからコンテナを起動する # docker run イメージ名
イメージがなければdockerがイメージを取ってくる
プロセスが全部止まるとコンテナが停止する
-d バックグラウンドで実行
-p 8080:80 ホストの8080番ポートとコンテナの80番ポートの間のポートフォワード
--name コンテナ名を指定
-i アタッチしていなくても STDIN をオープンにし続ける
-t 疑似ターミナル (pseudo-TTY) の割り当て
-v ホスト側ディレクトリ:コンテナ側ディレクトリ ホストとコンテナのディレクトリ共有
コンテナを停止する docker stop コンテナ名
コンテナの状態を確認する docker ps -a
コンテナの削除 docker rm コンテナ名/コンテナID
ホストからコンテナへのコピー docker cp ホスト側ファイル コンテナ名:コンテナ側ディレクトリ
コンテナ内でのコマンドの起動 docker exec -it コンテナ名 コマンド
docker exec -it コンテナ名 bashでbashが起動
カスタムイメージの作成
イメージはダウンロードしてくるだけでなく、自分で作成することもできます。自分のプログラムや、それが利用するミドルウェアなども組み込んだイメージを作れば、セットアップ不要で簡単に起動や停止などが行えるようになります。
dockerコンテナを作るふたつの方法
コマンドをDockerfileに書いて作成する
コンテナからイメージを作成する docker commit コンテナ名 作成するDockerイメージ名
再現性の点からDockerfileを使う方法がおすすめ
コンテナが起動してなくてもログが取得できるようにディレクトリを共有しておくとよい
Dockerfile
FROM コンテナ名 コンテナの指定
RUN コマンド コンテナ内でコマンドを実行
ADD tar.gzファイル ディレクトリ コンテナにtar.gzを展開する
USER ユーザ名 ユーザ変更
WORKDIR ディレクトリ名 ディレクトリ変更
CMD ["コマンド" "オプション"] コンテナ起動時に実行するコマンドの指定
Dockerfileからイメージを作成 docker build -t Dockerイメージ名 Dockerfileのディレクトリ
Dockerfileの各コマンドを実行するたびに中間イメージ(レイヤー)を作る
ディレクトリがもとに戻ってしまうので注意
RUNでコマンドを連続して実行したい場合は&&などを使う
レイヤーはキャッシュとして利用される
複数のイメージで共通に行う処理は先頭の方に入れておくとキャッシュが有効に利用される
コンテナ間通信
一つのコンテナでは一つの機能(アプリケーション)を動かすのが普通なので複数アプリが連携する場合はコンテナ間通信が必要となります。ここでは、1ホスト上でのコンテナ間通信の設定を扱います。複数ホストにまたがって通信を行うときはKubernetesなどのコンテナオーケストレーションツールを使うと便利です(だそうです)。
--linkオプションを使う方法はレガシーなので使わない
Dockerネットワークを作ってコンテナ名で接続する
DNS設定がされてコンテナ名で名前解決ができる
接続先を設定するところでコンテナ名を指定する
Dockerネットワークを作成する docker network create Dockerネットワーク名
Dockerネットワークの一覧 docker network ls
Dockerネットワークの詳細表示 docker network inspect Dockerネットワーク名
Dockerネットワークの指定 docker run --network Dockerネットワーク名
Docker Compose
Docker Composeは複数コンテナをまとめて管理するツールです。コンテナのビルドや起動をdocker-compose.ymlに書いて使います。
docker-compose.yml
services: サービス
container_name: コンテナ名
environment: 環境変数
ポートの公開 ports: ホスト側ポート:コンテナ側ポート
image: Dockerイメージ
volumes: ディレクトリ共有
build: Dockerfileのあるディレクトリを指定
Dockerネットワークは自動的に作成されるので記述は不要
イメージのビルド docker-compose build
プロキシ設定(http) --build-arg http_proxy=http://プロキシサーバIP:ポート
プロキシ設定(https) --build-arg https_proxy=http://プロキシサーバIP:ポート
実行 docker-compose up -d
起動状態の確認 docker-compose ps
コンテナの停止 docker-compose stop
コンテナの削除 docker-compose rm
-f 強制的に削除
停止、削除、ネットワーク削除 docker-compose down
--rmi all イメージも削除
参考にしたサイト
さくらの技術ブログを参考にしました。上のまとめは覚え書きなので、イチから勉強するならこちらを読んだほうがいいです。
関連ブログ