bz0のにっき

quick and dirty prototype

Dockerに入門した

Dockerに入門してみました。

Dockerのメリット / デメリット

docker
https://thinkit.co.jp/story/2015/08/05/6284

メリット:
・「ハードウェアの調達やメンテナンス、ITシステムのチューニング」などの隠蔽
・複数のOS環境とアプリケーション環境をパッケージ化し、インターネットを通じて
 世界中の開発者やIT部門のメンバーが作った環境をすぐに利用できる

デメリット:
・ホストOSがLinuxの場合には、その上で稼働するコンテナもLinuxに限定される
・シンプルなコマンドラインを提供していますが、GUIを提供する管理ツール類はまだ発展途上
・Dockerだけでシステムがすべて完結することはなく、効率化のための周辺ソフトウェアの
 整備をある程度視野に入れる必要がある
CentOSは6がサポートされないらしい(CentOS7)

開発におけるDocker導入のメリット
https://qiita.com/minodisk/items/5ffd20588b995523756f

CentOS7.1をVagrantに入れて試す

下記を参考にインストール
https://qiita.com/tsuuuuu_san/items/dfd1d6ac55244d64d076

# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)

# docker --version
Docker version 17.11.0-ce, build 1caf76c

# docker-compose --version
docker-compose version 1.14.0, build c7bdf9e

Docker関連用語

コンテナ
・1つのサーバーの上で、複数のサーバー環境をそれぞれ分離して実行する
・コンテナは、1つのOSの中を複数の区画に分離する技術であり、1つのカーネルの上で複数のOS環境が動く

Docker Hub
イメージが多数登録されているサービス

Docker Engine
1つのコマンドで既存のイメージの検索やダウンロードができる

dockerコマンド

コンテナIDを調べる

docker ps -a

使ったコンテナを消す

docker rm -f コンテナID

コンテナの一括削除

docker rm -f $(docker ps -a -q)

注意:
コンテナは永続化されないので、コンテナを削除すると
コンテナ内で作成したファイルも消えます。

ポート指定して起動

docker run -p 80:80 --name php -d php:5.6-apache

phpコンテナ内に入る

docker exec -ti php bash

※「exit」でコンテナ内から出ます。

docker run -p 80:80 -v /var/www/html:/var/www/html --name php -d php:5.6-apache

コロンの左側がホスト側、右側がコンテナ側のディレクトリです。

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • eオプションは環境変数を設定するもので、rootのパスワードをpassに設定
docker exec -ti mysql bash

mysqlのコンテナ内に入る

docker-compose

dockerでの環境構築の手順を自動化します。

作業手順:
1.Dockerfileを作成
2.docker-compose.ymlで起動の流れを指定
使うコンテナやパラメータなどを記述した手順書

参考:
https://qiita.com/TsutomuNakamura/items/7e90e5efb36601c5bc8a

depends_on
https://qiita.com/sivertigo/items/9baa73d922a68788402b

php7.1 / apache / mysql5.7

参考:
Docker Hubのオフィシャルイメージを使ったLAMP環境(Apache+PHP+MySQL)構築 - Qiita
DockerでPHP7.0×Apacheの環境を構築する(更新: 2017/6/27) - Qiita



docker-composeで、環境構築してみる。
※試しにやってみたレベルなので、ちゃんと出来ているか分からないです。

下記設置して、コマンドを実行すると自動で環境構築してくれます。

docker-compose up -d

docker-compose

docker-compose.yml

version: '2'
services:
  mysql:
    build: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - db:/var/lib/mysql
  php:
    build: ./php
    ports:
      - '80:80'
    volumes:
      - /var/www/html:/var/www/html
    depends_on:
      - mysql
volumes:
  db:

mysql

mysql/Dockerfile

FROM mysql:5.7
COPY ./my.cnf /etc/mysql/conf.d/

mysql/my.cnf

[mysqld]
character-set-server=utf8

php

php/Dockerfile

FROM php:7.1-apache
RUN docker-php-ext-install pdo_mysql mysqli mbstring

php/php.ini

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"