rktでAlpine Linuxのイメージを作る
こんな感じのスクリプトを作ってみました。 build-alpine.sh
などとして保存しておきます。
#!/bin/bash set -e [ "x$ALPINE_VERSION" == "x" ] && ALPINE_VERSION="edge" if [ "$EUID" -ne 0 ]; then echo "This script uses functionality which requires root privileges" exit 1 fi acbuild --debug begin acbuildEnd() { export EXIT=$? acbuild --debug end && exit $EXIT } trap acbuildEnd EXIT acbuild --debug set-name alpine acbuild --debug set-tag "${ALPINE_VERSION}" acbuild --debug dep add quay.io/coreos/alpine-sh acbuild --debug run -- sed -i 's/v[[:digit:]]\.[[:digit:]]/'"${ALPINE_VERSION}"'/' /etc/apk/repositories acbuild --debug run apk update acbuild --debug run -- apk add --upgrade apk-tools acbuild --debug run -- apk upgrade --latest --available acbuild --debug run -- rm -rf /var/cache/apk/* acbuild --debug set-exec -- /bin/sh acbuild --debug write --overwrite "alpine-${ALPINE_VERSION}-amd64.aci"
やっていることは見たまんまで、サンプルをほぼそのままです。
アレンジしているのはAlpine Linuxのバージョンを指定できるようにしているところで、デフォルトで edge
を使います。
# edgeのイメージを作ります sudo ./build-alpine.sh
# v3.7でイメージを作ります sudo ALPINE_IMAGE=v3.7 ./build-alpine.sh
カレントディレクトリに alpine-v3.7-amd64.aci
とかできていると思うので走らせてみます。シェルが動けばOKです。
exit
でコンテナ(Pod) を抜けましょう。
sudo rkt run --insecure-options=image --interactive=true alpine-v3.7-amd64.aci
rktを操作してみる
Podの一覧を見るには rkt list
を使います。
$ sudo rkt list UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS 0cd9f129 alpine alpine:v3.7 exited 7 seconds ago 7 seconds ago
イメージの一覧を見てみます。 rkt image list
をつかいます。
$ sudo rkt image list ID NAME SIZE IMPORT TIME LAST USED sha512-2222d0a86708 quay.io/coreos/alpine-sh:latest 5.4MiB 42 minutes ago 4 minutes ago sha512-e50b77423452 coreos.com/rkt/stage1-coreos:1.29.0 211MiB 36 minutes ago 36 minutes ago sha512-7f3037d4a34c alpine:v3.7 6.6MiB 15 seconds ago 15 seconds ago
Podとイメージを削除してみます。
# Podを消すときはUUIDを指定します。前方一致で絞り込めればいいようです。 $ sudo rkt rm 0cd9 "0cd9f129-69d1-42be-9663-4668a4895cdc" $ sudo rkt list UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS # イメージを消すときは ID か NAME を指定します。 IDは前方一致で絞り込めればいいようです $ sudo rkt image rm sha512-7f successfully removed aci for image: "sha512-7f3037d4a34c66a0929595a8a46afa5b3364cf84e218aa0305bcfdfe8b95d863" rm: 1 image(s) successfully removed $ sudo rkt image list ID NAME SIZE IMPORT TIME LAST USED sha512-2222d0a86708 quay.io/coreos/alpine-sh:latest 5.4MiB 49 minutes ago 12 minutes ago sha512-e50b77423452 coreos.com/rkt/stage1-coreos:1.29.0 211MiB 43 minutes ago 43 minutes ago
さきほど作ったACIを、走らせずに取り込んでみます。
$ sudo rkt fetch --insecure-options=image alpine-v3.7-amd64.aci sha512-7f3037d4a34c66a0929595a8a46afa5b $ sudo rkt image list ID NAME SIZE IMPORT TIME LAST USED sha512-2222d0a86708 quay.io/coreos/alpine-sh:latest 5.4MiB 51 minutes ago 14 minutes ago sha512-e50b77423452 coreos.com/rkt/stage1-coreos:1.29.0 211MiB 45 minutes ago 45 minutes ago sha512-7f3037d4a34c alpine:v3.7 6.6MiB 5 seconds ago 5 seconds ago
取り込んだACI alpine:v3.7
をつかって色々やってみます。ちなみに、ctrl
+ ]
を 3回叩くとコンテナをKILLできます。
$ sudo rkt run --interactive=true alpine:v3.7 --name=alpine-sh / # Container rkt-108f0bef-5d73-4458-85ec-b2407ad8acd3 terminated by signal KILL. $ sudo rkt list UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS 108f0bef alpine-sh alpine:v3.7 exited 51 seconds ago 51 seconds ago $ # 実行するコマンドを変えてみます $ sudo rkt run --interactive=true alpine:v3.7 --name=alpine-ls --exec="ls" bin dev etc home lib linuxrc media mnt proc root run sbin srv sys tmp usr var $ sudo rkt list UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS 108f0bef alpine-sh alpine:v3.7 exited 1 minute ago 1 minute ago 9e3ed729 alpine-ls alpine:v3.7 exited 29 seconds ago 29 seconds ago $ # デフォルトのコマンド /bin/sh にオプションを渡すときは `--` を前置きしてあげます $ sudo rkt run --interactive=true alpine:v3.7 --name=alpine-ls2 -- -c 'ls' bin dev etc home lib linuxrc media mnt proc root run sbin srv sys tmp usr var $ sudo rkt list UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS 108f0bef alpine-sh alpine:v3.7 exited 2 minutes ago 2 minutes ago 9e3ed729 alpine-ls alpine:v3.7 exited 1 minute ago 1 minute ago efe730a1 alpine-ls2 alpine:v3.7 exited 5 seconds ago 5 seconds ago