ついでにCoreOSでもDockerを試してみよう

前回と前々回で、@ITのいまさら聞けないDocker入門1~2を参考にしつつ、CentOS7+Docker を触ってみました。ついでにCoreOSも触ってみて、入門3の内容はCoreOSで試してみようと思います。

CoreOSって?

CoreOSはKernelイメージとSystemdだけで、Docker用に作成されたものらしい。

OSに不要な機能があるよりも、ボクサーみたいな必要なものだけ積んでた方がいいかなってイメージかしら??

CoreOSを用意する

まずはISOイメージを持ってきて、いつも通りVMwareで立ち上げよう。
CDブートのようにLinuxが立ち上がり、AutoLoginされます。
ユーザ名Coreのパスワードを設定するだけでSSH接続できるので、設定しちゃいましょう

$ sudo passwd core

これさえやればSSHで繋ぐ。

login as: core
core@192.168.24.72's password:
Last login: Sat Jul 12 16:56:27 2014
CoreOS (beta)
Update Strategy: No Reboots
core@localhost ~ $

今の状態はUbuntuやPuppyLinuxのように、まだOSがインストールされていないので、手動でインストールが必要な訳だが、VMwareにインストールするなら以下の手順になるようだ。

・イメージ起動
・AutoLogin
・Coreにパスワードを付ける
・SSHログイン
・cloud-config作成
・インストール
・リブート
・完

だいたいの参考サイトが鍵認証にしているんだけど、ローカルで試すだけだし、公式サイトにパスワード認証でのやり方が載ってたので、パスワード認証で作ります。

まずはハッシュ化されたパスワードを作成。

[root@dockerkencho ~]# openssl passwd -1
Password:
Verifying - Password:
$1$CoSFIqnH$z.s5CC2BqUhnKuJl6dNC8/

cloudconfigを作りましょう。

bash-4.2# cat config
#cloud-config

users:
 -  name: core
    passwd: $1$CoSFIqnH$z.s5CC2BqUhnKuJl6dNC8/

ではインストールします。

bash-4.2# coreos-install -d /dev/sda -C alpha -c config
Downloading and verifying coreos_production_image.bin.bz2...
--2014-07-12 08:52:44--  http://alpha.release.core-os.net/amd64-usr/353.0.0/coreos_production_image.bin.bz2
Resolving alpha.release.core-os.net... 173.194.72.128
Connecting to alpha.release.core-os.net|173.194.72.128|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 175405804 (167M) [application/octet-stream]
Saving to: `/tmp/coreos-install.tZNZ3WWm8i/coreos_production_image.bin.bz2'

100%[==========================================================>] 175,405,804 9.87M/s   in 23s

2014-07-12 08:53:08 (7.18 MB/s) - `/tmp/coreos-install.tZNZ3WWm8i/coreos_production_image.bin.bz2' saved [175405804/175405804]

2014-07-12 08:53:08 URL:http://alpha.release.core-os.net/amd64-usr/353.0.0/coreos_production_image.bin.bz2.sig [543/543] -> "/tmp/coreos-install.tZNZ3WWm8i/coreos_production_image.bin.bz2.sig" [1]
gpg: Signature made Thu Jun 19 02:23:58 2014 UTC using RSA key ID 74E7E361
gpg: key 93D2DCB4 marked as ultimately trusted
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Good signature from "CoreOS Buildbot (Offical Builds) <buildbot@coreos.com>"
Writing coreos_production_image.bin.bz2 to /dev/sda...
  /tmp/coreos-install.tZNZ3WWm8i/coreos_production_image.bin.bz2: done
Installing cloud-config...
Success! CoreOS alpha 353.0.0 is installed on /dev/sda

とくに選択項目もなく、自動でインストールが出来上がります。
リブートしてログインしてみよう。

login as: core
core@192.168.24.72's password:
Last login: Sat Jul 12 08:54:42 2014
CoreOS (alpha)
core@localhost ~ $

パスワード認証でログインできました。

Dockerはインストール済み、流石Docker専用OSだ。

core@localhost ~ $ docker info
Containers: 0
Images: 0
Storage Driver: btrfs
Execution Driver: native-0.2
Kernel Version: 3.15.2+
core@localhost ~ $ docker version
Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2
Git commit (client): 990021a
Server version: 1.0.1
Server API version: 1.12
Go version (server): go1.2
Git commit (server): 990021a

とりあえず、CentOS+Dockerで試したことと同じくUbuntuのコンテナーを作ってみる

core@localhost ~ $ docker pull ubuntu:latest
Pulling repository ubuntu
e54ca5efa2e9: Download complete
511136ea3c5a: Download complete
d7ac5e4f1812: Download complete
2f4b4d6a4a06: Download complete
83ff768040a0: Download complete
6c37f792ddac: Download complete

