30代専業主婦の独学エンジニア挑戦ブログ

実務未経験の30歳の専業主婦が独学でエンジニアを目指すブログです

「プログラマのためのDocker教科書」を読みました(2)

勉強記録 

今日は昨日に引き続き「プログラマのためのDocker教科書」を読みました。

<第1章>については昨日のブログでまとめたので、<第2章>から<第6章>までの重要そうなところを中心にまとめました。

 

programming-kanamama.hatenablog.com

 

 

 

<第2章> コンテナ仮想化技術とDocker

仮想環境

物理的なハードウェアを持たず、仮想的にOSを動かし、その上でアプリケーションを動作させる。(例えば、Windowsマシンの中で、仮想的にLinuxサーバを動かすことも。PC上に擬似のPCを作るイメージ)
物理的なサーバを持たないのでメンテナンスの負荷も下がる。
開発環境と本番環境で違う!というのを解消するために仮想化技術が生まれた。
ライブラリもパッケージマネージャー(ex:PHPならComposer)で管理できるがアプリケーションレベルなので、サーバ本体までは管理できない。でも仮想化技術のおかげでそれが可能に。
 
現在使われている仮想化技術は3つ
ホスト型仮想化
ハードウェアの上にホストOSをインストールし、ホストOSに仮想化ソフトウェアをインストールする。仮想化ソフトウェアの上でゲストOSを動作させる。Oracle VM VirtualBoxVMWare Player。
手軽に導入できるけど、スペックが低いPCだと遅くなってしまう。
 
ハイパーバイザー型仮想化
ハードウェア上に仮想化を専門に行う「ハイパーバイザー」というソフトウェアを配置し、ハードウェアと仮想環境を制御する。Hyper-VやXenServer。
クラウドの仮想サーバ機能でも使われている方法。
 
コンテナ型仮想化
ホストOS上にコンテナを作り、アプリケーションを動作させるのに必要なライブラリやアプリケーションなどをコンテナ内に閉じ込めて、あたかも個別のサーバのように使えるようにしたもの。Dockerはコンテナ型仮想化技術を使っている。
VMはOSを含めて動作するけど、DockerコンテナではホストOSとカーネルを共有しているので、軽量で高速に動作するのが特徴。
 
 

Dockerの基本機能

Dockerには大きくわけて3つの機能がある
 
Dockerイメージを作る(重要)
アプリケーションの実行に必要になるプログラム本体、ライブラリ、ミドルウェアや、OSやネットワークの設定などを1つにまとめたDockerイメージを作る。
Dockerイメージはコンテナのひな形となる。
Dockerイメージはコマンドを使って手動でも作れるが、Dockerfileというプログラムを作って自動でイメージを作る。Dcokerイメージは積み重ねて使うことができる。
Dockerコンテナを動かす(重要)
DockerはLinux上でコンテナ単位でサーバ機能を動かす。このコンテナのもとになるのがDockerイメージ。
Dockerイメージがあれば、Dockerがインストールされている環境でどこでもコンテナを動かすことができる。
Dockerイメージから複数のコンテナを起動することもできる。
Dockerイメージを公開/共有
Docker Hubで個人が作成したイメージを自由に公開して共有することができる。
Docker HubはGitHubと連携することもできるから、GitHub上でDockerfileを管理して、そこからDockerイメージを自動作成し、Docker Hubで公開することも可能。
 
 

<第3章>Dockerのインストールと基本コマンド

docker pull (イメージのダウンロード)

docker pull (オプション) イメージ名(: タグ名)
タグ名を省略すると最新バージョンが取得される
 

docker images (イメージの一覧表示)

docker images (オプション)(リポジトリ名)
取得したイメージの一覧表示。
 

docker rmi (イメージの削除)

docker rmi (オプション)イメージ名 (イメージ名)
作成したイメージを削除。複数削除したい場合は、イメージ名をスペースで区切って指定。
 

docker run (コンテナ生成/起動)

イメージからコンテナを生成し、コンテナ上でプロセスを起動する。
 

docker start(コンテナ起動)

停止中のコンテナを起動するときに使う。コンテナに割り当てられたコンテナ識別子を指定して起動する。
 

docker stop(コンテナの停止)

起動しているコンテナを停止する。コンテナを削除するときは、起動中のコンテナを停止しておく必要がある。
 

docker rm (コンテナ削除)

停止しているコンテナを削除する。
 

docker ps -a(稼働コンテナの一覧)

稼働コンテナの一覧を見ることができる。
 
