FreeBSDでDockerやってみた
この記事はFreeBSD Advent Calendar 2016の23日目の記事として公開されました。
はじめに
数年前まで私は、FreeBSDだいすきおじさんでした。Jailで仮想環境をたくさん作ったり、flavourを作ったり、flavourを管理するツールを作ったり*1、ワンライナーでインストールしたり*2……など、充実したFreeBSDライフを楽しんでいました。 しかし、Dockerという非常に便利なツールが現れました。DockerはLinuxでしか動作しませんが、非常にパワフルで簡単で、そして何より実用的でした。私はFreeBSDというOSが大好きではありましたが、その便利さには抗えず、結果的にFreeBSDから離れることとなってしまいました。。。
しかし、そう。今ではFreeBSDでもDockerは動くらしいのです。 (Docker - FreeBSD Wiki)
その答えを求め我々は南米へ……は飛ばずに、検証してみようと思います。
環境のセットアップ
仮想環境でFreeBSDを起動
2015年6月時点ではFreeBSD 11-CURRENT
が推奨されていたようですが、今では11.0-RELEASE
がリリースされていますので、こちらで検証します。
最近は仮想環境にHyper-Vを使っているので、今回はHyper-v用のVHDファイルをダウンロードしてきてそのまま利用することにします。
$ curl -LO ftp://ftp2.jp.freebsd.org/pub/FreeBSD/releases/VM-IMAGES/11.0-RELEASE/amd64/Latest/FreeBSD-11.0-RELEASE-amd64.vhd.xz
$ 7z x FreeBSD-11.0-RELEASE-amd64.vhd.xz
VHDファイルが解凍できたので、適当にHyper-Vへインポートします。
SSHサーバの起動
とりあえずネットワークにはDHCPを使うようにして、sshdを起動します。
最近は直接/etc/rc.conf
を編集するのではなく、sysrc
コマンドを使うものらしいです。
$ sysrc sshd_enable="YES" $ sysrc ifconfig_hn0="DHCP"
あとは/etc/sshd/sshd_conf
などを適当に設定してsshdを起動します。
sshでログインしましょう。
Dockerのインストール
公式サイトの内容(https://wiki.freebsd.org/Docker)に沿って進めます。
zfsの準備
$ kldload zfs $ kldstat $ dd if=/dev/zero of=/usr/local/dockerfs bs=1024K count=4000 $ zpool create -f zroot /usr/local/dockerfs $ zpool list $ zfs list $ zfs create -o mountpoint=/usr/docker zroot/docker $ zfs list
結果
※再マウントするときはzfs mount zroot/docker
Dockerをセットアップ
Dockerのインストール
$ pkg install docker-freebsd ca_root_nss
Bash利用のためにfdデバイスを作成
$ echo ' fdesc /dev/fd fdescfs rw 0 0' >> /etc/fstab $ mount -t fdescfs fdesc /dev/fd
Dockerをサービス登録&起動
$ sysrc docker_enable="YES" $ service docker start
dockerのバージョン確認
$ docker version
Docker動かしてみる
Ubuntu
ひとまずUbuntuを。
$ docker search ubuntu
$ docker pull ubuntu
$ docker run ubuntu uname -a
いろいろ遊んでみます。
$ docker run -it ubuntu bash
$ apt update
apt update
がエラーになる……
CentOS
そして、公式にも書いてあるCentOSを。
$ docker search centos
$ docker pull centos:6 $ docker run centos uname -a
いろいろ遊んでみます。
$ docker run -it centos:6 bash
$ echo nameserver 8.8.8.8 >> /etc/resolv.conf $ yum update $ yum install -y bc $ echo 9 + 7 | bc
FreeBSD
なぜかFreeBSDのコンテナもある
$ docker search freebsd
$ docker pull lexaguskov/freebsd
$ docker run lexaguskov/freebsd uname -a
いろいろ遊んでみます。
$ docker run -it lexaguskov/freebsd tcsh
$ echo nameserver 8.8.8.8 >> /etc/resolv.conf $ pkg update $ pkg install -y sl $ sl
Jenkins
遊んでばかりでもアレなので、最後にJenkinsの公式イメージをホストしてみます。
$ docker search jenkins
$ docker pull jenkins:alpine $ docker run -p 8080:8080 jenkins:alpine
ああああああああ………もうちょい勉強が必要ですね。。。