DockerでCentOS7(PHP7.4 Apatch2.4 MySQL8)を構築してSSHで外部から接続するまで

#CentOS7

###説明
CentOS7のコンテナ内でphpとapatchを構成し、MySQLは別のコンテナを用意してCentOSから接続をする。


####ディレクトリ構成

```
centos
├── Dockerfile
└── php  
     └── php.ini
docker-compose.yml
html
  └── index.php
MySQL  
  └── data
```

####docker-compose.yml

```
version: '3.0'
services:
  web:
    build: "./centos7"
    container_name: "centos7"
    ports:
      - 80:80
      - 20022:20022
    volumes:
      - "./html:/var/www/html"
    command: /sbin/init
    privileged: true

  db:
    image: mysql:8.0
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
    depends_on:
      - web
```

####Dockerfile

```
FROM centos:7

RUN yum -y update && yum clean all

# Repository
# EPEL
RUN yum install -y epel-release
# remi
RUN yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# Apache2.4 インストール
RUN yum -y install httpd

# Apacheの自動起動設定
RUN systemctl enable httpd

# PHP7.4 インストール
RUN yum -y install --enablerepo=remi,remi-php74 php php-devel php-mbstring php-pdo php-xml php-gd php-fpm php-mysqlnd php-opcache php-pecl-zip libzip5

# php.iniコピー
# COPY ./php/php.ini /etc/php.ini

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

# SSH接続ここから--------
RUN yum -y update \
    && yum install -y openssh-server \
    openssh-clients \
    && yum clean all

# rootでのログインを許可
# ポートを22から20022に変更
# rootのパスワードをpasswordに設定
RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config \
    && sed -ri 's/^#Port 22/Port 20022/' /etc/ssh/sshd_config \
    && echo 'root:ronaldo7' | chpasswd

EXPOSE 20022
# SSH接続ここまで--------

CMD ["/sbin/init"]
```

####php.ini

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

###1. CentOS7インストール
#####参考URL

https://qiita.com/gahoh/items/92217e0a887bb81e3155#centos-%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A-%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83-%E3%81%AE%E4%BD%9C%E6%88%90%E8%B5%B7%E5%8B%95-%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%83%B3%E3%83%89

https://tech-lab.sios.jp/archives/20051

#MySQL

###1. MySQLインストール
#####参考URL

https://kitsune.blog/mysql-install

###2. MySQL設定
#####参考URL

https://qiita.com/naoki_y/items/b407d35d8c2401b65e01

###3. PDO接続確認

#####参考URL

https://kahoo.blog/php-pdo-check-mysql-connection-code/

###エラー備忘録

#####1. PDO接続エラー

```
SQLSTATE[HY000] [2002] No such file or directory
```

####対応手順

#####1. コンテナに接続

```
docker container exec -it mydoker_db_1 /bin/bash
```

#####2. ホストipアドレス確認

```
root@a81b73e7516c:/# cat /etc/hosts　//ipアドレス確認
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.30.0.3      a81b73e7516c
```

#####3. PDOのホスト名に確認したipアドレスを入力

```
define('HOSTNAME', '172.30.0.3');
```

##SSH接続

###1. ssh接続設定

#####参考URL

https://irukanobox.blogspot.com/2020/06/sshdocker.html

###エラー備忘録

#####1. composeを再構築した時に発生

```
//compose再構築
docker-compose build

//sshで接続
ssh -p 20022 root@localhost

//エラー
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:SoL3yQ5xw8FyrICsKI46vZRiaG1wd4BpnuBrjNO4bJ0.
Please contact your system administrator.
Add correct host key in /Users/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/user/.ssh/known_hosts:1
ECDSA host key for [localhost]:20022 has changed and you have requested strict checking.
Host key verification failed.
```

####対処方法

#####1. ローカルPCの.sshにあるknown_hostsファイルを削除

#####2. ssh再接続すると新しいknown_hostsが作成され、接続できる

#####参考URL

https://qiita.com/hnw/items/0eeee62ce403b8d6a23c

#apatch

###備忘録
####1.htaccessが効かない
#####対処方法
1. httpd.confのAllowOverride Noneの設定をNONEからALLに変更

```
AllowOverride None
```
↓

```
AllowOverride ALL
```

参考URL

https://pisuke-code.com/apache-way-to-enable-htaccess/

#使ったコマンド

```
//起動中のコンテナ確認
docker ps

//全てのコンテナ確認
docker ps -a

//compose起動
docker-compose up -d

//compose停止
docker-compose stop

//compose再構築（設定ファイル等を編集した時）
docker-compose build

//compose再起動
docker-compose restart

//コンテナに接続
docker container exec -it mydoker_db_1 /bin/bash
docker exec -it centos7 /bin/bash

//apatch起動
systemctl start httpd.service
systemctl restart httpd

//apatch状態確認
systemctl status httpd.service

//sshd再起動
systemctl restart sshd

//ホストipアドレス確認
cat /etc/hosts

//vimインストール
yum install vim

//エラー表示
ini_set( 'display_errors', 1 );

```