#author("2019-03-22T10:10:48+00:00","","") #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 イメージ化しておく。 尚、今回は特にコンテナを分ける必要がなかったので、docker-compose は使用していない。(全部入りのコンテナを1つだけ作る) - ホスト環境 -- 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をインストール # https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e # 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の自動起動の設定 #RUN systemctl start mysqld.service && systemctl enable mysqld.service CMD ["systemctl", "start", "mysqld.service"] CMD ["systemctl", "enable", "mysqld.service"] # Apacheの自動起動設定 CMD ["systemctl", "start", "httpd"] CMD ["systemctl", "enable", "httpd"] #CMD ["apachectl", "-D", "FOREGROUND"] 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; exit }} #html(</div>) #html(</div>) * コンテナの起動と動作確認 [#t203708c] #html(<div style="padding-left: 10px;">) 上記までの作業でコンテナイメージが出来上がっているので、以下の通り起動する。 - Apache 及び MySQLのポートはホスト側のポートにバインドする - Apacheのドキュメントルートにはホスト側のディレクトリをマウントする - コンテナ起動後はコンテナ側の作業用にターミナルを起動 - コンテナ作業時に systemctl を使用できるように --privileged オプションを付けておく - サービスを起動させる為に /sbin/init を実行する ** 起動 [#ga5abf2e] #html(<div style="padding-left: 10px;">) #myterm2(){{ CONTAINER_ID=`docker run -d -p 80: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 }} #html(</div>) ** Apacheの動作確認 [#td5d4260] #html(<div style="padding-left: 10px;">) ホスト側のターミナルから #myterm2(){{ curl }} #html(</div>) #html(</div>)