2021/04/03
Docker
## コンテナ構築方法 ~ Dokerfile編 ~
1. `Dokerfile`ファイルを作成
```Dockerfile
FROM centos:6.9
ENV PHP_VERSION 5.3.3
RUN yum install -y
php
php-mbstring
php-pgsql
php-mysql
php-gd &&
yum clean all
CMD ["php", "-a"]
```
1. コマンドを実行してDockerイメージを作成
`docker build -t centos:6.9 .`
※ `docker build -t <Dockerイメージ名> <Dockerfileが存在するディレクトリ>`
1. Dockerイメージを確認
`docker images`
1. コンテナ起動
`docker run -it centos:6.9 /bin/bash`
※ `docker run -it <コンテナ名 or コンテナID> /bin/bash`
1. コンテナ停止
`docker stop <コンテナ名 or コンテナID>`
### 参考
- *https://knowledge.sakura.ad.jp/15253/*
- *https://qiita.com/suin/items/b13df0febf02a61cb5c5*
---
## コンテナ構築方法 ~ docker-compose編 ~
*version*
- debian: 8.7
- apache: 2.4.10
- php: 5.3.29
- mysql: 5.7
*directory*
```
├─docker
│ ├─apache2
│ │ └─apache2.conf
│ └─php
│ └─php.ini
└─docker-compose.yml
```
1. `docker-compose.yml`ファイルを作成
```yml
version: '3'
services:
app:
image: orsolin/docker-php-5.3-apache
container_name: app
volumes:
- ./html:/var/www/html
- ./docker/php/php.ini:/etc/php5/apache2/php.ini
- ./docker/apache2/apache2.conf:/etc/apache2/apache2.conf
ports:
- 8080:80
mysql:
image: mysql:5.7
container_name: mysql
volumes:
- ./docker/mysql/volumes:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=perfect_php
- MYSQL_USER=perfect_php
- MYSQL_PASSWORD=perfect_php
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=root
- PMA_PASSWORD=root
links:
- mysql
ports:
- 4040:80
volumes:
- ./docker/phpmyadmin/sessions:/sessions
```
1. 各サービスに必要なファイルを作成
- `docker/apache2/apache2.conf`
```conf
# see http://sources.debian.net/src/apache2/2.4.10-1/debian/config-dir/apache2.conf
Mutex file:/var/lock/apache2 default
PidFile /var/run/apache2/apache2.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User www-data
Group www-data
HostnameLookups Off
ErrorLog /proc/self/fd/2
LogLevel warn
ServerName localhost
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
# ports.conf
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
<Directory />
Options FollowSymLinks
AllowOverride All
Require all denied
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_combined
LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /proc/self/fd/1 combined
<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>
DirectoryIndex index.php
DocumentRoot /var/www/html
```
- `docker/php/php.ini`
```ini
default_charset = "UTF-8"
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
```
1. 起動
`docker-compose up -d`
### 参考
- *https://qiita.com/snyt45/items/b54ce2ac5be2a474d9b6*
- *https://knowledge.sakura.ad.jp/16862/*
- *https://hub.docker.com/r/orsolin/docker-php-5.3-apache/tags?page=1&ordering=last_updated*
---
## docker コマンド
- コンテナを確認
`docker ps -a`
- コンテナを作成、起動
`docker run -d --name <コンテナ名> -p 8080:80 <イメージ名>`
- コンテナにログイン
`docker run -it <コンテナ名> /bin/bash`
- 起動中のコンテナを確認
`docker ps`
- コンテナを削除
`docker rm <コンテナID>`
- イメージを確認
`docker images`
- イメージを作成
`docker build -t <Dockerイメージ名> <Dockerfileが存在するディレクトリ>`
- イメージを削除
`docker rmi <イメージID>`
- 起動中のサービスを確認
`docker-compose ps --service`
- 起動中のサービスにログイン
`docker-compose exec <サービス名> /bin/bash`