core@localhost ~ $ docker run -it --name ubuntu1 ubuntu /bin/bash
root@07e3530ee6b9:/#

数分でできたでござる。

いまさら聞けないDocker入門3をやってみゆ

core@localhost ~ $ sudo -s
localhost core # docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              5e30ae3b2a65        15 hours ago        178.5 MB
takeken/apache2     latest              58262379233f        15 hours ago        294.8 MB
ubuntu              12.04               ea7d6801c538        2 weeks ago         127.4 MB
ubuntu              latest              e54ca5efa2e9        3 weeks ago         276.1 MB
localhost core #

ちょっといじってたのでimagesが何個かあるけど。

core@localhost ~/nginx1 $ cat Dockerfile
FROM ubuntu
MAINTAINER takeken
RUN apt-get install -y nginx
ADD index.html /usr/share/nginx/html/

core@localhost ~/nginx1 $ ls
Dockerfile  index.html

実行すると。

core@localhost ~/nginx1 $ docker build -t takeken/nginx:1.0 .
Sending build context to Docker daemon 3.584 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu
 ---> e54ca5efa2e9
Step 1 : MAINTAINER takeken
 ---> Running in 3da670898543

Dockerfileの記述の通りに進んで行って、イメージが出来上がるようです。

Successfully built 5a8c1ae47320
core@localhost ~/nginx1 $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
takeken/nginx       1.0                 5a8c1ae47320        13 seconds ago      294.2 MB
<none>              <none>              5e30ae3b2a65        15 hours ago        178.5 MB
takeken/apache2     latest              58262379233f        15 hours ago        294.8 MB
ubuntu              12.04               ea7d6801c538        2 weeks ago         127.4 MB
ubuntu              latest              e54ca5efa2e9        3 weeks ago         276.1 MB

できました。すごいね。

core@localhost ~/nginx1 $ docker run -d -p 80:80 --name nginx1 takeken/nginx:1.0 /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
f92bf4a0b80638be329bbbf2ff799ae0bd423c7a6e4e440ebb22a1d1b194e354

core@localhost ~/nginx1 $ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                NAMES
f92bf4a0b806        takeken/nginx:1.0   /usr/sbin/nginx -g '   7 seconds ago       Up 6 seconds        0.0.0.0:80->80/tcp   nginx1

core@localhost ~/nginx1 $ curl localhost
Hello!

ここまでは無事に難なく(でもないのだが)いけました。

前回Docker runでやっていた事は、DockerfileにENTRYPOINTとCMDの記述をすることで可能なようです。

Dockerfileに

ENTRYPOINT /usr/sbin/nginx -g 'daemon off;'-c /etc/nginx/nginx.conf

を追記して、またイメージの作成とコンテナーの作成をしてみます。

core@localhost ~/nginx1 $ docker build -t takeken/nginx:1.1 .
Sending build context to Docker daemon 3.584 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu
 ---> e54ca5efa2e9
Step 1 : MAINTAINER takeken
 ---> Using cache
 ---> 72e91ff73e1e
Step 2 : RUN apt-get install -y nginx
 ---> Using cache
 ---> b7c32dc9edfe
Step 3 : ADD index.html /usr/share/nginx/html/
 ---> Using cache
 ---> 5a8c1ae47320
Step 4 : ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
 ---> Running in 3d6a591e478d
 ---> 611f8ec358ac
Removing intermediate container 3d6a591e478d
Successfully built 611f8ec358ac
core@localhost ~/nginx1 $ docker run -d --name nginx2 -p 80:80 takeken/nginx:1.1
3e121d5ddb0780133f0cc882646480534abaa2706a35f1fdf734754e796c39cc
core@localhost ~/nginx1 $ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                NAMES
3e121d5ddb07        takeken/nginx:1.1   /bin/sh -c '/usr/sbi   10 seconds ago      Up 9 seconds        0.0.0.0:80->80/tcp   nginx2
core@localhost ~/nginx1 $ curl localhost
Hello!

ブラウザでも確認できました。

Dockerがあれば、何でもできる!とでもいうのでしょうか。
そんな時代なのか。次回はDocker Hubを取り扱うようですが楽しみですね。

 

せっかくだし何かDockerfileを探してみてbuildしてみますか

基本はLampかなぁとDocker lampでググったら

参考サイト

さくらのナレッジ
これから始める「DockerでかんたんLAMP環境 for CentOS」

トップに出たので、参照しつつ進めたいと思います。

最初にgitを使ってたので、gitあるのかなぁ・・・と思ったらあった。
CoreOS やりますなぁ。
必要なものはあるのね。

しかし、Dockerfileを眺めてみると、これってOSインストールしたらこれぐらいはやっとけスクリプトに似てるんだな。

 

