2014年12月21日日曜日

Oracle VM Server と Docker。


JPOUG Advent Calendar 2014 の16日目のエントリです。2回目でちゃいました。
前日は 佐々木潤 さんの 泥箱的なメモ - モデルをスケッチする でした。

今回は、Docker の話です。
最近流行の Docker ですが、当然ながら Oracle Linux でも使用できます。



そして、Oracle VM Server 上の Linux でも使用できます。
Oracle VM Server の Dom-0 でコンテナを起動したりするわけではなく、
Dom-U の Linux でコンテナを起動します。




結構前ですが、
Oracle Linux での Docker を紹介するブログポストがあったので
Oracle VM Server 上の Oracle Linux でためしてみました。

Wim Coekaerts Blog
Oracle Linux 6.5 and Docker
https://blogs.oracle.com/wim/entry/oracle_linux_6_5_and


今回の環境

Oracle Linux 6.5 64bit 版です。
※一応、Oracle VM Server 3.3.1 の Dom-U です。
[root@dksv01 ~]# cat /etc/oracle-release
Oracle Linux Server release 6.5

カーネルは UEK R3(Oracle Linux 6.5 のデフォルトのまま) です。
[root@dksv01 ~]# uname -r
3.8.13-16.2.1.el6uek.x86_64

Dockerの準備

まず、LXC をインストールしておきます。
※ちなみに、結構依存パッケージが多いです。
[root@dksv01 ~]# yum install lxc

cgroup ファイルシステムをマウントしておきます。
[root@dksv01 ~]# mkdir -p /cgroup
[root@dksv01 ~]# mount none -t cgroup /cgroup
[root@dksv01 ~]# mount | grep cgroup
none on /cgroup type cgroup (rw)

Dockerの最新バイナリを DL します。
最新の docker-1.4.1 だとエラーでコンテナ起動が出来なかったので、
今回は、ちょっと古めのバージョンを使用しています。
URL にある「docker-1.1.1」の数値を変更すると、そのバージョンの Docker が DL できます。
[root@dksv01 ~]# mkdir work
[root@dksv01 ~]# cd work/
[root@dksv01 work]# wget https://get.docker.com/builds/Linux/x86_64/docker-1.1.1 -O docker

ファイルに実行権限を付与。
[root@dksv01 work]# ls -lh docker
-rw-r--r-- 1 root root 17M  9月 11 05:20 2014 docker
[root@dksv01 work]# chmod 755 docker
[root@dksv01 work]# ls -lh docker
-rwxr-xr-x 1 root root 17M  9月 11 05:20 2014 docker

docker デーモンを起動します。
結構、標準出力はゴチャっとします。
[root@dksv01 work]# ./docker -d &
[1] 3076
[root@dksv01 work]# 2014/12/21 22:52:40 docker daemon: 1.1.1 bd609d2; execdriver: native; graphdriver:
[4de782dc] +job serveapi(unix:///var/run/docker.sock)
[4de782dc] +job initserver()
[4de782dc.initserver()] Creating server
2014/12/21 22:52:40 Listening for HTTP on unix (/var/run/docker.sock)
[4de782dc] +job init_networkdriver()
[4de782dc] -job init_networkdriver() = OK (0)
Loading containers: ........................: done.
[4de782dc.initserver()] Creating pidfile
[4de782dc.initserver()] Setting up signal traps
[4de782dc] -job initserver() = OK (0)
[4de782dc] +job acceptconnections()
[4de782dc] -job acceptconnections() = OK (0)

docker のバージョンです。
[root@dksv01 work]# ./docker version
Client version: 1.1.1
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): bd609d2
2014/12/21 22:53:22 GET /v1.13/version
[4de782dc] +job version()
[4de782dc] -job version() = OK (0)
Server version: 1.1.1
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): bd609d2

イメージ作成
ここだけ、最新版 docker を使用しているので、ちょっと実行結果が他と違うかもしれません。

イメージ作成のために、febootstrap をインストールします。
※これも、そこそこ依存 RPM があります。
[root@dksv01 work]# yum install febootstrap

イメージを /root/work/ol65_1 に作成します。
「-i」でいくつも指定しているのは、導入する RPM パッケージです。
SSH などを使用したいので、参考にしたブログよりいくつか RPM を増やしています。
ちなみに、末尾に指定しているのは YUM リポジトリですが、
ORACLE の パブリック YUM リポジトリから DL すると時間がかかるので
自宅内の YUM リポジトリを指定しています。
[root@dksv01 work]# febootstrap -i bash -i coreutils -i tar -i bzip2 -i gzip -i vim-minimal -i wget -i patch -i diffutils -i iproute -i yum -i passwd -i openssh-clients -i openssh-server ol65_1 /root/work/ol65_1 http://webfs1.gowatana.lab/os/ol605/

イメージはこのような感じになります。
[root@dksv01 work]# ls -l
合計 14276
-rwxr-xr-x  1 root root 14614452 12月 17 05:20 2014 docker
dr-xr-xr-x 21 root root     4096 12月 21 22:00 2014 ol65_1
[root@dksv01 work]# du -sh *
14M     docker
345M    ol65_1
[root@dksv01 work]# ls ./ol65_1
bin   dev  home  lib64  mnt  proc  sbin     srv  tmp  var
boot  etc  lib   media  opt  root  selinux  sys  usr

/etc/resolv.conf と /sbin/init を作成しておきます。
[root@dksv01 work]# touch ./ol65_1/etc/resolv.conf
[root@dksv01 work]# touch ./ol65_1/sbin/init

