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)” オプションを付ければよい。

software/docker.txt · 最終更新: 2019/09/20 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0