LoginSignup
7
7

More than 5 years have passed since last update.

dockerでセキュアなUbuntuイメージを作成する

Last updated at Posted at 2016-10-24

はじめに

これはおそらくDockerの思想からはかなり外れた運用です。また、間違ってるところやバッドノウハウもあるかもしれません。

動機

自宅サーバの運用で、可搬性等の観点からDockerの「Infrastructure as Code」の概念に惹かれてLXCをDockerに移植し始めました。
しかし、途中で「このubuntu:xenialイメージは思考停止でpullしてるけれども安全なのか?」と言った点が気になり調べてみたところ、同じような問題提起をしている方がいらっしゃいました。
Dockerの諸問題とRocket登場の経緯

そこで、セキュアな環境を作成するために、一切のDockerHubとの通信を遮断した環境でもビルドできるイメージを目指し、一から(ubuntu.comからのみ取得できるイメージから)Ubuntuイメージを作成しました。以下はその作業メモです。

突っ込みどころ

  • なぜUbuntu
    • 慣れてるからです。
  • イメージファイルのサイズが大きい
    • 仕様です。先述した通りLXCからの移行かつDockerHubは用いないため、LXCのイメージと比較して同等ならば良いのです。

やりかた

以下のスクリプトによりubuntu-xenialというイメージでUbuntu 16.04のイメージが出来ます。

makeimage-ubuntu-xenial.sh
cd /tmp
mkdir -p baseimage
cd baseimage
wget https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-root.tar.gz
wget https://cloud-images.ubuntu.com/xenial/current/MD5SUMS
if [ -z "`cat MD5SUMS | grep xenial-server-cloudimg-amd64-root.tar.gz | grep \`md5sum xenial-server-cloudimg-amd64-root.tar.gz | awk '{ print $1 }'\``" ]; then
        echo "checksum error"
        return 1
fi
cat xenial-server-cloudimg-amd64-root.tar.gz | docker import - ubuntu-xenial
cd ../
rm -r baseimage

備考

DockerHubを完全に信頼しない場合、 /etc/hosts に以下を記述することで通信を暫定的に(結果的に)遮断できます。

/etc/hosts
127.0.0.1       registry-1.docker.io
127.0.0.1       registry-2.docker.io
127.0.0.1       registry-3.docker.io
127.0.0.1       registry-4.docker.io
127.0.0.1       registry-5.docker.io

最後に

DockerHubを完全に信頼しないわけではないですが、参考文献にも述べられていますがヒューマンエラー、例えばtypoにより意図しないイメージがローカルに展開されるリスクは十分考えられます。また、プライベートなイメージを間違えてpushしてしまう可能性も皆無とはいい切れません。

そういった細かい点を気にせず思う存分Dockerを使うために、個人的にやっておくべきかなと思った点が以上のようなことになります。

参考文献

Dockerの諸問題とRocket登場の経緯

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7