LoginSignup
13
14

More than 5 years have passed since last update.

barge(on Vagrant)にDocker環境を構築する

Last updated at Posted at 2017-01-18

使い捨てのDocker環境を簡単に構築するために、Docker for macではなく、Vagrant上に軽量OSのbargeを稼動させた上でdockerを起動する。

なお個人的に、当該環境に、LAMP環境を構築することを考えている。
このためDocker上で動いているWebサーバやMySQLにもホスト側から接続できるようにする。

本記事にはDockerの設定までは載せていないが、下記のような感じでポートフォワードする予定。

ホスト barge Docker
Webサーバ 10080 80 80
MySQL 13306 3306 3306

ホスト

  • macOS Sierra

vagrantでbarge環境の準備

boxをインポート

vagrantで利用するboxはbarge公式のもの。

% vagrant box add ailispaw/barge
% vagrant init -m ailispaw/barge
% mkdir export

Vagrantfileの作成

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ailispaw/barge"

  config.vm.network "forwarded_port", guest: 80,   host: 10080
  config.vm.network "forwarded_port", guest: 3306, host: 13306

  # フォルダの同期:開発環境なのでパーミッションを777に設定してしまう。
  config.vm.synced_folder "./export", "/home/bargee/common", mount_options: ['dmode=777', 'fmode=777']
end

bargeの起動

% vagrant up
% vagrant ssh

barge環境のセットアップ

dockerのバージョンを最新版にすると共に、docker-composeをインストールする。

vagrant> docker version
vagrant> sudo /etc/init.d/docker restart v1.12.6

vagrant> wget -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m`
vagrant> chmod +x docker-compose-`uname -s`-`uname -m`
vagrant> sudo mv docker-compose-`uname -s`-`uname -m` /opt/bin/docker-compose
vagrant> sudo chown root:root /opt/bin/docker-compose

ssh経由でのコマンド実行時用に環境変数を設定

ssh経由でコマンドを実行したときにbashでssh先の環境変数設定が有効にならないので、環境変数を設定できるようにする。

vagrant> sudo vi /etc/ssh/sshd_config
差分は以下
- #PermitUserEnvironment no
+ PermitUserEnvironment yes

# ssh用の環境変数の設定で「/opt/bin」を追加($PATHで変数展開されないので全てベタ書きする)
vagrant> vi ~/.ssh/environment
PATH=/opt/bin:/bin:/sbin:/usr/bin:/usr/sbin

# sshdの再起動
vagrant> sudo /etc/init.d/S50sshd restart

ホスト側にssh設定を追加

~/.ssh/configに以下の出力を追加

% vagrant ssh-config --host dockerDev

ホスト側で、以下のようにdockerのコマンド実行もできる。

% ssh dockerDev 'docker run --name php-apache-tmp php:5.6-apache true'

bargeメモ

パッケージ

以下のコマンドでパッケージのインストールが可能

% pgk install [package name]

パッケージシステムは以下のものを利用している。

環境変数が展開されない?

※本項目は、コメントで指摘があったように、下記コマンドで問題なく起動できました。
A-Iさん、情報ありがとうございました。

% docker run -d --name laravel -e "PATH=${PATH}:/usr/local/bin" -p 80:80 php:5.6-apache

以下、指摘前の情報

以下のように環境変数を渡してもPATHが展開されず起動できなくなる。

% docker run -d --name laravel -e "PATH=${PATH}:/opt/bin" -p 80:80 php:5.6-apache

docker: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"exec: \\\"docker-php-entrypoint\\\": executable file not found in $PATH\"\n".

上記の場合、元々のPATHの末尾に/opt/binを追加しようとしているが、PATHが展開されずに記載した文字列がそのまま格納されている模様。
docker-php-entrypointというファイルは、/usr/local/bin/に入っているが、PATHが変な風に上書きされたので、パス知らないってことでエラーになっている。
Docker for macでは問題なかったのでbarge特有の問題なのか?(詳細不明。要調査)

ちなみに、以下のように手動でPATHを展開しておけば問題なく起動できた。

% docker run -d --name laravel -e "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.composer/vendor/bin" -p 80:80 php:5.6-apache

参考にさせて頂いたサイト

13
14
8

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
13
14