m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

Dockerのインストール3(export、import)

Dockerのイメージを移動したい

作成してもサーバ他のサーバで使えないと意味がないはず…
なんかexportとかimportとかあるらしいので実験

環境

vagrantに2つのvmを作成して、1つ目で作成して、2つ目に移動して2つ目で見えることを確認する

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#
----
確認

f:id:m_shige1979:20141027215209p:plain

$ 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#
確認

f:id:m_shige1979:20141027221112p:plain

所感

イメージをtarで固めて別のサーバに送ることは可能。そこから起動をどのようにするかは課題かもしれないけどそんなに難しくはないような気がする。
本番環境にソースをそれぞれおいて管理するのがめんどうな場合はこの方法がいいかも?
dockerのデータが肥大化した場合は大変かもしれない、リリース時の動作バージョンを保持できるのでログの切り分けなども有効かもしれないけど

あと、リリース作業などが無駄に細かい業務系では使えない感じ