åºè«
æ¬çš¿ã¯ å åžåœ¹æè·å¡ãWEBããã°ã©ãã«è»¢è·ãããŸã§ã®ããŒãããã ã®é£èŒèšäºã®äžéšã§ãã
åå: docker-composeã®åºæ¬çãªäœ¿ãæ¹ãèŠããªããLAMPç°å¢ãæ§æåé¢ããŠã¿ã
Dockerfileã«ã€ããŠ
ãããŸã§ã¯ãDockerHubã«ç»é²ãããŠããã€ã¡ãŒãžããã®ãŸãŸäœ¿ã£ãŠããŸããã
ããããããã©ã«ãã®èšå®ã倿Žãããå Žåãã远å ããã±ãŒãžãå¿
èŠãªå Žåãªã©ãå€ãã¯ãã§ããããã£ãå Žåã¯å°ã£ãŠããŸããŸãã
ïŒäŸãã° php:7.4-apache ã¯ããã©ã«ãã®ãŸãŸã ãš php-pdo ãšã¯ã¹ãã³ã·ã§ã³çã¯å
¥ã£ãŠããªããããããŒã¿ããŒã¹æ¥ç¶ãã§ããªãã£ããããŸãïŒ
èµ·åäžã®ã³ã³ããã®äžã«å ¥ã£ãŠå¿ èŠãªèšå®ãå°å ¥äœæ¥ãè¡ã£ãŠãè¯ãã®ã§ããããã®å Žåããã®ã³ã³ãããå¥ã®ç°å¢ã«æã¡èŸŒã¿ãããšãã誀ã£ãŠã³ã³ãããåé€ããŠããŸã£ããšãã«ãåãäœæ¥ãç¹°ãè¿ããªããŠã¯ãªããªããªãããéåžžã«å¹çãæªãã§ãã
ããããåé¡ã解決ããããã«äœ¿ãã®ã Dockerfile ã§ãã
-
Dockerfile
- å ¬éãããŠããDockerã€ã¡ãŒãžããã®ãŸãŸäœ¿ãã®ã§ã¯ãªããå¿ èŠãªããã±ãŒãžãã¢ããªãåçš®èšå®ãå«ãã Dockerã€ã¡ãŒãžãèªåã§äœæããŠäœ¿çšããå Žåã«èšè¿°ãããã«ãæé æž
åºæ¬çãªæžãæ¹
# FROM: ã©ã®ã€ã¡ãŒãžãåºã«ããã
FROM centos
# MAINTAINER: äœæãããŠãŒã¶ã®æ
å ±ïŒä»»æïŒ
MAINTAINER Admin <admin@admin.com>
# RUN: docker buildãããšãã«å®è¡ããã
RUN echo "now building..." && \
curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress
# COPY: ãã¹ãåŽã«ãããã¡ã€ã«ïŒDockerfileã®ãããã£ã¬ã¯ããªé
äžã«ãããã¡ã€ã«ã®ã¿ïŒãã³ã³ããå
ã«ã³ããŒ
COPY ./php.ini /usr/local/etc/php/
# ADD: COPYãšã»ãŒåãã ããtarãã¡ã€ã«ã¯èªåã§å±éããŠããã
ADD ./vhosts.tar /etc/nginx/conf.d/
# EXPOSE: ã³ã³ãããæ¥ç¶çšã«ãªãã¹ã³ããããŒããæå®
## èŠããã«ã³ã³ããã«éãã穎ãšãªãããŒããæå®
EXPOSE 80
# ENV: ã³ã³ããå
ã®ç°å¢å€æ°ãèšå®
## åºæ¬çã« Dockerfile: RUN ã³ãã³ãå
ã§åç
§å¯èœãªç°å¢å€æ°ãèšå®
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
# USER: ã³ã³ããå
ã§ã³ãã³ããå®è¡ãããŠãŒã¶ãæå®
USER www-data
# WORKDIR: äœæ¥ãã£ã¬ã¯ããªã倿Žãã
WORKDIR /var/www/
# CMD: docker run (docker-compose up | start) ãããšãã«å®è¡ããã
## 以äžã®å Žå $ /bin/bash -c "echo 'now running...'" ãå®è¡ããã
CMD ["/bin/bash", "-c", "echo 'now running...'"]
Dockerfileãæžãå Žåã®ãã€ã³ãã«ã€ããŠ
RUNã³ãã³ãã®æåã«ã€ããŠ
Dockerfile ã«æžããã RUN ã³ãã³ãã¯ãæ¯åäžéçãªDockerã³ã³ãããšããŠèµ·åããåã³ãã³ããå®è¡ããæ®µéã§Dockerã€ã¡ãŒãžãäœæããããšããäœæ¥ãç¹°ãè¿ããŸãã
ãã®å段éã®Dockerã€ã¡ãŒãžã¯ã¬ã€ã€ãŒãšåŒã°ããŸãã
ãã®ãããäžã€åã®ã³ãã³ãã®å®è¡ç¶æ ãç¶æ¿ããããã§ã¯ãªãããšã«æ°ãã€ããå¿ èŠããããŸãã
äŸãã°ã/tmp ãã£ã¬ã¯ããªã«ç§»åã㊠test.txt ãäœæããããå Žåã以äžã®ããã«æžããŠãäžæãè¡ããŸããã
RUN cd /tmp # (1)
RUN touch test.txt # (2)
(1) å®è¡æãèµ·åããäžéã³ã³ããã§ cd /tmp ã³ãã³ããå®è¡ãããŠäœæ¥ãã£ã¬ã¯ããªã¯ /tmp ã«å€æŽãããŸããã(2) å®è¡æã¯ãŸãå¥ã®äžéã³ã³ãããèµ·åãããããäœæ¥ãã£ã¬ã¯ããªã¯ / ã«ãªã»ãããããŠããŸããŸãã
ãã®ãããäžèšäœæ¥ãå®çŸãããå Žåã¯ä»¥äžã®ããã«æžãå¿ èŠããããŸãã
# ã·ã§ã«ã¹ã¯ãªããã® && ã§ã€ãªãã
RUN cd /tmp && touch test.txt
# ãããã¯ã
# WORKDIR ã§äœæ¥ãã£ã¬ã¯ããªå€æŽ
WORKDIR /tmp
RUN touch test.txt
RUNã³ãã³ãã¯ãªãã¹ãæå°éã§
åè¿°ã®è©±ãšè¢«ããŸãããRUNã³ãã³ãã¯å®è¡ã®åºŠã«ã¬ã€ã€ãŒãç©ã¿éãªã£ãŠãããããã€ã¡ãŒãžãè¥å€§åããããã§ãã
ãã®ããæ¥µå RUNã³ãã³ãã¯äžã€ã«ãŸãšããããã«æžãããšãæšå¥šããŠããŸãã
ãŸããäœæã§ããã¬ã€ã€ãŒã«ã¯äžéïŒ128ã¬ã€ã€ãŒïŒãããããããã®æå³ã§ããªãã¹ããŸãšããŠå®è¡ããã»ããããã§ãã
# RUNã³ãã³ãæžãæ¹ã®ã³ã
## - ã³ãã³ã㯠&& ã§ã€ãªããŠãã
## - \ ã§æ¹è¡ã§ããããæå¹æŽ»çšãã
## - RUNã³ãã³ãéäžã§ã³ã¡ã³ããæžãããå Žå㯠:'ã³ã¡ã³ã' ã³ãã³ããæŽ»çšãã
RUN : 'å¿
èŠãªããã±ãŒãžã®ã€ã³ã¹ããŒã«' && \
apt-get update && apt-get install -y wget curl git libicu-dev mailutils unzip vim && \
: 'PHPãšã¯ã¹ãã³ã·ã§ã³ã®å°å
¥' && \
docker-php-ext-install intl pdo pdo_mysql && \
: 'cleanup apt-get caches' && \
apt-get clean && rm -rf /var/lib/apt/lists/*
Dockerãã«ãæã®ãã£ãã·ã¥ã«ã€ããŠ
Dockerã³ã³ããããªãã«ããããéãDockerfile ã§ãã§ã«å®è¡æžã¿ã®ã³ãã³ãã¯ããã£ãã·ã¥ã䜿çšãããŸãã
ãã®ãããããŸãå€ãããªãéšåã«ã€ããŠã¯ Dockerfile ã®æåã®ã»ãã«æžããŠããããšã§ãDockerãã«ãã®æéãççž®ã§ããŸãã
ïŒããã§èšããããŸãå€ãããªãéšåããšããã®ã¯ãäŸãã°åºæ¬å¿
èŠãšãªãããã±ãŒãžã®ã€ã³ã¹ããŒã«ãªã©ã§ãïŒ
Linuxããã±ãŒãžãããŒãžã£ã®ãã£ãã·ã¥ã«ã€ããŠ
Linuxããã±ãŒãžãããŒãžã£ïŒDebian ã® apt-get, CentOS ã® yum, Alpine ã® apkïŒãå©çšããŠå¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããå Žåãããã±ãŒãžãããŒãžã£ã®ãã£ãã·ã¥ãã¡ã€ã«ãæ®ã£ããŸãŸã ãšãDockerã€ã¡ãŒãžè¥å€§åã®åå ã«ãªããŸãã
ãã®ãããå¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããåŸã¯ãã£ãã·ã¥åé€ããŠãããšè¯ãã§ãã
ïŒapk ã ãš --no-cache ãªãã·ã§ã³ã䜿ããã®ã§äŸ¿å©ã§ãïŒ
Infrastructure as Code (IaC), CI/CD
Dockerfile ãäœæããããšã§ãèªåã§å¥œããªããã«Dockerã€ã¡ãŒãžãäœæããããšãã§ããããã«ãªããŸãããã¡ãªããã¯ããã ãã§ãªããOSèšå®ãªã©ã®ã€ã³ãã©æ§ç¯éšåãå«ãã³ãŒãåã§ããããšããã®ãéåžžã«å€§ããã§ãã
ããã«ãããåãç°å¢ãç°¡åã«ãã¹ãªãäœãããšãã§ãããŸãã€ã³ãã©æ§ç¯åŠçãæ§æç®¡çããããšãå¯èœã«ãªããŸãã
äŸãã° Git ã§ Dockerfile ãããŒãžã§ã³ç®¡çããCIããŒã«ïŒJenkins ãªã©ã®èªåãããã€ããŒã«ïŒã䜿ãã°ãã¢ããªã±ãŒã·ã§ã³ã®ãã«ãããDockerãã«ãïŒDockerã€ã¡ãŒãžã®äœæïŒãã³ã³ããã®ãããã€ãŸã§ãèªååããããšãã§ããŸãã
ããã«ããããã€ããç°å¢ã«å¯ŸããŠèªåãã¹ãïŒSeleniumãªã©ïŒã飿ºãããããšã§ãããå¹ççã«ç²ŸåºŠã®é«ãã·ã¹ãã éçºãã§ããããã«ãªããŸãã
ãã®ããã«éçºããã°ããœãŒã¹ã³ãŒããç°å¢æ§ç¯éšåã§å€æŽãå ¥ã£ãéãç°¡åã«æ¬çªã«è¿ãç¶æ ã§ãããã€ïŒãã¹ããã§ããããã«ãªããŸãã
æ¬çªã«è¿ãç¶æ ã§åžžã«ãã¹ããæåããŠããã°ããªãªãŒã¹çŽåã§åé¡ãçºçããããšãæžããããšãã§ããŸãã
ãã®ãããªèãæ¹ã Infrastructure as Code (IaC) ãšåŒã³ãŸãã
ããããŠããœãŒã¹ã³ãŒãã®ããŒãžã§ã³ç®¡çã Git ã§å¯èœã«ãªã£ãããã«ãOSã¬ãã«ã®èšå®ç®¡çã Dockerfile ã§å¯èœã«ãªã£ããšãèšããŸãã
Dockerfileãå ããLAMPæ§æ
æŒç¿èª²é¡ 01
ãããŸã§ã®è©±ãèžãŸããŠãdocker-compose ã䜿ã£ãLAMPæ§æãäœãçŽããŸãã
ã³ã³ããæ§æãšãã«ãæé ã¯ä»¥äžã®éãã§ãã
- composeãã¡ã€ã«ããŒãžã§ã³:
3 -
webãµãŒãã¹ïŒã³ã³ããå:training2_webïŒ- ããŒã¹ã€ã¡ãŒãž:
php:7.4-apache - ãã°ãã©ãŒããã:
json-file - ããŒã: http://localhost ã§ãã¹ãåŽããã¢ã¯ã»ã¹ã§ããããã«èšå®
- ãªã³ã¯:
dbãµãŒãã¹ - å¿
èŠããã±ãŒãž:
- aptããã±ãŒãž:
-
libonig-dev- â» PHP 7.4 ãããã«ããã€ãæåé¢é£æäœã«
mbstringãšã¯ã¹ãã³ã·ã§ã³ã§ã¯ãªãã鬌è»ã䜿ãããã«å€æŽãããããå°å ¥ãã
- â» PHP 7.4 ãããã«ããã€ãæåé¢é£æäœã«
-
vim: ãã¡ã€ã«ç·šéçšã«ãšããããå ¥ããŠãããšè¯ã
-
- PHPãšã¯ã¹ãã³ã·ã§ã³:
pdo,pdo_mysql- â»
docker-php-ext-installã³ãã³ãã䜿ãã®ãç°¡å
- â»
- aptããã±ãŒãž:
- èšå®:
- PHPèšå®ãã¡ã€ã«: ã³ã³ããå
/usr/local/etc/php/php.iniã«é 眮- date.timezone:
Asia/Tokyo - mbstring.internal_encoding:
UTF-8 - mbstring.language:
Japanese
- date.timezone:
- PHPèšå®ãã¡ã€ã«: ã³ã³ããå
- ããŒã¹ã€ã¡ãŒãž:
-
dbãµãŒãã¹ïŒã³ã³ããå:training2_dbïŒ- ããŒã¹ã€ã¡ãŒãž:
mysql:5.7 - ãã°ãã©ãŒããã:
json-file - rootãŠãŒã¶ãã¹ã¯ãŒã:
root(ç°å¢å€æ°:MYSQL_ROOT_PASSWORD) - äœæããããŒã¿ããŒã¹:
training2(ç°å¢å€æ°:MYSQL_DATEBASE) - èšå®ãã¡ã€ã«: ã³ã³ããå
/etc/mysql/conf.d/my.cnfã«é 眮- mysqld.character-set-server:
utf8mb4 - client.default-character-set:
utf8mb4
- mysqld.character-set-server:
- â» my.cnf ã¯ããŒããã·ã§ã³ 644 ã«èšå®ããããš
- ããŒã¹ã€ã¡ãŒãž:
æ§æ
以äžã®æ§æã¯æ¡ã®äžã€ã§ããïŒåç §: 2-lamp/lamp/ïŒ
lamp/
|_ docker/ # dockerã³ã³ããèšå®
| |_ db/
| | |_ Dockerfile # dbãµãŒãã¹ã®ãã«ãæé
| | |_ my.cnf # MySQLèšå®ãã¡ã€ã« => service://db:/etc/mysql/conf.d/my.cnf
| |
| |_ web/
| |_ Dockerfile # webãµãŒãã¹ã®ãã«ãæé
| |_ php.ini # PHPèšå®ãã¡ã€ã« => service://web:/usr/local/etc/php/php.ini
|
|_ docker-compose.yml # dockerã³ã³ããæ§æ
# - web: php:7.4-apache
# - http://localhost => service://web:80
# - link: service://db:3306
# - db: mysql:5.7
åãã¡ã€ã«ã®äžèº«ã®è§£èª¬ã«ã€ããŠã¯ãåç §ãã£ã¬ã¯ããªå ã®åãã¡ã€ã«å ã®ã³ã¡ã³ããåç §ããŠãã ããã
åäœç¢ºèª
# -- user@localhost
# docker-compose.yml ã®ãããã£ã¬ã¯ããªã«ç§»åãã
# $ cd /path/to/2-lamp/lamp/
# docker-compose.yml ã«èšè¿°ããŠããå
šãŠã®ãµãŒãã¹ïŒã³ã³ããïŒããã«ããã
$ docker-compose build
# docker-compose.yml ã«èšè¿°ããŠããå
šãŠã®ãµãŒãã¹ïŒã³ã³ããïŒãèµ·åãã
## -d: daemonã¢ãŒãïŒããã¯ã°ã©ãŠã³ãïŒã§ã³ã³ããèµ·å
$ docker-compose up -d
# èµ·å確èª
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------
training2_db docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
training2_web docker-php-entrypoint apac ... Up 0.0.0.0:80->80/tcp
# webãµãŒãã¹ã³ã³ããã«å
¥ãïŒã³ã³ããå
bash ã³ãã³ãå®è¡ïŒ
$ docker-compose exec web bash
# -- root@service://web
# --- php.ini ã®å
容ãåæ ãããŠããã確èªãã ---
# date.timezone ç¢ºèª => Asia/Tokyo ã«ãªã£ãŠããã°OK
% php -i | grep 'date.timezone'
date.timezone => Asia/Tokyo => Asia/Tokyo
# mbstring èšå®ç¢ºèª
## internal_encoding => UTF-8, language => Japanese ãªãOK
% php -i | grep 'mbstring'
:
mbstring.internal_encoding => UTF-8 => UTF-8
mbstring.language => Japanese => Japanese
:
# ã³ã³ããæãã
% exit
# -- user@localhost
# dbãµãŒãã¹ã³ã³ããã«å
¥ãïŒã³ã³ããå
bash ã³ãã³ãå®è¡ïŒ
$ docker-compose exec db bash
# -- root@service://db
# user: root, password: root ã§ãã°ã€ã³ã§ããã確èª
% mysql -u'root' -p'root'
# MySQLã®æåã³ãŒãèšå®ãåæ ãããŠããã確èª
## character_set_client, character_set_server çã utf8mb4 ã«ãªã£ãŠããã°OK
> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
# ããŒã¿ããŒã¹: training2 ãäœæãããŠããã確èª
# (training2 ããŒã¿ããŒã¹ãéžæ)
> use training2;
Database changed
# MySQLãµãŒãããæãã
> exit
# ã³ã³ããããæãã
% exit
php-pdo ã䜿ã£ãŠ dbãµãŒãã¹ã³ã³ããã«æ¥ç¶
service://web:/var/www/html/index.php (webãµãŒãã¹ã³ã³ããå
ã® /var/www/html/index.php) ãäœæããphp-pdo ã䜿ã£ã MySQL ããŒã¿ããŒã¹æäœããã°ã©ã ãäœæããŸãã
# -- user@localhost
# webãµãŒãã¹ã³ã³ããã«å
¥ãïŒã³ã³ããå
bash ã³ãã³ãå®è¡ïŒ
$ docker-compose exec web bash
# -- root@service://web
# ããã©ã«ãã§ /var/www/html/ ãã«ã¬ã³ããã£ã¬ã¯ããªã§ããããããã®ãŸãŸ index.php äœæ
% tee index.php << \EOS
<?php
// MySQLãµãŒãæ¥ç¶èšå®
$db = [
// dbãµãŒãã¹ã³ã³ãããšãªã³ã¯ããŠãããããtcp://db:3306 ã§ service://db:3306 ã«æ¥ç¶å¯èœ
'host' => 'db',
'database' => 'training2', // æ¥ç¶å
ããŒã¿ããŒã¹
'user' => 'root', // æ¥ç¶ãŠãŒã¶
'password' => 'root', // æ¥ç¶ãã¹ã¯ãŒã
];
// MySQLãµãŒãæ¥ç¶
try {
$dbh = new PDO("mysql:dbname={$db['database']};host={$db['host']}", $db['user'], $db['password']);
echo '<p>ããŒã¿ããŒã¹ã«æ¥ç¶ããŸãã</p>';
} catch (PDOException $e) {
echo '<p>æ¥ç¶å€±æ: ' . $e->getMessage() . '</p>';
exit();
}
// usersããŒãã«ããªããã°æ°èŠäœæãã
$dbh->exec('CREATE TABLE IF NOT EXISTS users (
id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created DATETIME,
updated DATETIME
)');
// usersããŒãã«ããããŒã¿ååŸ
$rows = $dbh->query('SELECT * FROM users')->fetchAll(PDO::FETCH_ASSOC);
// usersããŒãã«ã«äžã€ãããŒã¿ããªãå Žåã¯æ°èŠããŒã¿æ¿å
¥
if (count($rows) === 0) {
$sql = $dbh->prepare('INSERT INTO users (name, password, created, updated) VALUES (:name, :password, :created, :updated)');
// åã«ã©ã ã®å€ãæå®ããŠæ¿å
¥å®è¡
// â» password 㯠BCRYPT ããã·ã¥åããŠä¿åãã
if ($sql->execute([
':name' => 'admin',
':password' => password_hash('pa$$word', PASSWORD_BCRYPT),
':created' => date('Y-m-d H:i:s'),
':updated' => date('Y-m-d H:i:s'),
])) {
echo '<p>æ°èŠããŒã¿ãæ¿å
¥ããŸãã</p>';
} else {
exit('<p>ããŒã¿ã®æ¿å
¥ã«å€±æããŸãã</p>');
}
// æ¹ããŠusersããŒãã«ããããŒã¿ååŸ
$rows = $dbh->query('SELECT * FROM users')->fetchAll(PDO::FETCH_ASSOC);
}
?>
<table border="1">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>password</th>
<th>created</th>
<th>updated</th>
</tr>
</thead>
<tbody>
<?php foreach ($rows as $row) : ?>
<tr>
<td><?= $row['id'] ?></td>
<td><?= $row['name'] ?></td>
<td><?= $row['password'] ?></td>
<td><?= $row['created'] ?></td>
<td><?= $row['updated'] ?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
EOS
# ã³ã³ããããæãã
% exit
# -- user@localhost
# webãµãŒãã¹ã³ã³ããã®ã¢ã¯ã»ã¹ãã°ç¢ºèªã®ãããã°ãã©ããŒ
$ docker-compose logs -f web
http://localhost ã«ã¢ã¯ã»ã¹ããŠãwebãµãŒãã¹ã³ã³ããå ã®phpãããdbãµãŒãã¹ã³ã³ããå ã®ããŒã¿ããŒã¹æäœãã§ããŠããããšã確èªããŸãã
ãŸããwebãµãŒãã¹ã³ã³ããã®ãã°ã«ã¢ã¯ã»ã¹ãã°ãåºãŠããã®ã確èªã§ããããCtrl + C ã§ãã°ãã©ããŒãçµäºããŸãããã
åŸçä»ã
# -- user@localhost
# docker-compose å
ã®å
šã³ã³ããã忢 => åé€
$ docker-compose down
Dockerããªã¥ãŒã ã«ã€ããŠ
ãããŸã§ã®Dockerã®äœ¿ãæ¹ã«ã¯ããã€ãåé¡ããããŸãã
äŸãã°ä»¥äžã®ãããªåé¡ã§ãã
- MySQLããŒã¿ããŒã¹ã®ããŒã¿ããã³ã³ãããåé€ãããšäžç·ã«æ¶ããŠããŸã
- Dockerfileãä¿®æ£ããŠãªãã«ãããå Žåãåæ§ã«æ¶ããŠããŸã
- ããã°ã©ã ãœãŒã¹ã³ãŒããåæ§ã«ãã³ã³ããåé€ãšåæã«åé€ãããŠããŸã
- ããã°ã©ã ãœãŒã¹ã³ãŒãã®ç·šéãè¡ãã¥ãã
- ãã¡ãã¡ã³ã³ããã®äžã«å ¥ã£ãŠ vim çã§ç·šéããªããã°ãªããªã
ãããã£ãåé¡ã¯Dockerã®VolumeããŠã³ãæ©èœãå©çšããããšã§è§£æ±ºã§ããŸãã
ããã¯ãã¹ãåŽã«ååšããå®äœãã¡ã€ã«ããã£ã¬ã¯ããªããDockerã³ã³ããããèªã¿æžãã§ããããã«æ¥ç¶ïŒå ±æïŒããæ©èœã§ãã
èšãæãããšããã¹ãåŽã®ãã¡ã€ã«ã»ãã£ã¬ã¯ããªã®ã·ã³ããªãã¯ãªã³ã¯ãDockerã³ã³ããå ã«äœæããæ©èœãšãèšããŸãã
ããã«ãããããŒã¿ããœãŒã¹ã³ãŒããDockerã³ã³ããå ã«çœ®ããã«æžãããã«ãªããããã³ã³ãããåé€ãããŠããã¹ãåŽã«å®äœãã¡ã€ã«ïŒããŒã¿ããœãŒã¹ã³ãŒãïŒãæ®ãããšãå¯èœãšãªããŸããïŒããŒã¿æ°žç¶åïŒ
èšå®æ¹æ³
åºæ¬çã«ã¯ docker-compose.yml ã«ä»¥äžã®ããã«èšè¿°ããããšã§VolumeããŠã³ãããããšãã§ããŸãã
services:
<service_name>:
# VolumeããŠã³ãããããã¡ã€ã«ã»ãã£ã¬ã¯ããªãé
å圢åŒã§èšå®
volumes:
# åºæ¬æžåŒ: <ãã¹ãåŽããŠã³ãå
>:<ã³ã³ããåŽããŠã³ãå
>:<ã¢ãŒã>
# ãã¹ãåŽã«ã¬ã³ããã£ã¬ã¯ããªïŒ./ïŒã¯ docker-compose.yml ã®ãããã£ã¬ã¯ããªã瀺ã
## 以äžã®å Žå docker-compose.yml ã®ãããã£ã¬ã¯ããªçŽäžã® html/ ãã£ã¬ã¯ããªã
## ã³ã³ããå
ã® /var/www/html/ ãã£ã¬ã¯ããªãšãªã³ã¯ããã³ã³ããåŽããèªã¿æžãå¯èœïŒrwïŒãšããŠãã
- ./html/:/var/www/html/:rw
# ã³ã³ããåŽããã®æžã蟌ã¿ãçŠæ¢ïŒread-onlyïŒã«ãããå Žåã¯ãro ã¢ãŒããæå®ãã
## 以äžã®å Žå php.ini èšå®ãã¡ã€ã«ãã³ã³ããå
ã® /usr/local/etc/php/php.ini ã« read-only ã§ãªã³ã¯ããŠãã
- ./php.ini:/usr/local/etc/php/php.ini:ro
# ã¢ãŒããçç¥ããå Žåã¯åºæ¬çã« rw ã¢ãŒããšãªã
- ./logs/:/var/log/apache/
# ãã¹ãåŽã®ãã¡ã€ã«ã»ãã£ã¬ã¯ããªã¯çµ¶å¯Ÿãã¹ãæå®ããããšãã§ãã
- /etc/httpd/conf.d/:/etc/apache2/sites-available/
æŒç¿èª²é¡ 02
æŒç¿èª²é¡ 01 ãæ¹è¯ãã以äžã®ããŒã¿ãæ°žç¶åããŸãããã
-
service://web:/var/www/html/<=host:./html/(rw mode)-
./html/ãwebãµãŒãã¹ã³ã³ããå ã®/var/www/html/ã«èªã¿æžãã¢ãŒãã§ããŠã³ã
-
-
service://web:/usr/local/etc/php/php.ini<=./docker/web/php.ini(read-only)- Dockerfileå
ã§
COPY(ADD) ãã代ããã«VolumeããŠã³ãæ©èœã䜿ãããšãã§ãã - Dockerfileã§èšå®ãã¡ã€ã«ãã³ã³ããã«è»¢åããå Žåãèšå®å 容ã倿Žãã床ã«ã³ã³ããããªãã«ãããå¿ èŠãããããVolumeããŠã³ãã®å Žåã¯ã³ã³ãããåèµ·åããã ãã§èšå®åæ ãããã®ã§äŸ¿å©ïŒå Žåã«ãã£ãŠã¯åèµ·åããäžèŠïŒ
- Dockerfileå
ã§
-
service://db:/var/lib/mysql/<=host:./web-data/(rw mode)-
./web-data/ãdbãµãŒãã¹ã³ã³ããå ã®MySQLããŒã¿/var/lib/mysql/ã«ããŠã³ã
-
æ§æ
åç §: 2-lamp/volume/
volume/
|_ docker/ # dockerã³ã³ããèšå®
| |_ db/
| | |_ my.cnf # MySQLèšå®ãã¡ã€ã« => service://db:/etc/mysql/conf.d/my.cnf
| | ## èšå®ãã¡ã€ã«COPYçšã ã£ãDockerfileã¯äžèŠã«ãªã
| |
| |_ web/
| |_ Dockerfile # webãµãŒãã¹ã®ãã«ãæé
| |_ php.ini # PHPèšå®ãã¡ã€ã« => service://web:/usr/local/etc/php/php.ini
|
|_ db-data/ # => service://db:/var/lib/mysql/
|_ html/ # => service://web:/var/www/html/
| |_ index.php # http://localhost ã§è¡šç€ºããããã¡ã€ã«
|
|_ docker-compose.yml # dockerã³ã³ããæ§æ
# - web: php:7.4-apache
# - http://localhost => service://web:80
# - link: service://db:3306
# - db: mysql:5.7
åãã¡ã€ã«ã®äžèº«ã®è§£èª¬ã«ã€ããŠã¯ãåç §ãã£ã¬ã¯ããªå ã®åãã¡ã€ã«å ã®ã³ã¡ã³ããåç §ããŠãã ããã
DockerããŒã¿ããªã¥ãŒã ã®äœæ
åç¯ã§ã¯ããã¹ãåŽã«ãããããäœæããŠãããã¡ã€ã«ã»ãã£ã¬ã¯ããªãããŠã³ãããŸããã
ããããDockerã³ã³ãããã«ãæã«ããŒã¿æ°žç¶åçšããªã¥ãŒã ãæ°èŠäœæããããšãã§ããŸãã
ãã®å Žåãåºæ¬çã« /var/lib/docker/volumes/ é
äžã«æ°èŠãã£ã¬ã¯ããªãäœæããããããã³ã³ããå
ã«ããŠã³ããããããšã«ãªããŸãã
MySQLããŒã¿ã®æ°žç¶åãªã©ã®å Žåã¯ããã®ããã«æ°èŠããŒã¿ããªã¥ãŒã ãäœæããŠå©çšããããšãå€ãã§ãã
èšå®æ¹æ³
docker-compose.yml ã«ä»¥äžã®ããã«èšè¿°ããŸãã
# æ°èŠäœæããããªã¥ãŒã
volumes:
<volume_name>:
# è²ã
èšå®ã§ããããåºæ¬çç¥ã§åé¡ãªã
# çç¥ããå Žå driver: local ãããã©ã«ãã§äœ¿ããã
# dockerãµãŒãã¹ã³ã³ãã
services:
<service_name>:
volumes:
# æ°èŠäœæããããŒã¿ããªã¥ãŒã ãã³ã³ããå
ã«ããŠã³ã
- <volume_name>:/path/to/data/
æŒç¿èª²é¡ 03
æŒç¿èª²é¡ 02 ã®MySQLããŒã¿ãæ°èŠããªã¥ãŒã db-data ã§æ°žç¶åããŸãããã
æ§æ
åç
§: 2-lamp/volume2/
ç¹ã« docker-compose.yml ã®å
容ããã確èªããŠãããŸãããã
DockerããŒã¿ããªã¥ãŒã ã®ç¢ºèªã»åé€
# å
šãŠã®DockerããŒã¿ããªã¥ãŒã ã確èª
$ docker volume ls
DRIVER VOLUME NAME
local ...
:
# ç¹å®ã®ããªã¥ãŒã åé€
$ docker volume <volume_name>
# docker-compose ã§ã³ã³ããåé€ãšåæã«ãdocker-compose å
ã§å®çŸ©ãããŠããããªã¥ãŒã ãåé€
$ docker-compose down -v
åŸçä»ã
æŒç¿ãå®äºããã Docker ã³ã³ããã¯åæ¢ => åé€ããŠããŸã£ãŠè¯ãã§ãã
# -- user@localhost
# docker-compose.yml ã«å®çŸ©ãããå
šã³ã³ããã忢 => åé€
# -v ãªãã·ã§ã³: äœæããããªã¥ãŒã ããŒã¿ãåé€
$ docker-compose down -v

