MacでPackerを用いいてDocker imageの作成を試みたが期待通り動かなかったのでUbuntu上で作業を行う
この資料はMac環境でPackerを用いでdocker imageを問題なく作成できるようになるまでのメモです
準備
vagrantをmacにインストールしておく
Ubuntuの用意
vagrant init
Vagrantfileに含まれるboxにてubuntu/trusty64
を指定する
vagrant up
vagrant ssh
github/bitbucketなどで利用してるssh鍵を利用する
packerなんかの構成情報をgitで管理してる場合はrepositoryにアクセスするための鍵を利用できるようにする必要があるので。
特に試すだけなら不要
ssh-agent
ssh-add ~/.ssh/id_rsa (deploy keyなどを指定)
Vagrantfileにてconfig.ssh.forward_agent = true
を追加
vagrantで起動済みの場合vagrant reload
を実行しVagrantfileの設定を読み込む
Packerのインストール
How To Install and Get Started with Packer on an Ubuntu 12.04 VPS | DigitalOcean
sudo apt-get install unzip
mkdir packer
cd packer/
wget https://dl.bintray.com/mitchellh/packer/packer_0.7.5_linux_amd64.zip
sudo unzip packer_0.7.5_linux_amd64.zip
.bashrcに以下を追加
export PATH=$PATH:~/packer/
読み込む
source ~/.bashrc
Dockerのインストール
sudo apt-get update
sudo apt-get install docker.io
source /etc/bash_completion.d/docker.io
動作確認
vagrant@vagrant-ubuntu-trusty-64:~/packer$ sudo docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
Pool Name: docker-8:1-262387-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 291.5 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 0.7 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.13.0-46-generic
WARNING: No swap limit support
dockerをsudo無しで利用できるようにする
packerで利用するだけという前提で以下を参考にsudo無しで利用できるようにする
$ sudo groupadd docker
groupadd: group 'docker' already exists #登録済みだった
$ sudo gpasswd -a ${USER} docker
Adding user vagrant to group docker
$ sudo service docker restart
docker: unrecognized service # (´Д`)ハァ…
$ sudo service docker.io restart # ubuntu14.04 はpackage名がdocker.io
docker.io stop/waiting
docker.io start/running, process 1739
docker groupへの追加を有効にするためnewgrp docker
を実行するかvmを再起動する
packerでDocker imageを構築する
packer build config.json
{
"builders": [
{
"type": "docker",
"image": "ubuntu:14.04",
"export_path": "ubuntu.tar"
}
],
"provisioners": [
{
"type": "shell",
"inline": ["echo test"]
}
],
"post-processors": [
[
{
"type": "docker-import",
"repository": "shiwork/ubuntu",
"tag": "0.1"
}
]
]
}
$ packer build config.json
docker output will be in this color.
==> docker: Creating a temporary directory for sharing data...
==> docker: Pulling Docker image: ubuntu:14.04
docker: Pulling repository ubuntu
==> docker: Starting docker container...
docker: Run command: docker run -v /tmp/packer-docker756254750:/packer-files -d -i -t ubuntu:14.04 /bin/bash
docker: Container ID: 408f626466bd8090f06b1f948930b0da99a786145a176423a05af902ef96322b
==> docker: Provisioning with shell script: /tmp/packer-shell638185518
docker: test
==> docker: Exporting the container
==> docker: Killing the container: 408f626466bd8090f06b1f948930b0da99a786145a176423a05af902ef96322b
==> docker: Running post-processor: docker-import
docker (docker-import): Importing image: Container
docker (docker-import): Repository: shiwork/ubuntu:0.1
docker (docker-import): Imported ID: 0b2141004ce9f60f6786adfc0dfb1cc6245dea3805630d7d8c6b64abce850f3d
Build 'docker' finished.
==> Builds finished. The artifacts of successful builds are:
--> docker: Imported Docker image: shiwork/ubuntu:0.1
まとめ
あっさり動いたなー。Mac上のPackerでやった時はあれこれ試して無理だったのに。Packer, Docker周り弄るときは当分Linux上でやったほうが良いかもしれないですねー。
追記
VagrantとAnsibleのPlaybookを作成しました。
packer-vagrant