記事の背景
認知度が高まっているdockerについて概要を理解し、実際に動作する様子をハンズオン形式で体験するためのもの
Dockerそのものの説明は参考記事がいっぱいあるので割愛します!!
Docker概要
Dockerとは?
Dockerは仮想化技術の中の1つである「コンテナ型仮想化」を実現する仕組みのこと
仮想化技術?
仮想化技術には3つの種類がある
- ホスト型
- ハイパーバイザ型(TEOSはコレ)
- コンテナ型
図解で詳しく解説されてる記事はこちら
Dockerのメリット
- コンテナを共有することで誰でも同じ環境を構築できる
- OSが不要なのでホスト型より動作が軽い
- 多くのコンテナイメージが提供されている
- ホスト型に比べてお手軽にセットアップできる
参考記事
【図解】Dockerの全体像を理解する -前編-
いまさらDockerに入門したので分かりやすくまとめます
Dockerを動かしてみる
Docker Desktopのインストール
Docker社はWindowsやMacなどのコンシューママシンでもDocker環境を構築できるようにデスクトップ版アプリを提供している
https://www.docker.com/products/docker-desktop
今回はMac版をインストールする
https://hub.docker.com/editions/community/docker-ce-desktop-mac
※ダウンロードにはDocker Hubのアカウントが必要なので未登録の人は登録しましょう
dmgファイルがダウンロードされるのでインストールする
Docker Desktopの起動
インストールされたDocker DesktopはLaunchpadに入っているのでそれをクリックして起動する
preferenceでいろいろ設定できる。proxy環境下であればここで先に設定しておく必要がある
Dockerが動いていることを確認する
Docker Desktopが正しく起動しているかを確認するために以下のコマンドを実行する
$ docker info
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 2
Server Version: 18.09.2
...
正しく起動していれば起動しているdockerの情報が出力されるが、起動できていない場合には下記のようなエラーメッセージが表示される
$ docker info
Error response from daemon: Bad response from Docker engine
Nginxを起動する
Docker Engineの起動が確認できたところでさっそくDocker Imageを利用してNginxを起動してみる
以下のコマンドを実行するだけで簡単にNginxが起動できる
Docker Imageが保持されていない場合はダウンロード処理が実行される
$ docker run --name hogehoge -d -p 8080:80 nginx
--name: 任意のイメージ名を指定する
-d: デタッチモード コンテナ実行時にバックグラウンドで起動する事ができる
(deamonのような常駐のプログラムでつかう)
-p ホストのポート番号:コンテナのポート番号: Webで叩くポート番号は実はコンテナのポート番号と紐付いてますよ。という宣言。
実行結果
localhost:8080
にアクセスしてみるとこんな風にNginxが起動できていることが確認できる
Nginxを終了する
さきほど起動したNginxを終了してみよう
-d
のコマンドを用いて起動したため、コンソール上には何も表示されていないことになっている
Nginxのプロセスが起動していることを確認するために以下のコマンドを実行する
$ docker ps
実行結果
実行してみるとSTATUS
の表示でUP
と表記され起動中であることがわかる
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2feb4351fdb6 nginx "nginx -g 'daemon of…" 2 minutes ago Up About a minute 0.0.0.0:8080->80/tcp hogehoge
次にプロセスを停止するためにコンテナ停止のコマンドを実行する
$ docker stop hogehoge
hogehoge
ここで再度プロセスを確認してみるとさきほど起動していたプロセスがなくなっていることがわかる
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
unixのプロセスと同様に-a
オプションを用いて存在するプロセスを確認してみると、nginxのプロセスがきちんと停止していることが確認できる
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2feb4351fdb6 nginx "nginx -g 'daemon of…" 6 minutes ago Exited (0) 2 minutes ago hogehoge
カスタムイメージを作成するには?
前項ではnginxのDocker Imageをダウンロードしてきてそのまま実行することで起動を確認した
基本的にこのコンテナ内の資材を編集することでnginxをカスタマイズしていくことができるがそこで設定した情報はそのコンテナの中に閉じてしまうため、Dockerのメリットで記述した「コンテナを共有することで誰でも同じ環境を構築できる」から離れてしまう
そこでDockerfileを利用することでカスタマイズしたDocker Imageを作成する方法がある
Dockerfileとは?
公開されているDockerイメージに加えて必要なパッケージやアプリ、各種設定を含んだDockerイメージを自分で作成して使用するために記述する設定ファイルのこと
Dockerfileの作成
下記記事のなかでDockerfileの作成からビルド、Docker Hubへの登録までの一連の流れが確認できるため割愛
Dockerfileを書いてみる
終わりに
Docker Hub上には様々なコンテナイメージが存在しており、今回のように簡単に起動できるものも多くあるのでぜひ手元でいろいろ試してみましょう
docker-composeによる複数の組み合わせ環境の実現などはまたどこかの機会で。。。