DockerでLAMP環境(CentOS7 Apache PHP8.0 MySQL8)の構築 M1 Intel 対応

# 動作環境 
OS: mac
CPU: M1、intel 対応
Dockerが導入されていることが前提
[Dockerアプリからのインストールはこちらから](https://docs.docker.com/get-docker/)

# 構築内容
```
Centos7
Apache
PHP v8
phpMyAdmin
MySQL v8
Composer
Node.js v16
gulp
```
# 参考
[GitHub centos7_php8](https://github.com/yamada-ham/centos7_php8)
↑ をクローンすれば手っ取り早いです。

# ディレクトリ構造
```
.
├── Dockerfile
├── README.md
├── copy
│   ├── httpd.conf
│   ├── my.cnf
│   ├── php.ini
│   ├── phpMyAdmin.conf
│   └── v_host.conf
├── docker-compose.yml
└── html
    ├── php_error.log
    └── phpinfo
```

# docker-compose.ymlの内容
```
#docker-composeで使用するバージョン
version: '3.8'

# dbデータの保存場所。(ホストからは見えない)
volumes:
  mysql-data:

services:
 #サービスの名前
  centos:
    build: .
    ports:
    - 8281:81
    - 8282:82
    - 8283:83
    - 8284:84
    - 8285:85
    - 8286:86
    - 8287:87
    - 8290:90
    - 8291:91
    - 28000:8000
    - 28001:8001
    - 28002:8002
    - 28003:8003
    - 28004:8004
    - 6001:6001
    volumes:
    - ./html:/var/www/html:cached
    - mysql-data:/var/lib/mysql
    working_dir: /var/www/html
    tty: true
    platform: linux/x86_64
    privileged: true  
    command: /sbin/init  
```

### cpuがintel版の場合は　以下をコメントアウト
```
# platform: linux/x86_64
```

# Dockerfileの内容
```
FROM centos:7

RUN yum update -y && \
    yum install -y httpd

# Apache自動起動
RUN systemctl enable httpd.service

# PHP  
RUN yum install -y epel-release
RUN yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm

# yum-utils パッケージをインストールすると yum-config-manager コマンドが使えるようになる。
RUN yum -y install yum-utils && \ 
    yum-config-manager --enable remi

#php8
RUN yum -y install --enablerepo=remi,epel,remi-php80 php php-mysqlnd php-mbstring php-gd php-xml php-xmlrpc php-pecl-mcrypt php-fpm php-opcache php-apcu php-pear php-pdo php-zip php-unzip php-pecl-zip phpMyAdmin

# MySQL 5.7 > 8.0
# RUN yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm && \
RUN yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm && \
    yum -y install mysql-community-server

# MySQL 自動起動
RUN systemctl enable mysqld

# RUN yum -y install mod_ssl && \
# yum -y install firewalld && \
# yum -y install certbot python2-certbot-apache

# composer 導入
RUN curl -sS https://getcomposer.org/installer | php && \
    mv composer.phar /usr/local/bin/composer

# composer バージョン変更
# RUN composer self-update 1.8.3

# Git
# RUN yum -y install git

# node.js 導入
# RUN curl -fsSL https://rpm.nodesource.com/setup_16.x
RUN yum install -y https://rpm.nodesource.com/pub_16.x/el/9/x86_64/nodesource-release-el9-1.noarch.rpm

# lsof は、サーバーで特定のポート番号を待ち受けているかどうか、指定ファイルは誰が読み込んでいるのかを調べる
RUN yum install -y nodejs \
    yum install -y vim \
    yum -y install lsof

# グローバル にgulpを導入
RUN npm install -g gulp

# ホストで用意した設定ファイルを反映
COPY ./copy/httpd.conf /etc/httpd/conf/httpd.conf
COPY ./copy/v_host.conf /etc/httpd/conf.d/v_host.conf
COPY ./copy/php.ini /etc/php.ini
COPY ./copy/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf

# MySQLの設定
# COPY ./copy/my.cnf /etc/my.cnf

# ディレクトリの所有者、グループを変更する。
# RUN chown apache:apache /var/www/html/php_error.log


#公開ポート番号
EXPOSE 80
```

# DockerでCentOSを使ったLAMP環境構築

コマンド ビルドして起動 
```
$ docker-compose up -d
```
<br>

# アクセス方法
*ポート番号はdocker-compose.ymlに設定されているポート番号を利用

```
  http://localhost:ポート番号/
```
<br>

# コンテナに入る 
サービス名はDockerfileで記載してある「centos」
```
$ docker-compose exec サービス名 bash
```
<br>

# ポートの追加方法
### 例:92番ポートを通す方法
<br>

centos7/copy/v_host.confに以下を追加

```
<VirtualHost *:92>
DocumentRoot /var/www/html/site92 #ポートを通すパスを指定
ServerName localhost92
</VirtualHost>
```
<br>

centos7/copy/httpd.confに以下を追加
の編集
```
Listen 92
```
<br>

centos7/docker-compose.ymlに以下を追加
```
ports:
- 8092:92
```


<br>

コマンド 再度ビルドして起動
```
$ docker-compose up --build -d
```


<br>

# MySQLのパスワード変更

初期パスワード確認
```
$ cat /var/log/mysqld.log | grep password
```

<br>

パスワードポリシー変更
```
#　コマンドラインの場合
$ echo -e "validate_password.check_user_name=OFF\nvalidate_password.length=4\nvalidate_password.mixed_case_count=0\nvalidate_password.number_count=0\nvalidate_password.special_char_count=0\nvalidate_password.policy=LOW\n" >> /etc/my.cnf


#　/etc/my.cnf をvimなどで編集する場合
$ vim /etc/my.cnf

# Password policy change
validate_password.check_user_name=OFF 
validate_password.length=4
validate_password.mixed_case_count=0
validate_password.number_count=0
validate_password.special_char_count=0
validate_password.policy=LOW
```

<br>

パスワード変更
```
$ ALTER USER 'root'@'localhost' identified BY 'root';
```