はじめに
Windows上でDockerを用いたLAMP開発環境を構築手順をまとめました。
社内Proxyがある環境で構築したためそのへんの手順も記載しています。
(ProxyサーバーのURLは仮に http://proxy.example.com:8080/ とします。)
主なバージョン
- docker 18.09.0
- docker-compose 1.23.1
- Host:Centos7.3
- Container:
- PHP 7.3.3
- MySQQL 5.7
- Memcached 1.4
ツールのインストール
すべてデフォルトインストールでよかったと思います。
Vagrant Pluginの設定
管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行します。
> set http_proxy=proxy.example.com:8080
> set https_proxy=proxy.example.com:8080
> vagrant plugin install vagrant-vbguest
> vagrant plugin install vagrant-proxyconf
※ vagrant-proxyconfのVer.2.0.0でエラーとなる場合があるようなのでその場合1系を指定してインストールしてみてください。
VagrantFileの設定
以下だけ設定してあとはデフォルトです。
# OSの指定
config.vm.box = "bento/centos-7.3"
# ポートフォワーディング
config.vm.network "forwarded_port", guest: 80, host: 80
config.vm.network "forwarded_port", guest : 22, host: 2222
# マウントするディレクトリーの設定
config.vm.synced_folder "./", "/vagrant", owner: "vagrant", group: "vagrant"
# タイムアウト設定
config.vm.boot_timeout = 120
# シンボリックリンクの作成を許可
config.vm.provider :virtualbox do |vb|
vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
end
# proxy設定
if Vagrant.has_plubin?("vagrant-proxyconf")
config.proy.http = "http://proxy.example.com:8080/"
config.proy.https = "http://proxy.example.com:8080/"
config.proxy.no_proxy = "localhost, 127.0.0.1"
end
Vagrantのセットアップ
管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行します。
> mkdir workspace
> cd workspace
> vagrant box add bento/centos-7.3 https://app.vagrantup.com/bento/boxes/centos-7.3
> vagrant up
Error getting repository data for C7.6.1810-base, repository not found
vagrant up時に上ようにマウントができないとエラーが出る場合は yum update を実行すれば解決します。
localhost:2222にログインし、yumをアップデートする。
# yum update
その後、再度コマンドプロンプトにて起動。
> vagrant up
docker, docker-compose のインストール
無事Vagrantが起動したらDockerのインストールを実行します。
必要なパッケージをもろもろインストールします。
# yum install -y yum-utils device-mapper-persistent-data lvm2
yumのパッケージインデックスを更新。(DockerのINSTALLやUPGRADEの前にやっておくことを推奨されているらしい。)
# yum makecache fast
レポジトリを追加します。
# yum-config-manager -add-repo https://download.docker.com/Linux/centos/docker-ce
Dockerのインストール·起動。
# yum install -y docker-ce
# systemctl start docker
起動確認。
# docker --version
Docker version 18.09.0, build 4d60db4
続いてdocker-composeを入れます。
# curl "https://github.com/docker/compose/releases/download/1.28.1/docker-compose-$(uname -s)-$(uname-m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
起動確認。
# docker-compose --version
docker-compose version 1.23.1, build b02f1306
DockerのProxy設定
dockerサービス用ディレクトリ下に、http-proxy.conf ファイルを作成します。
# mkdir /etc/systemd/system/docker.service.d
http-proxy-confファイルに下記の内容を入力し、保存します。
# vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Dockerサービスの再起動。
sudo systemctl daemon-reload
sudo systemctl restart docker
設定ファイルの作成
各コンテナの設定ファイルをVagrant上に作成します。
(名前やパスワード類は適当なので適宜変更してください。)
下記ファイルををまとめて GitHub に上げました。
https://github.com/higuching/dev-lamp
docker-compose.yml
└ php/
└ contents
└ index.php // 中身は <?php phpinfo();
└ Dockerfile
└ php.ini
└ mysql/
└ Dockerfile
└ my.cnf
version: '2'
services:
mysql:
build: ./mysql
hostname: 'localhost_mysql'
environment:
MYSQL_ROOT_PASSWORD: hogehoge
volumes:
- ./mysql/db:/var/lib/mysql
container_name: dev_mysql
php:
build: ./php
hostname: 'localhost'
environment:
HTTP_PROXY: http://proxy.example.com:8080
HTTPS_PROXY: http://proxy.example.com:8080
ports:
- '80:80'
volumes:
- /vagrant/hoge:/httpd/hoge # コンテンツソースファイルなど
links:
- mysql
- memcached
container_name: dev_php
memcached:
image: memcached:1.4
ports:
- '1121:1121'
container_name: dev_memcached
FROM php:7.3.3-apache
ENV http_proxy http://proxy.example.com:8080
ENV https_proxy http://proxy.example.com:8080
ENV PHP_MEMCACHED_VERSION 3.1.3
COPY php.ini /usr/local/etc/php/
RUN apt-get update
RUN apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev ¥
&& docker-php-ext-install pdo_mysql mysqli mbstring gd iconv
RUN docker-php-ext-install opcache
RUN apt-get install -y apache2
ADD hoge.conf /etc/apache2/sites-available/hoge.conf
RUN cd /etc/apache2/sites-available/ && a2ensite hoge.conf && a2dissite 000-default.conf
RUN apt-get install -y libmemcached-dev zlib1g-dev
RUN curl -L -o /tmp/memcached.tar.gz https://github.com/php-memcached-dev/php-memcached/archive/v$PHP_MEMCACHED_VERSION.tar.gz ¥
&& tar xfz /tmp/memcached.tar.gz ¥
&& rm -r /tmp/memcached.tar.gz ¥
&& mkdir -p /usr/src/php/ext ¥
&& mv php-memcached-$PHP_MEMCACHED_VERSION /usr/src/php/ext/memcached ¥
&& echo memcached >> /usr/src/php-available-exts ¥
&& docker-php-ext-install memcached
RUN { ¥
echo 'session.save_handler = memcached'; ¥
echo 'session.save_path = memacched:1121'; ¥
} >> /usr/local/etc/php/conf.d/docker-php-ext-memcached.ini
# その他プロファイラやテストなど入れる場合は追記
FROM mysql:5.7
ENV http_proxy http://proxy.example.com:8080
ENV hppts_proxy http://proxy.example.com:8080
COPY ./my.cnf /etc/mysql/conf.d/
RUN /etc/init.d/mysql start
コンテナのビルド·起動
コンテナをビルドします。
# cd /path/to/dir/
# docker-compose build //--no-cacheオプションをつけるとフルビルドになります。
続いてコンテナを起動します。
# docker-compose up -d
ブラウザで確認
以下のURLにアクセスして php_info が表示されれば完了です。
Tips
- ホストからDBへのログイン方法
# mysql -u root -p -h 127.0.0.1 --port 3306
- 各コンテナへのログイン方法
# docker exec -it dev_php /bin/bash