LoginSignup
0
2

More than 3 years have passed since last update.

Dockerハンズオン

Last updated at Posted at 2019-06-13

docker.png

記事の背景

認知度が高まっている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に入っているのでそれをクリックして起動する
スクリーンショット 2019-04-04 10.04.26.png

起動すると上部のクイックバーにDockerが追加される
スクリーンショット 2019-04-04 10.05.53.png

preferenceでいろいろ設定できる。proxy環境下であればここで先に設定しておく必要がある
スクリーンショット 2019-04-04 10.07.50.png

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が起動できていることが確認できる
スクリーンショット 2019-04-09 16.02.46.png

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

もちろん画面も停止している
スクリーンショット 2019-04-09 16.32.50.png

カスタムイメージを作成するには?

前項ではnginxのDocker Imageをダウンロードしてきてそのまま実行することで起動を確認した
基本的にこのコンテナ内の資材を編集することでnginxをカスタマイズしていくことができるがそこで設定した情報はそのコンテナの中に閉じてしまうため、Dockerのメリットで記述した「コンテナを共有することで誰でも同じ環境を構築できる」から離れてしまう
そこでDockerfileを利用することでカスタマイズしたDocker Imageを作成する方法がある

Dockerfileとは?

公開されているDockerイメージに加えて必要なパッケージやアプリ、各種設定を含んだDockerイメージを自分で作成して使用するために記述する設定ファイルのこと

Dockerfileの作成

下記記事のなかでDockerfileの作成からビルド、Docker Hubへの登録までの一連の流れが確認できるため割愛
Dockerfileを書いてみる

終わりに

Docker Hub上には様々なコンテナイメージが存在しており、今回のように簡単に起動できるものも多くあるのでぜひ手元でいろいろ試してみましょう

docker-composeによる複数の組み合わせ環境の実現などはまたどこかの機会で。。。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2