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