Docker

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

More than 1 year has passed since last update.

使い捨ての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


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