目的
Mac上でDockerを扱う為のメモ(途中)
Bug
Packer 0.7.5
Docker 1.5.0
環境でこのISSUEのバグが発生していて、Packerのinlineでshellを実行するとDocker imageの作成時に失敗します。
修正はmergeされてるので次のバージョンで改善されそう
次のリリースまで利用したい場合は自己責任でISSUEに記載されてる修正版のバイナリを利用するか、自分でコンパイルしたら良さそう。
PackerとDockerの組み合わせはMac上では試行錯誤したが期待通りには動作してないです。
試行内容についてはまとめています。
参考資料
- DockerイメージのビルドにPackerを使うべき理由 | SOTA
- Packerを使ってChef/Puppet/AnsibleでDockerのイメージをつくる | SOTA
- Vagrant + CoreOS + Docker でコンテナ環境体験 - Qiita
- boot2dockerでのVolume問題が解決しそう | SOTA
- Packer by HashiCorp
準備
インストールするもの
CoreOS
CoreOSの取得
git clone https://github.com/coreos/coreos-vagrant.git
cd coreos-vagrant
設定
$ cp user-data.sample user-data
$ cp config.rb.sample config.rb
config.rbはvagrantの起動設定、user-dataはcoreos上で動作するdockerの設定
# Size of the CoreOS cluster created by Vagrant
$num_instances=1
localで動かすだけなのでインスタンスを1に限定、user-dataは特に変更なし
CoreOSの起動
vagrant up
CoreOSへのログイン
vagrant ssh
構成
ここまでの作業で以下のような構成になる
Mac-vagrant-CoreOS-Docker
dockerをMacのローカルからコマンドを実行できるように設定する
CoreOSのDockerとMacに入れるDockerのバージョンは揃える必要があるらしい。
brew install docker
macにて
$ docker info
FATA[0000] Get http:///var/run/docker.sock/v1.17/info: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
vagrantのCoreOSで動作しているdockerに接続する設定を追加する必要がある
$ export DOCKER_HOST=tcp://CORE_OS_HOST:port
ip_addressはVagrantfileを開くと以下の様な形で定義されている。
114 ip = "172.17.8.#{i+100}"
115 config.vm.network :private_network, ip: ip
起動しているインスタンスは1つだけだと思うので 172.17.8.101
IPアドレスはVagrantfileに以下の用に記載されており2375
96 if $expose_docker_tcp
97 config.vm.network "forwarded_port", guest: 2375, host: ($expose_docker_tcp + i - 1), auto_correct: true
98 end
改めてdocker infoを実行すると接続できていることが確認できる
$ export DOCKER_HOST=tcp://172.17.8.1:2375
$ docker info
Containers: 0
Images: 0
Storage Driver: overlay
Backing Filesystem: extfs
Execution Driver: native-0.2
Kernel Version: 3.18.6
Operating System: CoreOS 598.0.0
CPUs: 1
Total Memory: 998 MiB
Name: core-01
ID: RWOF:XYHF:XFI3:AW6F:RHLU:CV4F:SRXU:XDHR:MABW:P2PM:4B5D:QRY2
Packerを利用してDockerのコンテナイメージを作成する
Packerのインストール
$ brew tap homebrew/binary
$ brew install packer
設定ファイル
Docker Builder - Packer by HashiCorp
以下の内容でubuntu.jsonを作成
{
"builders": [
{
"type": "docker",
"image": "ubuntu:14.04",
"export_path": "ubuntu.tar"
}
]
}
docker imageの作成
$ packer build ubuntu.json
ubuntu.tar が作成される。
docker imageに登録したいので設定ファイルにpost-processorsを追加する
{
"builders": [
{
"type": "docker",
"image": "ubuntu:14.04",
"export_path": "ubuntu.tar"
}
],
"post-processors": [
[
{
"type": "docker-import",
"repository": "shiwork/ubuntu",
"tag": "0.1"
}
]
]
}
packer build ubuntu.json
実行後にdocker images
を実行すると作成したdocker imageが追加されていることが確認できる
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
shiwork/ubuntu 0.1 7acf3b11890e 11 seconds ago 188.1 MB
ubuntu latest 2d24f826cb16 5 days ago 188.3 MB
ubuntu trusty 2d24f826cb16 5 days ago 188.3 MB
ubuntu trusty-20150218.1 2d24f826cb16 5 days ago 188.3 MB
ubuntu 14.04 2d24f826cb16 5 days ago 188.3 MB
ubuntu 14.04.2 2d24f826cb16 5 days ago 188.3 MB
実行
$ docker run shiwork/ubuntu:0.1 echo "Hello"
Hello