Dockerに入門してみる

新しいマシンもらったときだけのことだけど、
PHPのWEB開発環境をローカルで構築するの面倒くさかった。
Apache入れてPHP入れてMySQL入れて・・・

そのうちXAMPP使うようになって楽だけど・・・
「本番環境のバージョンに合わせたい」や「最新バージョンの機能を使いたい」など
普段の開発環境とは異なるサーバ構成を試したいときがあるよね!

そんなときはDocker!

基本的には
docker-compose.yml
作ってDockerのターミナル立ち上げて
docker-compose up -d
だけで開発環境構築完了!みたいな感じ。

インストール

MyMachineはWindows10 HOMEエディションだから
Docker Toolboxインストール
https://docs.docker.com/toolbox/toolbox_install_windows/

DockerQuickstartTerminalでGO!

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

Start interactive shell

S@DESKTOP-0123456 MINGW64 ~
$

docker-compose.yml作成

作業ディレクトリを作成

C:\Users\S\docker\sample

※ユーザのホームディレクトリ以下に作成するが吉。

Docker Hub(https://hub.docker.com/)でいろんなImageを配布してるよ。
例えば、PHPのオフィシャル(>https://hub.docker.com/_/php/)から「7.2-apache」

C:\Users\S\docker\sample\docker-compose.yml

version: '3'
services:
  web:
    image: php:7.2-apache
    ports:
      - "80:80"
    volumes:
      - ./html:/var/www/html

コンテナ起動

// カレントディレクトリ確認

$ pwd
/c/Users/S

// docker-compose.ymlのあるディレクトリに移動

$ cd docker/sample

// 全コンテナ起動

$ docker-compose up -d
Creating network "phpapache_default" with the default driver
Creating phpapache_web_1 ...
Creating phpapache_web_1 ... done

// 起動コンテナ確認

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
d2d0f997f2b2        php:7.2-apache      "docker-php-entryp..."   15 seconds ago      Up 15 seconds       0.0.0.0:80->80/tcp   phpapache_web_1

ディレクトリ構成

C:\Users\S\docker
┗sample
  ┣html
  ┗docker-compose.yml

【HTTPアクセス】

// IP確認

$ docker-machine ip
192.168.99.100

http://192.168.99.100

Forbiddenだ。。。

※コンテンツが無いからね!

【index.html作成】
C:\Users\S\docker\sample\html\index.html

Hello,Docker!

【コンテナ再起動】

コンテナ全停止

$ docker-compose stop

コンテナ全起動

$ docker-compose up -d

http://192.168.99.100

【終了】

コンテナ全停止

$ docker-compose stop

コンテナ強制全削除

$ docker-compose rm -f
$ exit

お疲れ様でした。

※windowsシャットダウン時にVirtualBox Interfaceが邪魔するけど
タスクマネージャーで強制終了でいいか。。。

他にできること

※複数のコンテナを連携させることもできるよ。
MySQLコンテナと連携すればLAMP環境完成!

※Dockerfileを書けばベースImageに手を加えることもできるよ。
例えば、PHPにオプションを設定するとか

※ベースとなるImageで立ち上げてから各種アプリケーションをインストールできるよ。
ImageのディストリビューションによるけどLinuxコマンド使えるからね。

※改造したヤツをImageとして保存しておけば再利用できるよ。
docker commit

※複数のマシンを別IPで立ち上げることができるよ。
docker-machine create