この他にもコマンドはあるが、必要なときに覚えればOK
 

<第4章> Dockerfileを使ったコードによるサーバ構築

DockerfileはDockerイメージを作るもので、イメージを作成する手順がコードで書かれている。
Dockerfileさえあれば、Dockerエンジンが動作している環境であればどこでもDockerイメージを生成できる。
 

DockerfileからDockerイメージを作成

docker buildコマンドでDockerfileからイメージを作成することができる。
docker build -t (生成するイメージ名): (タグ名)(Dockerfileの場所)
 
つまり、イメージを作るには
dockerfileを作って、ビルドする!
 
ローカル環境にイメージがあれば新たにダウンロードしない。
 

Dockerイメージのレイヤー構造

Dockerfileをビルドしてイメージを作成すると、Dockerfileの命令ごとにイメージを作成する。
作成された複数のイメージはレイヤー構造になっている。(複数のイメージを積み重ねている)
 
 

<第5章> Dockerイメージの共有 -Docker Registry-

Docker Hubはイメージを共有できるけど、パブリックなレジストリである。
イメージを不特定多数に公開できない場合もあるので、そういうときにはプライベートレジストリの構築、管理が必要。
 

<第6章> 複数コンテナの一元管理 -Docker Compose-

サーバは1つではない。複数のサーバに機能や役割を分割してインフラの全体構成を決める
フロントサーバー(Webサーバ)、アプリケーションサーバ、データベースサーバ
Webシステムのサーバ群を役割ごとにこの3つに分ける設計思想を、Web3層アーキテクチャと呼ぶ。
 

Docker Compose

複数のコンテナをまとめて管理するためのツール。(全てのサーバを一気に立ち上げる)
まとめて管理することで複数のコンテナを同時に1コマンドで起動・停止することができる。
開発環境を作るとき楽にするために使う(本番環境では使わない)
 
dockerfileでイメージを生成して、docker runしてもOKだけど、複数行うのは大変だし手順もあるから失敗する可能性もある。
Docker Composeでまとめて管理すれば、1コマンドで行うことができる。
 

docker-compose.ymlの構文

Docker Composeはdocker-compose.ymlという設定ファイルに複数のサーバ群の構成をまとめて定義する。(YAML形式で書かれている)
 
ベースイメージの指定(image/build)
Dockerコンテナのもとになるベースイメージの指定にimageを使う。
イメージの構成をDockerfileに記述して、それを自動でビルドしてベースイメージに指定することもできる。
 
コンテナ内で動かすコマンド指定(command)
ベースイメージで指定されているときは、そのコマンドを上書きする
 
コンテナ間リンク連携(links/external_links)
別のコンテナへリンク機能を使って連携したいときは、linksに連携先のコンテナ名を設定する。
 
コンテナ間の通信(ports/expose)
コンテナが公開するポートはportsで指定する。
ホストマシンへポートを公開せず、リンク機能を使って連携するコンテナにのみポートを公開するときはexposeを指定する
 
コンテナのデータ管理(volumes/volumes_from)
コンテナにボリュームをマウントするときはvolumesを指定する。
別のコンテナからすべてのボリュームをマウントするときは、/volumes_fromにコンテナ名を指定する。
 
コンテナの環境変数指定(environment)
コンテナ内の環境変数を指定するときは、environmentを指定する。
 
コンテナの情報設定(container_name/labels)
Docker Composeで生成されるコンテナに名前をつけるときはcontainer_nameを指定する。
コンテナにラベルをつけるときはlabelsを指定する。
 

Docker Composeコマンド

複数コンテナの生成(up)
作成したdocker-compose.ymlをもとに、複数のコンテナの生成/起動を行うとき
 
生成するコンテナ数の指定(scale)
コンテナを生成する数を指定するとき
 
複数コンテナの確認(ps/logs)
複数コンテナの一覧表示を行うとき
 
コンテナでのコマンド実行(run)
Docker Composeで起動したコンテナで、新たにコマンドを実行したいとき
 
複数コンテナの起動/停止/再起動(start/stop/restart)
Docker Composeを使うと、複数のコンテナを一括で起動・削除・再起動することができる。
 
複数コンテナの強制停止/削除(kill/rm)
実行中のコンテナを強制終了するときには、docker-compose killコマンドを実行する。
生成した複数のコンテナを削除するときは、docker-compose rm コマンドを実行する。
 

コンテナの起動とデータの確認

Docker Composeの設定ファイルの用意ができたら、コンテナをバックグラウンドで起動する。
docker-compose up -d でバックグラウンドで起動。