こんにちはー、ニアです。
最近私は、インフラ周りの勉強の一環としてDockerを使って、ゲームの開発環境をPCのみで構築したり、まだ使ったことのないミドルウェアを使ってみたりしています。
今回はDockerをインストールして、コンテナをいくつか立ててみました。
1. Dockerとは
Dockerとは、Docker社が開発しているオープンソースのコンテナ型の仮想化ソフトウェアです。
コンテナ型の仮想化は、実行環境を他のプロセスから独立した1つ1つプロセスとして動作します。
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などのミドルウェアのイメージがあります。
ここでは、Ubuntu、Apache、MySQL、PHPのイメージをダウンロードしてコンテナを建てていきます。
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」)。
iとtオプションはホストの標準入出力と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」タグが指定されます。
ホスト側のポートにマッピングしておくと、MySQLクライアントアプリでもアクセスできますよ!
(画像は、Sequel ProでMySQLコンテナに接続したものです)
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]
コメント