はじめに
Docker Desktopが有料化されるということを受けて、今般、改めてVirtualBoxにて環境を作ることにした。
したらば「Linuxにdocker入れました〜」って情報はたくさん出てくるんだけど、その前のOSを準備するところからの流れはなかなか見当たらなかったので、とりあえずメモに残すことにしてみた。
なお、本件に登場するソフトウェアなどのバージョンは以下の通り(2021/09/06時点)。
- macOS BigSur(11.5.2)
- VirtualBox:6.1.26
- debian 11.0.0
- docker 20.10.8
- docker-compose 1.29.2
debian on VirtualBox
LinuxのディストリビューションというとUbuntuが人気だけど、より安定性を重視しているということでdebianを選んでみた。今回、GUIを使うつもりはないので、ネットワークインストール版のISOを入手し、dockerを動かすのに必要最低限のもののみ導入する。
VirtualBoxで立てるVMにはNICを2つ(NATとホストオンリーアダプタ)を実装するのが良いらしいので、それに従うことにする。NATはゲスト→インターネット、ホストオンリーアダプタはホスト~ゲスト間の接続を担う一方、インターネットからゲストへのアクセスはできなくなるので、セキュリティ上良いということらしい(これはdebianに限った話ではない)。
(1) netinstバージョンのisoをダウンロードする(300MBぐらいだった)
(2) VirtualBoxの仮想OSをセットアップする。仮想OSにはネットワークはデフォルトのNATと、もう1つホストオンリーアダプターを追加する。ホストオンリーアダプタのDHCPは無効にする。
(3) ダウンロードしたISOをセットしてVMを起動
(4) インストーラが立ち上がったら、install(上から2番目)を選択
(5) ネットワークのところでは2つのNICが表示される(enp0s3とenp0s8、前者がNAT、後者がホストオンリーアダプタ)。プライマリネットワークはenp0s3を選ぶ。
(6) 導入するパッケージでは、デスクトップ環境を外して、sshサーバと標準システムツールにチェックを入れる
debianの準備
dockerを導入する前に、ちょこっとだけ準備が必要。
文字化け対応
日本語でインストールをすると、CUIは文字化けする場合があるようなので(実際文字化けした)、以下の対応をした。
(1) rootでログイン
(2) vi /etc/bash.bashrcし、以下の行を最後に追加する
:
case $TERM in
linux) LANG=C ;;
*) LANG=ja_JP.UTF-8 ;;
esac
ホストオンリーアダプタ側のインターフェースを有効にする
enp0s3はアクティブだが、もう1つのenp0s8がDOWNしている上にIPアドレスの設定をしていないので、以下の設定ファイルを編集して反映する
(1) /etc/network/interfaceに以下を追記する
:
(固定IPを設定)
auto enp0s8
iface enp0s8 inet static
address 192.168.56.11 <--- ホストオンリーアダプタのIP帯域(192.168.56.xxx)に合わせる
netmask 255.255.255.0
# gateway 192.168.56.1 <--- GWはenp0s3側になるので、こちらには設定しない
(参考:DHCPの場合はこうなる)
allow-hotplug enp0s8
iface enp0s8 inet dhcp
(2) OSリブート か systemctlでrestartをする
(3) リブート後、ip addrでenp0s8にIPが振られていることを確認
(4) ターミナルでゲストOSからインターネットへ、及びホストOSに対しpingを打ち、どちらも応答が帰ってくることを確認する
(5) ホストOSからゲストOSにsshでログインできることも確認する
root@debian-vm:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:73:74:12 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 84786sec preferred_lft 84786sec
inet6 fe80::a00:27ff:fe73:7412/64 scope link
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:29:0f:1a brd ff:ff:ff:ff:ff:ff
inet 192.168.56.11/24 brd 192.168.56.255 scope global enp0s8
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe29:f1a/64 scope link
valid_lft forever preferred_lft forever
root@debian-vm:~#
sudo
(1) rootでログイン
(2) apt-get install sudo
(3) visudo を実行するとエディタが開く
(4) 最終行にsudoを許容するユーザ(hogehoge)の情報を追加して、C-xで保存する。本当なら実行を許容するコマンドを絞り込んだりするのだろうが、ひとまずオールOKで進める。
hogehoge ALL=(ALL:ALL) ALL #全コマンドを許容する場合
(5) rootはログオフし、sudoを許容設定したユーザでログインする
(6) sudo xxxを実行してエラーにならなければOK
docker導入前のリソース使用量
ここまでの作業でHDD、メモリの使用量を見たらこんなだった。dockerを動かしたら、どのくらい消費するのだろうか?
root@debian-vm:~# df -k
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
udev 1513560 0 1513560 0% /dev
tmpfs 305968 524 305444 1% /run
/dev/sda1 50303512 1175092 46540672 3% /
tmpfs 1529840 0 1529840 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 305968 0 305968 0% /run/user/1000
root@debian-vm:~# free -m
total used free shared buff/cache available
Mem: 2987 75 2674 0 237 2771
Swap: 974 0 974
root@debian-vm:~#
docker導入
debianにdockerを導入する。
dockerをインストールする
公式の手順に沿って進めればいいので、難しいことはない。
(1) dockerに必要なアプリ、ライブラリを導入
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
(2) GPGキーを作成
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
(3) aptのリストにdockerを追加
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
(4) aptでdockerをインストール・確認
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
:
:
$ docker --version
Docker version 20.10.8, build 3967b7d
$
(5) OSリブート後にdockerが起動していなかったら、以下のコマンドを実行する
$ sudo systemctl enabled docker
$ sudo systemctl restart docker
docker-composeをインストールする
こちらも公式の手順に沿って進めればよいので、難しくない
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ which docker-compose
/usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
$
docker導入後のリソース使用量
docker、docker-composeをインストールし、dockerが起動している状態でのリソース使用量はこんな感じ。環境によって色々だと思うので参考まで。
root@debian-vm:~# df -k
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
udev 1513560 0 1513560 0% /dev
tmpfs 305968 540 305428 1% /run
/dev/sda1 50303512 1755992 45959772 4% /
tmpfs 1529840 0 1529840 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 305968 0 305968 0% /run/user/1000
root@debian-vm:~# free -m
total used free shared buff/cache available
Mem: 2987 144 2586 0 257 2705
Swap: 974 0 974
root@debian-vm:~#
終わりに
rootlessとかまだやるべきことはありそうだが、実験用だし、ひとまずpullしてrunできるようになったのでここでひと区切り。