イメージを tar でまとめてから・・・
[root@dksv01 work]# tar --numeric-owner -jcpf ol65_1.tar.bz2 -C ./ol65_1 .
[root@dksv01 work]# ls -lh
合計 114M
-rwxr-xr-x  1 root root  14M 12月 17 05:20 2014 docker
dr-xr-xr-x 21 root root 4.0K 12月 21 22:00 2014 ol65_1
-rw-r--r--  1 root root 100M 12月 21 22:09 2014 ol65_1.tar.bz2

インポートします。
[root@dksv01 work]# cat ol65_1.tar.bz2 | ./docker import - ol65_1
INFO[1215] POST /v1.16/images/create?fromSrc=-&repo=ol65_1
INFO[1215] +job import(-, ol65_1, )
INFO[1274] +job log(import, 25ab466e3b5bd650af2e214ba76eae956fd2eba2bb8aee75fceb168f011816b8, )
INFO[1274] -job log(import, 25ab466e3b5bd650af2e214ba76eae956fd2eba2bb8aee75fceb168f011816b8, ) = OK (0)
INFO[1274] -job import(-, ol65_1, ) = OK (0)
25ab466e3b5bd650af2e214ba76eae956fd2eba2bb8aee75fceb168f011816b8

インポートされました。
[root@dksv01 work]# ./docker images
INFO[1372] GET /v1.16/images/json
INFO[1372] +job images()
INFO[1372] -job images() = OK (0)
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ol65_1              latest              25ab466e3b5b        2 minutes ago       329.8 MB

コンテナの起動~停止

Docker のコンテナを起動してみます。
Docker 的には微妙かもしれませんが、bash を・・・
[root@dksv01 work]# ./docker run -i -t ol65_1 /bin/bash
2014/12/21 22:54:14 POST /v1.13/containers/create
[4de782dc] +job create()
[4de782dc] -job create() = OK (0)
2014/12/21 22:54:14 POST /v1.13/containers/5f8a024bb34fcab6811750ef3ba6bcb45c0dec22ff5b942b6270a7c24e395824/attach?stderr=1&stdin=1&stdout=1&stream=1
(中略)
bash-4.1# ★ここからコンテナの中。
bash-4.1# cat /etc/oracle-release
Oracle Linux Server release 6.5
bash-4.1# uname -n
5f8a024bb34f
bash-4.1# uname -r
3.8.13-16.2.1.el6uek.x86_64

コンテナから抜けてみます。
「Ctrl + p + q」キーで、下記のような感じで、親の OS に戻れます。
キーを押した瞬間、こんな感じに・・・
bash-4.1# [4de782dc] -job attach(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e) = OK (0)
                                                                                                           2014/12/21 22:56:18 GET /v1.13/containers/7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e/json
[4de782dc] +job container_inspect(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e)
[4de782dc] -job container_inspect(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e) = OK (0)
[root@dksv01 work]# ★抜けた。

そして起動しているコンテナを確認することもできます。
[root@dksv01 work]# ./docker ps
2014/12/21 22:57:28 GET /v1.13/containers/json
[4de782dc] +job containers()
[4de782dc] -job containers() = OK (0)
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
7a8693246bd7        ol65_1:latest       /bin/bash           About a minute ago   Up About a minute                       sharp_curie 
[root@dksv01 work]#

コンテナに再アタッチしてみます。

[root@dksv01 work]# ./docker attach 7a8693246bd7
2014/12/21 22:58:11 GET /v1.13/containers/7a8693246bd7/json
[4de782dc] +job container_inspect(7a8693246bd7)
[4de782dc] -job container_inspect(7a8693246bd7) = OK (0)
2014/12/21 22:58:11 POST /v1.13/containers/7a8693246bd7/resize?h=24&w=133
[4de782dc] +job resize(7a8693246bd7, 24, 133)
[4de782dc] -job resize(7a8693246bd7, 24, 133) = OK (0)
2014/12/21 22:58:11 POST /v1.13/containers/7a8693246bd7/attach?stderr=1&stdin=1&stdout=1&stream=1
[4de782dc] +job container_inspect(7a8693246bd7)
[4de782dc] -job container_inspect(7a8693246bd7) = OK (0)
[4de782dc] +job attach(7a8693246bd7)
bash-4.1# ★コンテナの中。

コンテナにアタッチした状態で、
「exit」もしくは「Ctrl + d」キーでコンテナ自体が停止します。
bash-4.1#
bash-4.1# exit[4de782dc] +job release_interface(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e)
                                                                                                   [4de782dc] -job release_interface(7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e) = OK (0)
                                                                          [error] container.go:513 7a8693246bd7ce54605ec6fb9a8cbf0762eb3de7d4937e9a1690592d8c29ec5e: Error closing terminal: invalid argument
                                                                        [4de782dc] -job attach(7a8693246bd7) = OK (0)
                                                                                                                     2014/12/21 22:58:31 GET /v1.13/containers/7a8693246bd7/json
[4de782dc] +job container_inspect(7a8693246bd7)
[4de782dc] -job container_inspect(7a8693246bd7) = OK (0)
[root@dksv01 work]# ★終了した。
[root@dksv01 work]# ./docker ps
2014/12/21 23:00:41 GET /v1.13/containers/json
[4de782dc] +job containers()
[4de782dc] -job containers() = OK (0)
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@dksv01 work]# ★↑起動しているイメージなし。

・・・という感じです。
bash でコンテナを起動すると Solaris Zone っぽい感じですが、
コマンドや httpd みたいなもので起動すると、ちょっと違う印象を受けるかもしれません。

ちなみに、ORACLE の提供している Docker イメージもあったりします。
http://public-yum.oracle.com/docker-images/OracleLinux/

以上、Oracle VM Server と Oracle Linux と Docker についてでした。

17日目は、discus_hamburg さんの
Mac De Oracle: 机上SQLチューニング、クイズ! 駆動表(外部表)はどれだ!!!!
です。

0 件のコメント:

コメントを投稿