ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

CoreOSのrktをUbuntuで触ってみる

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をインストールすることができます。 ちなみにVirtualBoxVMの中でも結構サクッと動きます。

% sudo apt install rkt

コンテナーの起動方法は次のドキュメントにまとまっています。

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ではないので、もう少し経ってからもう一度試してみたいと思います。

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。