くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

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

結果 f:id:kunst1080:20161223202527p:plain

※再マウントするときは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

f:id:kunst1080:20161223202537p:plain

Docker動かしてみる

Ubuntu

ひとまずUbuntuを。

$ docker search ubuntu

f:id:kunst1080:20161223202547p:plain

$ docker pull ubuntu
$ docker run ubuntu uname -a

f:id:kunst1080:20161223202556p:plain

いろいろ遊んでみます。

$ docker run -it ubuntu bash
$ apt update

f:id:kunst1080:20161223202608p:plain

apt updateがエラーになる……

CentOS

そして、公式にも書いてあるCentOSを。

$ docker search centos

f:id:kunst1080:20161223202619p:plain

$ docker pull centos:6
$ docker run centos uname -a

f:id:kunst1080:20161223202634p:plain

いろいろ遊んでみます。

$ 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

f:id:kunst1080:20161223202644p:plain

FreeBSD

なぜかFreeBSDのコンテナもある

$ docker search freebsd

f:id:kunst1080:20161223202654p:plain

$ docker pull lexaguskov/freebsd
$ docker run lexaguskov/freebsd uname -a

f:id:kunst1080:20161223202713p:plain

いろいろ遊んでみます。

$ docker run -it lexaguskov/freebsd tcsh
$ echo nameserver 8.8.8.8 >> /etc/resolv.conf
$ pkg update
$ pkg install -y sl
$ sl

f:id:kunst1080:20161223202729p:plain f:id:kunst1080:20161223202739p:plain

Jenkins

遊んでばかりでもアレなので、最後にJenkinsの公式イメージをホストしてみます。

$ docker search jenkins

f:id:kunst1080:20161223202752p:plain

$ docker pull jenkins:alpine
$ docker run -p 8080:8080 jenkins:alpine

f:id:kunst1080:20161223202809p:plain

ああああああああ………もうちょい勉強が必要ですね。。。

参考URL