LoginSignup
14
11

More than 5 years have passed since last update.

「「DockerでWordPressサイトを開発してみよう」を読んでみよう」を読んで、自分なりにまとめてみた。

Posted at

https://qiita.com/kobori_akira/items/ce9a4bcf737e2fee929e
↑の記事を読み、自分なりにDockerについてまとめてみるついでにdocker-composeも軽く触ってみました。

Dockerの登場人物

  • Dockerfile
    • コンテナで実行することや設定を書くファイルです
  • Dockerイメージ
    • Dockerfileをもとにつくられた仮想環境のファイルです
  • Dockerコンテナ
    • Dockerイメージを「コンテナ」として動かします
    • 削除するとその状態は失われます

Dockerのメリット

  • サーバの状態をコードで管理できる
    • 「どんなコマンドを実行するか」「どのファイルを サーバに配置するか」などをDockerfileに書く
  • 「サーバの状態」をアプリのコードと同じようにバージョン管理システムで管理できる
    • 今まで手作業で構築していたものを、自動で作成できる!
  • 起動が高速
    • 実行したコマンドはキャッシュされる –  2度目以降の環境作成が超高速
  • 環境の共有が手軽
    • Dockerfileが1つあればOK
      • Docker Hub Registry

3分でWordPressの環境を構築

docker image pull tutum/wordpress:latest

docker container run -d -p 80:80 --name=wordpress tutum/wordpress

wordpressに適当に情報を入力して管理画面まで行く。

※↓Dockerの仕組みの図はこれが一番分かりやすい気がします。
image.png
image.png

  • -dオプション
    • デタッチド・モードで実行を指定する。 「デタッチド・モード」とは、バックグラウンドで実行すること。つまりは、コンソールに出力が表示されないことを指す。
  • -pオプション
    • コンテナにポートフォワーディングでアクセスできるようにさせる。 ポートフォワーディングとは、ローカルの特定のポートへの通信を、別のIPアドレスの特定のポートに飛ばすこと。 この場合だと、localhostのポート番号80にアクセスすると、それはコンテナ(が管理するWebサーバApache)のポート番号80に飛ぶ。
  • --nameオプション
    • コンテナの名前を決める。このオプションをつけない場合は、コンテナ名はランダムな英単語がつけられる。

起動しているコンテナを確認

docker container ls

Q:コンテナのデータは消えるか?

コンテナを停止
docker container stop (id or name)
A:消えない

コンテナスタート
docker container start

コンテナリスタート
docker contaienr restart
A:消えない

コンテナ削除
docker container rm
A:消える

Docker Compose 概要

Docker compose とは、複数のコンテナから成るサービスを構築・実行する手順を自動的にし、管理を容易にする機能です。
Docker compose では、compose ファイルを用意してコマンドを1 回実行することで、そのファイルから設定を読み込んですべてのコンテナサービスを起動することができます。

最初に起動したWordpressをdocker-compose.ymlにまとめる。
こうすると毎回起動するときに長いオプションを打たなくて済む。

docker-compose.yml
version: '3'
services:
    wordpres:
      image: tutum/wordpress:latest
      container_name: wordpress
      ports:
        - 80:80

docker-compose upで起動

tutum/wodpress のDockerfileを確認する


FROM tutum/lamp:latest
MAINTAINER Fernando Mayo <fernando@tutum.co>, Feng Honglin <hfeng@tutum.co>

# Install plugins
RUN apt-get update && \
  apt-get -y install php5-gd && \
  rm -rf /var/lib/apt/lists/*

# Download latest version of WordPress into /app
RUN rm -fr /app && git clone --depth=1 https://github.com/WordPress/WordPress.git /app

# Configure WordPress to connect to local DB
ADD wp-config.php /app/wp-config.php

# Modify permissions to allow plugin upload
RUN chown -R www-data:www-data /app/wp-content /var/www/html

# Add database setup script
ADD create_mysql_admin_user.sh /create_mysql_admin_user.sh
ADD create_db.sh /create_db.sh
RUN chmod +x /*.sh

EXPOSE 80 3306
CMD ["/run.sh"]

tutum/lamp のDockerfile
https://github.com/tutumcloud/lamp/blob/master/Dockerfile

このままではcontainerを消すたびにMysqlのデータが消えてしまう…

オリジナルのDockerイメージ(カスタマイズしたWordPress)の作成

git clone https://github.com/mookjp/tutum-docker-wordpress

cd tutum-docker-wordpress

コンテナとローカルとのファイル共有
docker run -d -p 80:80 -v $(pwd):/data-share --name=xxx-wordpress tutum/wordpress
コンテナの中に入る
docker exec -it xxx-wordpress /bin/bash

実際にWordPressの設定を終えてから、そのデータをdata-shareにコピーする。
mysqldump -u root wordpress > /data-share/mysql.dump.sql

docker contianer stop xxx-wordpress
docker contianer rm xxx-wordpress
buildする
docker build -t xxx-wordpress .

設定済みのimageが出来る
docker run -d -p 80:80 --name=xxx-wordpress xxx-wordpress


version: '3'
services:
    wordpres:
      build:
        context: ./tutum-docker-wordpress
      container_name: xxx-wordpress
      ports:
        - 80:80
      volumes:
        - ./tutum-docker-wordpres:/data-share

おまけ

nginx,php-fpm,mysql環境構築

docker-compose.yml


version: '3'
services:
  nginx:
    build:
      context: ./nginx
    depends_on:
      - php
    ports:
      - 80:80
    volumes:
      - ./app/public:/var/www/public

  php:
    build:
      context: ./phpfpm
    volumes:
      - ./app/public:/var/www/public

  mysql:
    restart: always
    image: mysql:latest
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=test
    ports:
      - 3306:3306

nginx/Dockerfile


FROM nginx:latest
COPY ./etc/nginx/nginx.conf /etc/nginx/nginx.conf
COPY ./etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf

php-fpm/Dockerfile


FROM php:7.1-fpm

nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$uri - $is_args - args :::'
                      '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

default.conf

server {
    index index.php index.html;
    server_name localhost;
    root /var/www/public;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11