じゃあドッカーンといくかーと思ったら、どうも今だとCentOSが7となり、Systemdになっているせいか上手くいかない。
シェルで確認してみるとやっぱりそうだ。
あと、CentOS7からMysqlがMariaDBになってた。

bash-4.2# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
bash-4.2#

つうことで、そのままだと色々とエラーがでるので、いろいろ修正しながら進めていくと、イメージの作成はうまくいった。

core@localhost ~/Lamp/docker-centos-lamp $ sudo docker build -t centos:lamp .
Successfully built 961cccdd0be4
core@localhost ~/Lamp/docker-centos-lamp $
core@localhost ~/Lamp/docker-centos-lamp $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              lamp                a83358680a75        About an hour ago   719.1 MB

動かしてみると

core@localhost ~/Lamp/docker-centos-lamp $ sudo docker run -d -t -p 12812:2812 -p 10080:80 -p 10022:22 centos:lamp /usr/bin/monit -I
3bf01baecee1982c87b9f4444e8ebb6877b1f5535bb879f5570b74956c030d13

こんな風にちゃんと動いてる風なんだが、接続が上手くいかない。
というか、サービスが動いてないっぽい。

ログを見てみると、たぶんこのサイトと同じ原因じゃないかなと。
td-agent のインストールも失敗してるし。

ログ
core@localhost ~/Lamp/docker-centos-lamp $ docker logs hopeful_hypatia
/etc/monit.d/td-agent:2: Warning: Program does not exist: '/etc/init.d/td-agent'
/etc/monit.d/td-agent:3: Warning: Program does not exist: '/etc/init.d/td-agent'
/etc/monit.d/sshd:2: Warning: Program does not exist: 'systemctl'
/etc/monit.d/sshd:3: Warning: Program does not exist: 'systemctl'
/etc/monit.d/mysqld:2: Warning: Program does not exist: 'systemctl'
/etc/monit.d/mysqld:3: Warning: Program does not exist: 'systemctl'
/etc/monit.d/httpd:2: Warning: Program does not exist: 'systemctl'
/etc/monit.d/httpd:3: Warning: Program does not exist: 'systemctl'

参考サイト

助けて】 docker上のCentOS7でsystemctlが使えずmariadbが起動できない

bash-4.2# systemctl
Failed to get D-Bus connection: No connection to service manager.
bash-4.2# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

いろいろ調べたけど、今のスキルでは無理ぽい。
ならばDocker上のOSをCentOS6にしちゃおう。

core@localhost ~/Lamp/docker-centos-lamp $ docker search  centos6 | grep base
flores314/centos65                  Docker image base. Built from a CentOS 6.5...   1
xdrum/centos64-base                 CentOS 6.4 x86_64 base/minimal image (crea...   1
fatherlinux/centos6-base            Centos6, same method as RHEL6 image             0
y4m4/centos6                        GlusterFS 3.5 base image for CentOS 6.5  [...   0
bjowi/centos6                       Minimal CentOS 6 base image.                    0
yamamon/base-centos65               CentOS6.5 Base Imange                           0
centminmod/centos65base             CentOS 6.5 base image for CentminMod projects   0
wjd300/centos6.2-base                                                               0
mswinson/centos65-base                                                              0
jpaas/centos6.3-base                                                                0
jpaas/centos6.3-dev-base                                                            0
monofraps/centos65-base                                                             0
nuxro/centos65-x86_64-base          Centos 64bit with @Base package group           0

この中から選んでみるか。てーか自分で作っても良かったね。
@ITでDocker hubの特集をしたらそっちをやってみよう。

そうこうしている間にイメージが出来上がった。

Successfully built 65716fcb31d7

それではCentOS6で作成したイメージで実行してみるぞ!

[root@dockerkencho docker-centos-lamp]# sudo docker run -d -t -p 12812:2812 -p 10080:80 -p 10022:22 centos:lamp /usr/bin/monit -I
585e3b39edf8cbeaaccfd33deafa54a13551c04b9983e7c9d280f150f5f0ffe4

[root@dockerkencho docker-centos-lamp]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                                   NAMES
585e3b39edf8        centos:lamp         /usr/bin/monit -I   5 seconds ago       Up 4 seconds        0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp, 0.0.0.0:12812->2812/tcp   happy_goodall

doc_02

doc_03

doc_04

よっしゃよっしゃ。これでSystemdが原因で動かなかったのは鉄板だな。

CentoS7になってたアクシデントによって、だいぶ時間をかけてしまったけど、その分Dockerのコマンドをいろいろ使う事ができたしヨシとしませう。

あと全てが終わってから知ったのだけど、CentOS6は

FROM centos:centos6

で良かったようだ・・・orz

 

 

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *