C++幼女先輩

プログラミング成分多め

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つのコンテナを立ち上げる

その他いろいろと便利