docker-composeでPHPとMySQLの開発環境を作る

dockerとdocker-composeをインストールする。

# apt install docker.io docker-compose

下記のymlファイルを作成する。

version: '3'

services:
    php:
        image: php:7.3-apache
        volumes: 
            - /home/user/docker/test/www:/var/www/html
        ports:
            - "80:80"
        container_name: test-php
    mysql:
        image: mysql:5.7
        command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
        volumes:
            - /home/user/docker/test/mysql:/var/lib/mysql
        ports:
            - "3306:3306"
        environment: 
            MYSQL_ROOT_PASSWORD: rootpassword
            MYSQL_DATABASE: test
            MYSQL_USER: test
            MYSQL_PASSWORD: password
        container_name: test-mysql

コンテナを作成して起動する。

# cd /home/user/docker/test/
# docker-compose up -d

作成済みのコンテナを起動する。
※docker-compose.ymlが存在する場所で実行する

# docker-compose start

作成済みのコンテナを停止する。
※docker-compose.ymlが存在する場所で実行する

# docker-compose stop

コンテナを停止して削除する。
※docker-compose.ymlが存在する場所で実行する

# docker-compose down

Dockerのphp:7.0-apacheにXdebugを入れてみる

今回の目的は、とりあえずEclipseからデバッグできるようにすることです。

php:7.0-apacheイメージでコンテナ作成済みの前提です。
<コンテナ作成手順>

コンテナのbashを動かす。

# docker container exec -it test_php7 /bin/bash

xdebugをインストールする。

pecl install xdebug-2.7.2

php.iniがないので作成してとりあえずの設定を入れる。xdebug.soのパスはインストール後に出てくるが、わからなければ検索して。

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
xdebug.remote_enable = 1
xdebug.remote_connect_back = 1

Dockerのphp:7.0-apacheにcomposerを入れてみる

php:7.0-apacheイメージでコンテナ作成済みの前提です。
<コンテナ作成手順>

ゲストのbashを動かしたいので下記コマンド実行。

# docker container exec -it test_php7 /bin/bash

composerをインストールする。
※本当はrootでやっちゃダメなんだけど今回は検証環境構築目的なので

# curl https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer

ライブラリをインストールしてみる。https://packagist.org/を参考にインストールするライブラリを探す。今回はPHPMailerをインストールしてみる。
※rootでやっちゃってるので警告でます

# cd /var/www/html
# composer require phpmailer/phpmailer

「composer.json」「composer.lock」「vendor」ディレクトリが自動生成される。

DockerでPHP7+Apacheを動かしてみた

イメージの取得。

# docker image pull php:7.3-apache

コンテナを生成して実行。ここでホストのディレクトリをゲストのwwwにマウントする-vオプションを付ける。

# docker container run -d --name test_php7 -v /home/user/apache_test:/var/www/html -p 80:80 -p 443:443 php:7.3-apache

もうこれだけで127.0.0.1にアクセスすれば動くのだが、このときは.htaccessによる設定変更が必要だったので下記も実行する。

# docker container exec -i -t test_php7 /bin/bash
# a2enmod rewrite

まだゲストのコンソールだと思うので、そのまま更にMySQL拡張もインストール。

# docker-php-ext-install pdo pdo_mysql

intl拡張も使うのでインストール。

# apt update
# apt install libicu-dev
# docker-php-ext-install intl

zip拡張も使うのでインストール。

# apt update
# apt install libzip-dev
# docker-php-ext-install zip

あとはコンテナを再起動して完了。

Ubuntu16.04でDockerのPostgreSQLをなんとなく動かしてみた

Dockerさわってみた感想

なんとなくのイメージは「imageの取得」→「imageからcontainerの生成」→「containerの開始」←→「containerの停止」が主かな。現在動いているcontainerをimageにしてtarとして保存したり、逆に読み込んでcontainerを作ったりできる。

“docker.io” をインストール。最初に “docker” をインストールしてdockerコマンド実行したらdockerはインストールされていませんて言われた。関係ないソフトらしい。

$ sudo apt-get install docker.io

PostgreSQL9.5のimageの取得。最新が良い場合は “postgres:9.5” の箇所を “postgres” とする。

$ sudo docker image pull postgres:9.5

取得済みのimageを確認する。

$ sudo docker image list

取得済みのimageを削除する。

$ sudo docker image rm postgres:9.5

取得済みのimageからcontainerを生成して実行する。
-dはデーモンとして起動、-eは環境変数を設定、-pはポート転送(ホストの待ち受けポート:コンテナのポート)

$ sudo docker container run -d --name test_postgres -e POSTGRES_PASSWORD=password -p 5432:5432 postgres:9.5

containerのプログラムを実行する。
-itは標準出力をホストと連結する指定。

$ sudo docker container exec -i -t test_postgres /bin/bash

containerの停止。

$ sudo docker container stop test_postgres

containerの再開。

$ sudo docker container start test_postgres

containerの削除。

$ sudo docker container rm test_postgres

実行中のcontainerを確認する。実行中ではないものも表示する場合は-aオプションを使う。

$ sudo docker container list

使用されていないvolumeを一括削除する。

$ sudo docker volume prune

containerで使用しているvolumeなどを調べる。データベースの内容をバックアップしたい場合はvolumeの情報をバックアップする必要がる。

$ sudo docker container inspect test_postgres