Docker メモ
「今更ながらDocker導入してみた」というWeb上の記事すら今更ながら感溢れる今日この頃、Docker導入してみたのでメモする。
まだ初めてだけど、思ってたより使いやすくはない…かなぁ。(単に慣れてない)
- Windows 10 Pro
- Docker 2.1.0.3
マシンの立ち上げ
Imageの作成→Containerの立ち上げという手順を踏む。
Docker Hub にいろいろImageがあるので、それをそのまま使うならそれでよし。
> docker run hello-world
(↑)hello-worldというimageを使ってContainerを起動。imageがローカルに無ければDockerHubから取ってくる。
Dockerfileというものを記述して、Imageを素材にして更に自分で必要なソフト等をインストールするコマンドを書くと、その通り実行した結果をマイImageとして作成できる。
> docker build (Dockerfileのあるdir_path) -t (image_name) (サンプル) > docker build ./ -t my_image
オブジェクト指向的に考えると、Imageがクラス、Containerがインスタンス的?
Containerは初回立ち上げ時に、名前を付けて、ポートとか共有ファイルとかの設定してやる。次からはその名前によって起動する。という感じ。
(初回) > docker run -p 80:80 -v /host/path:/remote/path --name my_container my_image (2回目) > docker container start my_container
コンテナ
これまでの仮想マシンだと、「1台の仮想Linuxを起動し、ApacheとPHPとMySQLをインストールする」みたいな概念だったんだけど、 どうもDockerでは、(もちろんそれもできるけど)どうせカーネルを共有できるので、 Apache用コンテナ、PHP用コンテナ、MySQLコンテナを立ち上げ、連携させて1つの環境を構築する方法も出来るらしい。
どちらが主流なのかはイマイチわからない。
ポートフォワード
Windows上でのDockerは、Windows上でDocker仮想マシンを動かすのではなく、Hyper-Vというハイパーバイザの元に、まず「Windows」と「Docker用仮想マシン」が並列の存在としてあり、 さらに「Docker用仮想マシン」の中で、個々の「Docker仮想コンテナ」が並列している構造になっている。らしい。
Dockerで行える「ポートフォワード」は、あくまで「Hyper-Vマシンに来たアクセスを、Docker仮想マシンに飛ばす」設定であり、Windowsに来たアクセスは知ったこっちゃない。
外部ネットワークに繋がっているのは通常、Windowsなので、外部からの穴はWindowsの設定によって空けてあげなければならない。
ただ、VirtualBox + Vagrantなら、その設定もVagrantfileに書けるので楽なんだけど、Dockerでは自分でnetshコマンドを打つみたいな記事が出てくる。
設定しなければいけない箇所が分散するというのは、後々「どうやるんだっけ」コストが高騰することになるので、なるべく避けたい。 DockerにもWindowsを含めたネットワーク周りを一括設定できるツールは欲しい。
共有フォルダ
Dockerfileに“ADD”を書けば行けるみたいなこと書かれてたけど、いけない……
起動時に “-v (host_abs_path):(virtual_abs_path)” オプションを付ければよい。