Raspberry Pi用docker-distributionの構築
1. ラズパイ用のdocker-distribution
Raspberry Pi3でもdockerを使用することができるのですが、docker-distributionはありません。同様にdocker-composeもないので、これについては別記事を書いています。
Rasuperry Pi用docker-composeの構築
docker-composeの場合は、公式リポジトリにあるDockerfile.armhfを利用したのですが、docker-distribution用のものが存在していないので自分で書いてみました。
2. Dockerfile.armhfの作成
Raspberry Pi3用のDockerfileをDockerfile.armhfとして書いたものが以下になります。
FROM armhf/debian:jessie
ENV GOROOT /usr/local/go
ENV GOPATH $GOROOT/bin
ENV DISTRIBUTION_DIR $GOROOT/src/github.com/docker/distribution
ENV DOCKER_BUILDTAGS include_oss include_gcs
RUN apt update && apt upgrade -y && \
apt install -y make git curl
RUN cd /var/tmp; \
curl -O https://storage.googleapis.com/golang/go1.8.1.linux-armv6l.tar.gz; \
tar -C /usr/local -xzf go1.8.1.linux-armv6l.tar.gz; \
rm go1.8.1.linux-armv6l.tar.gz
ENV PATH $PATH:$GOPATH
RUN mkdir -p $GOROOT/src/github.com/opencontainers; \
cd $GOROOT/src/github.com/opencontainers; \
git clone https://github.com/opencontainers/go-digest
WORKDIR $DISTRIBUTION_DIR
COPY . $DISTRIBUTION_DIR
COPY cmd/registry/config-dev.yml /etc/docker/registry/config.yml
RUN make PREFIX=$GOROOT clean binaries
VOLUME ["/var/lib/registry"]
EXPOSE 5000
ENTRYPOINT ["registry"]
CMD ["serve", "/etc/docker/registry/config.yml"]
このファイルは、公式リポジトリをフォークしてraspberrypi
ブランチとして置いてあります。一応、dockerにもプルリクエストあげてみたのですが、お作法が良くわかってないので、どうなりますことやら。
内容としては、公式リポジトリにあるDockerfile
をラズパイ用にしたものとなっています。ただし、alpine
ではなくdocker-compose
のDockerfile.armhf
にあわせてベースイメージをarmhf/debian:jessie
として、Go
も公式にあるLinux用のインストール手順で、現在の最新版であるgo1.8.1
をダウンロードしています。
3. rpi-docker-registryのビルド
以下のようにしてラズパイでビルドします。どこかにdocker-distributionをクローンして、上記のDockerfile.armhf
がある前提です。
docker built -t rpi-docker-registry -f Dockerfile.armhf .
やはり、ラズパイ用としてタグにはrpi-
をつけています。これでコンテナが作成されますが、ビルドの所要時間は約30分ほどでした。
4. rpi-docker-registryの起動
Dockerfile
にも書かれているように 5000/tcpを Exposeして、/var/lib/registry
をよしなにマウントして起動します。
docker run -d -p 5000:5000 --name docker-registry -v /var/lib/registry:/var/lib/registry rpi-docker-registry
あと、サーバ運用するためにdocker run
の--always
を使用するなり、systemd
対応するなどはよしなに。
公式でregistry
がdistribution
に変わってきたりしていることもあり、名前がちぐはぐですが...
それにしても、ラズパイでdocker-distributionを使用する需要はあるんだろうか(笑