Dockerを始めてみよう!(インストール~コンテナ立ち上げ)

こんにちはー、ニアです。

最近私は、インフラ周りの勉強の一環としてDockerを使って、ゲームの開発環境をPCのみで構築したり、まだ使ったことのないミドルウェアを使ってみたりしています。

今回はDockerをインストールして、コンテナをいくつか立ててみました。

1. Dockerとは

Dockerとは、Docker社が開発しているオープンソースのコンテナ型の仮想化ソフトウェアです。

コンテナ型の仮想化は、実行環境を他のプロセスから独立した1つ1つプロセスとして動作します。

Nia02.png
ホストOS型やハイパーバイザー型と違って、コンテナ型はOSの起動が不要だから、起動が速くて消費リソースも少なめです!

2. Dockerをインストールしてみよう

ここではMacにDocker for Macをインストールしていきます。

Docker for Macではxhyveという仮想化機能を利用するので、Mac OS X 10.10 Yosemite以上であればOK!
(ちなみにWindows版の場合、Hyper-Vが利用可能なWindows 10 Pro(64 bit版)以上が必要です)

DockerのサイトからダウンロードしたDocker.dmgをマウントし、Docker.appをアプリケーションフォルダにコピーするだけ。

3. Dockerを起動

Dockerを起動し、Macのメニューバー上にあるDockerのクジラアイコンのアニメーションが止まったら準備完了です。

あとは基本的にターミナルからdockerコマンドを利用していきます。

docker versionコマンドを実行すると、Dockerのバージョン情報が表示されます。

docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true

4. Dockerイメージからコンテナを建ててみよう

Dockerでは、多くのコンテナ用のイメージがDocker Hub上にあり、UnuntuなどのOSイメージやApache、PHP、MySQLなどのミドルウェアのイメージがあります。

ここでは、UbuntuApacheMySQLPHPのイメージをダウンロードしてコンテナを建てていきます。

4.1. Ubuntu

まず、docker pullコマンドでUbuntuイメージをダウンロードします。

# docker pull [イメージ名]
docker pull ubuntu

次に、docker runコマンドで先ほどダウンロードしたUbuntuイメージからUbuntuコンテナを構築します。

# docker run -it --name [コンテナ名] [イメージ名] [コンテナ起動時に起動させるプロセス]
docker run -it --name test ubuntu /bin/bash

nameオプションでコンテナに名前をつけることができます(ここでは「test」)。
itオプションはホストの標準入出力とDockerコンテナの入出力を繋げます。
さらにイメージ名の後に「/bin/bash」を付ければ、Dockerコンテナの構築後、ターミナルからUbuntuコンテナをBashで操作できるようになります。(コンテナから抜ける時は、exitを実行します。)

なお、指定したイメージがローカルにダウンロードされていない場合、イメージもダウンロードされます。

4.2. Apache

お次はHTTPサーバーのApacheです。

# docker run --name [コンテナ名] -p [ホスト側のポート]:[コンテナ側のポート] -d [イメージ名]
docker run --name test_httpd -p 80:80 -d httpd

dオプションを付けるとコンテナはバッググラウンドで動作します。
pオプションを使って、ホスト側の80番ポートとコンテナ側の80番ポートをマッピングさせることで、ブラウザから「localhost」でコンテナのWebページにアクセスできます。

バッググラウンドで動作しているコンテナを起動する時は、docker startコマンド、停止する時は、docker stopコマンドを実行します。

# docker start [コンテナ名]
docker start test_httpd

# docker stop [コンテナ名]
docker stop test_httpd

またコンテナをアタッチして操作する時は、docker execコマンドを実行します。

# docker exec -it [コンテナ名] [アタッチ時に起動するプロセス]
docker exec -it test_httpd /bin/bash

4.3. MySQL

今度はデータベースのMySQLです。

# docker run --name [コンテナ名] -e [環境変数名]=[値] -p [ホスト側のポート]:[コンテナ側のポート] -d [イメージ名]:[タグ名]
docker run --name test_mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql:5.7

MySQLではコンテナの構築時に、MySQLのrootユーザーのパスワードを設定する必要があります。そこで、eオプションを使って環境変数MYSQL_ROOT_PASSWORDにパスワードを設定します。

また、イメージ名にタグ名を併記することで、そのタグに紐づいたイメージを指定することができます(ここでは、MySQL 5.7のタグを指定します)。タグ名を省略すると、デフォルトとして「latest」タグが指定されます。

Nia04.png
最新のMySQL 8.0では、デフォルトログイン認証方式が変わっていて、上のdocker runコマンドではログイン失敗してしまうのです。

ホスト側のポートにマッピングしておくと、MySQLクライアントアプリでもアクセスできますよ!
(画像は、Sequel ProでMySQLコンテナに接続したものです)

ホストは「127.0.0.1」、ユーザー名は「root」、パスワードは「password」を入力します。
ポート番号はデフォルトでは3306が指定されます。
mysql.help_topicテーブルの中身

4.4. PHP(on Apache)

最後はPHPです!

# docker run --name [コンテナ名] -p[ホスト側のポート]:[コンテナ側のポート] -d [イメージ名]:[タグ名]
docker run --name test_httpd_php -p 8080:80 -d php:apache

気をつける点は、ホスト側のポートが他のものと重複しないように設定することです。4.2節のApacheコンテナですでに80ポートを使用しているので、ここでは8080番ポートを指定します。

PHPのイメージはいくつか種類があり、コマンドラインから実行するcliタグ(タグ名を省略した時のデフォルトはこちらです)や、Apacheサーバー上で動作するapacheタグなどがあります。

コンテナを建てたばかりでは、ブラウザからアクセスしてもHTTP 403エラーが返るだけなので、コンテナにアタッチして「phpinfo();」を呼び出すPHPプログラムを作成してみます。

docker exec -it test_httpd_php bash
echo "<?php phpinfo(); ?>" > index.php

これで、localhost:8080にアクセスすると、PHPの情報が表示するようになります。

5. おわりに

今回は、Docker for Macをインストールし、Docker Hub上のイメージを使って、いくつかコンテナを建ててみました。

もちろん、イメージをそのまま使うだけでなく、Dockerfileを使ってカスタマイズしたり、Docker-composeを使って複数のコンテナをまとめてWebアプリを構成したりすることができます。

[END]

コメント

タイトルとURLをコピーしました