#mynavi(dockerメモ)
#setlinebreak(on);

* 目次 [#vd7e155b]
#html(<div style="padding-left: 10px;">)
#contents
- 関連
-- [[dockerメモ]]
#html(</div>)

* 概要 [#eb01048f]
#html(<div style="padding-left: 10px;">)
急ぎで PHP5.6、Apache2.4、MySQL5.7 の環境が必要になり、環境構築を行ったので、作業メモ。
次回に同じような事があった場合には使いまわしたいので、ある程度までは docker イメージ化しておく。

バージョンに縛りがなければ既に存在するLAMP の dockerイメージを使用する方が早いが、
今回は各サーバのバージョンに縛りがあった為、独自でイメージを作ることにした。
※今回は特にコンテナを分ける必要がなかったので、docker-compose は使用していない。(全部入りのコンテナを1つだけ作った)
※一部の作業は Dockerfile に書いていない。(コンテナに入って作業後に docker commit した)
※ただし、一部の作業は Dockerfile に書いていない。(コンテナに入って作業後に docker commit した)

- ホスト環境
-- MacOS High Sierra
-- docker 18.09.0

- 作成する dockerコンテナ
-- CentOS7
-- Apache2.4
-- PHP5.6
-- MySQL5.7

#html(</div>)

* Dockerfile [#ue697cbd]
#html(<div style="padding-left: 10px;">)

#mycode2(){{
#
# PHP5.6、Apache2.4、MySQL5.7
#

FROM centos:centos7

USER root

# whichコマンドインストール
RUN yum install -y which

# Apacheインストール
RUN yum install -y httpd

# PHP5.6インストール用にリポジトリ追加(EPEL,Remi)
RUN yum install -y epel-release 
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# PHP5.6インストール
RUN yum install -y --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-mysql

# MariaDBを削除
RUN yum remove mariadb-libs
RUN rm -rf /var/lib/mysql

# MySQLをインストール
RUN rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm \
  && yum install -y mysql-community-server

# MySQLの自動起動の設定
CMD ["systemctl", "enable", "mysqld.service"]

# Apacheの自動起動設定
CMD ["systemctl", "enable", "httpd"]

# 各種プロセスの起動
CMD ["/sbin/init"]
}}

#html(</div>)

* ビルド [#r92be44a]
#html(<div style="padding-left: 10px;">)
#myterm2(){{
docker build ./ -t mylamp:latest
}}
#html(</div>)

* 残りの初期設定 [#v66dd19f]
#html(<div style="padding-left: 10px;">)

** コンテナの起動&ログイン [#ja7dbc8f]
#html(<div style="padding-left: 10px;">)

ここからはコンテナにログインして手動で行った。
※手作業分もイメージに反映しておきたいので、docker commit もこの時点で入力しておく。

#myterm2(){{
CONTAINER_ID=`docker run -d --privileged mylamp:latest /sbin/init` \
 && docker exec -it $CONTAINER_ID /bin/bash \
 && docker stop $CONTAINER_ID \
 && docker commit $CONTAINER_ID mylamp:latest
}}
#html(</div>)

** MySQLの設定 [#q2ca16f0]
#html(<div style="padding-left: 10px;">)

#myterm2(){{

#初期パスワード確認
cat /var/log/mysqld.log | grep "password is generated" | head -1 | awk '{print $NF}'

mysql -u root -p
Enter password: 確認したパスワード

# パスワードポリシーの変更
mysql> SET GLOBAL validate_password_policy=LOW;

# rootパスワード変更
mysql> SET PASSWORD for root@localhost=password('rootpass');

# ホスト側からの接続を許可する為に、以下も設定しておく
# (ホスト側からコンテナのMySQLに接続する際のホスト名は localhost ではなく gateway になる為)
mysql> CREATE USER 'root'@'gateway' IDENTIFIED BY 'rootpass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'gateway' WITH GRANT OPTION;
mysql> quit;

# ターミナルを終了
#(起動時に docker stop まで入力済みなのでコンテナも終了する)
#  (起動時に docker commit まで入力済みなので作業状態はイメージに反映される)
exit
}}

#html(</div>)

#html(</div>)

* コンテナの起動 [#j6e22644]
#html(<div style="padding-left: 10px;">)

上記までの作業でコンテナイメージが出来上がっているので、以下の通り起動する。
- Apache 及び MySQLのポートはホスト側のポートにバインドする
- Apacheのドキュメントルートにはホスト側のディレクトリをマウントする
- コンテナ起動後はコンテナ側の作業用にターミナルを起動
- コンテナ作業時に systemctl を使用できるように --privileged オプションを付けておく
- サービスを起動させる為に /sbin/init を実行する

#myterm2(){{
CONTAINER_ID=`docker run -d -p 8080:80 -p 3306:3306 --privileged -v /path/to/html:/var/www/html mylamp:latest /sbin/init` \
 && docker exec -it $CONTAINER_ID /bin/bash \
 && docker stop $CONTAINER_ID \
 && docker commit $CONTAINER_ID mylamp:latest
}}

上記の実行後はコンテナ側のターミナルが起動するが、そのままにしておく。
※コンテナを終了させたい時に exit する。

#html(</div>)

* 動作確認 [#e9db2c8a]
#html(<div style="padding-left: 10px;">)

ホスト側のターミナルから以下の通り実行。
ホスト側のターミナルから以下の通り確認。

** Apacheの動作確認 [#td5d4260]
#html(<div style="padding-left: 10px;">)

#myterm2(){{
curl http://localhost:8080
}}
#html(</div>)

** MySQLの接続確認 [#d17dccd0]
#html(<div style="padding-left: 10px;">)
#myterm2(){{
mysql -h 127.0.0.1 -u root -p
Enter password: 設定したrootのパスワード
}}
#html(</div>)

#html(</div>)



トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS