Docker修行中
はじめに
とりあえず、勉強中の殴り書きをすることに
Dockerとは
コンテナ仮想技術と言われている
例えば、クラウドであれば物理的に異なるハードウェア&OSに対してTCP等で接続するもの
VirtualMacheneは物理的に同じハードウェア上に異なるOSを動かす
Dockerはコンテナとしてそれぞれのサービスを立ち上げる
VMと何が違うかを説明するのがまだ難しいんだけど
VMはゲストOSをインストールしその中にすべてのサービスをインストールするが
Dockerは サービス単位でコンテナを作り起動する
とりあえず、Dockerのほうが軽いと思っていいかな
ではなぜDockerを使うかというと
今までの開発では、ローカルに環境を作って開発をしていた
新人が入れば環境構築マニュアルを見てセットアップ行い、たいてい失敗して数日かかる
特に WindowsだけでなくMacで開発することも多い
それらの環境構築を、仮想コンテナで環境を整えるので、セットアップが速い
Dockerの種類
Dockerは基本的に Linuxカーネルでしか動かない
そのため、WindowsでもMacでも まずは VMの上にLinuxを動かし、そのうえでDockerを動かす必要がある
ところが Windows10 Pro 64bitでは、Hyper-V上に直接Dockerを動かす事が出来る
マジすばらしい!
ところが WindowsではBashが動かないため、Macや DockerWindowsが動かないWindowsでも開発する場合
シェルスクリプト対策をする必要がある
Bash on Windowsは便利だが、こちらもHyper-Vで動いているため、ホストのDockerを直接見ることが出来ない
そのため Bash on Windows上にDockerをインストールし、向き先をホスト上に変更したりすれば多分行けると思う
あるいは Window用に バッチファイルやPowerShellも作るなど
Docker概要
まずDockerには イメージ、コンテナ、ボリュームがある
イメージはコンテナのイメージファイルとなっている
コンテナはイメージを起動した際に作成され、イメージの一次的な情報を持っている
ボリュームは、データベースの中身など永続的に持っておきたいデータ
docker ps
docker images
docker volume ls
でそれぞれ リスト表示
docker pull イメージ名
で、イメージを DockerPubより落として来る
docker run -it イメージ名
でイメージからコンテナを起動
docker start イメージ名
で停止したコンテナを再開する
Ctrp+P、Q でコンテナを起動したままホストに戻る
exitで抜けた場合はコンテナは停止する
docker exec -it コンテナ名 /bin/bash
等で 起動中のコンテナにログインする
docker commit コンテナ名 イメージ名
で、コンテナからイメージを作成する
また、コンテナを立ち上げる際に、ボリュームやポートフォワードを指定する
Build
上記のように コンテナ内で環境を構築し commitでイメージに焼き付けてイメージを配布してもよいが
インストール手順ファイルを作成し、そこからイメージを作成するほうが便利である
まずはDockerfileを作成する。ここにはインストール手順を書く(Chefのようなもの)
Dockerfileを書いた後に buildコマンドを使いイメージを作成する
docker build -t イメージ名:タグ名 .
で作成できる
Dockerfileの書式は後程?
docker-compose
Dockerは通常複数のコンテナを組み合わせて使う
たとえば アプリケーション、RDB、NoSQL、バッチ・・・
と複数のコンテナを立ち上げる必要がある
この際に、全部を手作業で立ち上げるのも大変だし、それぞれボリュームやポートフォワードオプションも設定する必要がある
もちろん シェルスクリプトで全部書けば簡単だが、docker-composeを使えば簡単になる
docker-composeを使えば、複数のコンテナを順番に起動することが出来る。ボリュームやポートフォワード、ホスト名の設定等ができる
docker-compose build で、全てのコンテナイメージ作成
docker-compose up ですべてのコンテナを立ち上げる
docker-compose down で すべてのコンテナを落とす
docker-compose run 名前 で 1つのコンテナを立ち上げる
その他いろいろと便利