Linuxでコンテナーというと、まずDockerが連想されると思います。ついでLinux Container(LXC)かなと。 最近その他のコンテナー技術について調査していまして、今回取り上げるCoreOS社が開発しているrktやDocker社が提供するrunCなどを調べているところです。
Dockerとrktの違い、誕生の背景については次によくまとまっていました。
https://qiita.com/datake914/items/a61a1aead43ffa058da9qiita.com
簡単にまとめると次の通りです。
- Dockerはクライアント+サーバー型
- Dockerデーモンがroot権限で稼働し続ける必要があり、セキュアではない
- rktはクライアントから直接コンテナーを起動できる
というのが、CoreOS社の言い分だそうです。
どうやって使うのか
rktを最も簡単に使う方法は、CoreOSをインストールして使うという方法です。現在のCoreOSにはDockerとrktが含まれるので両方を使ってみて、比較をすると楽しいかもしれません。
2018年4月にリリースされたUbuntu 18.04 LTSでもrktをインストールすることができます。 ちなみにVirtualBoxのVMの中でも結構サクッと動きます。
% sudo apt install rkt
コンテナーの起動方法は次のドキュメントにまとまっています。
- https://coreos.com/rkt/docs/latest/trying-out-rkt.html
- https://coreos.com/rkt/docs/latest/subcommands/run.html
rktではさらに、コンテナーにインストールするイメージとしてDockerのイメージを利用することもできます。 Docker Hubで公開されているイメージの多くを利用できるようです。 デフォルトではhostモードで起動するようです。
% sudo rkt run --insecure-options=image docker://nginx % sudo rkt list UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS bc178c7e nginx registry-1.docker.io/library/nginx:latest running 5 minutes ago 5 minutes ago default:ip4=172.16.28.2
NGINXのデフォルトページをcurlで出力してみましょう。
% curl -I http://172.16.28.2 HTTP/1.1 200 OK Server: nginx/1.13.12 Date: Wed, 23 May 2018 02:37:20 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT Connection: keep-alive ETag: "5acb8e45-264" Accept-Ranges: bytes
手元のPCのブラウザーで閲覧したい場合は、Trying out rktに書かれているようにルーティングを設定します。
コンテナーにログインする場合、Dockerではdocker exec
コマンドを使いますが、rktではrkt enter
コマンドを使います。
% sudo rkt enter <コンテナーのUUID> enter: no command specified, assuming "/bin/bash" root@rkt-4f104344-f8a3-4319-b6eb-24bee362c0dd:/#
いらなくなったコンテナーはrkt rm
コマンドで削除できます。
rkt:~$ sudo rkt rm <コンテナーのUUID>
こんな感じで割と簡単に使うことができました。Dockerと比べるとクライアントだけでコンテナーを動かせるので、サーバーOSには無駄なパッケージをインストールすることなく、最低限のパッケージを入れておきたい私のようなタイプにはオススメのコンテナー技術かもしれません。
ちなみにDockerに慣れていれば難なく利用できると思います。
追記
CentOS 7でもrktが使えるようなのですが、以下のリポジトリーを追加して試してみたところ、systemdが標準パッケージよりも新しいものが入ってしまい、正常に起動しませんでした。現在はstableではないので、もう少し経ってからもう一度試してみたいと思います。