1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows上のDockerでつくるLAMP+Memcached開発環境(Proxy設定あり)

Last updated at Posted at 2019-02-16

はじめに

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の設定

以下だけ設定してあとはデフォルトです。

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.ymlphp/
  └ contentsindex.php             // 中身は <?php phpinfo();
  └ Dockerfilephp.inimysql/
  └ Dockerfilemy.cnf
docker-compose.yml
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
php/Dockerfile
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

# その他プロファイラやテストなど入れる場合は追記
mysql/Dockerfile
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
1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?