Dockerのイメージを移動したい
作成してもサーバ他のサーバで使えないと意味がないはず…
なんかexportとかimportとかあるらしいので実験
vagrant
# -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # common settings box_name = "centos64_01" box_url = "https://dl.dropboxusercontent.com/u/36773763/vagrant/CentOS-6.4-x86_64-v20130427.box" # vm1 config.vm.define :vm1 do|vm1| # box vm1.vm.box = box_name vm1.vm.box_url = box_url # network vm1.vm.network "private_network", ip: "192.168.33.101" # share vm1.vm.synced_folder "./data1", "/vagrant", \ create: true, owner: 'vagrant', group: 'vagrant', \ mount_options: ['dmode=777,fmode=666'] # provision vm1.vm.provision :shell, :path => "./data1/script.sh" end # vm2 config.vm.define :vm2 do|vm2| # box vm2.vm.box = box_name vm2.vm.box_url = box_url # network vm2.vm.network "private_network", ip: "192.168.33.102" # share vm2.vm.synced_folder "./data2", "/vagrant", \ create: true, owner: 'vagrant', group: 'vagrant', \ mount_options: ['dmode=777,fmode=666'] # provision vm2.vm.provision :shell, :path => "./data2/script.sh" end end
初期設定
vm1の環境で初期設定でこれだけやる
# iptables off sudo chkconfig iptables off sudo service iptables stop # epel,remi sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm # developer sudo yum -y update sudo yum -y groupinstall "Development Tools"
vm2の環境でも初期設定でこれだけやる
# iptables off sudo chkconfig iptables off sudo service iptables stop # epel,remi sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm # developer sudo yum -y update sudo yum -y groupinstall "Development Tools"
vm1設定
docker-ioインストール
sudo yum install -y docker-io sudo service docker start sudo chkconfig docker on
centos6を入れて、httpdあたりを設定してコミットする
sudo docker pull centos:centos6 sudo docker run -i -p 8080:80 -t centos:centos6 /bin/bash ---- bash-4.1# yum install -y httpd bash-4.1# service httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2 for ServerName [ OK ] bash-4.1# chkconfig httpd on bash-4.1# echo "<html>docker vm1 test site</html>" > /var/www/html/index.html bash-4.1# ----
確認
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba80093c1a21 centos:centos6 /bin/bash 7 minutes ago Up 7 minutes 0.0.0.0:8080->80/tcp high_ptolemy $ $ sudo docker attach ba80093c1a21 bash-4.1# exit exit $
イメージを作成
$ sudo docker commit ba80093c1a21 sample1/centos65 c9d7b69aa18562fb05310134b481e94171818754449cb755ddf964fe8981a053 $
※イメージをコミットして
エクスポート
$ sudo docker export ba80093c1a21 > docker_image01.tar $ ls -la docker_image01.tar -rw-rw-r-- 1 vagrant vagrant 305840640 10月 27 13:00 2014 docker_image01.tar $
vm2へscpコピー
$ sudo scp docker_image01.tar vagrant@192.168.33.102:/home/vagrant/. vagrant@192.168.33.102's password: docker_image01.tar 100% 292MB 41.7MB/s 00:07 $
vm2設定
docker-ioインストール
sudo yum install -y docker-io sudo service docker start sudo chkconfig docker on
import
$ ls -la docker_image01.tar -rw-rw-r-- 1 vagrant vagrant 305840640 10月 27 13:03 2014 docker_image01.tar $ $ sudo cat docker_image01.tar | sudo docker import - sample2/centos65 112e757dcc07c07c9fb7f253a431c2578ff0ef8a92f0967ac8d317d7959e796c $
起動
$ sudo docker run -i -p 8080:80 -t sample2/centos65 /bin/bash bash-4.1# service httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2 for ServerName [ OK ] bash-4.1#
確認
所感
イメージをtarで固めて別のサーバに送ることは可能。そこから起動をどのようにするかは課題かもしれないけどそんなに難しくはないような気がする。
本番環境にソースをそれぞれおいて管理するのがめんどうな場合はこの方法がいいかも?
dockerのデータが肥大化した場合は大変かもしれない、リリース時の動作バージョンを保持できるのでログの切り分けなども有効かもしれないけど
あと、リリース作業などが無駄に細かい業務系では使えない感じ