Oracle Cloudで無料で使えるA1.FlexシェイプのVM(arm64アーキテクチャ)でNetBoxをDockerでデプロイしてみました。
NetBoxのコンテナイメージはamd64版しか公開されていないため、arm64アーキテクチャでコンテナ版をデプロイするには、自前でビルドする必要があります。
ただ、ビルドのためのスクリプト類は用意されてるので、簡単にビルドできます。
ビルド自体は以前試したここの手順の通りで、NetBox本体のリポジトリのtag名などを指定すれば、そのバージョンのイメージをビルドできます。
Oracle Cloud A1.FlexのインスタンスへのDockerエンジン本体のインストールはこちら。
Docker Composeのインストールはpip版、Docker Plugin版どちらかでインストールする。本エントリではDocker PluginとしてインストールしたCompose v2でお試し。
Ubuntu 20.04 / Oracle Linux 8
$ git clone -b release https://github.com/netbox-community/netbox-docker.git $ cd netbox-docker/
で、本来であれば必要に応じてdocker-compose.override.yml
を用意したりし、up
すればデプロイできるのですが、
netbox-docker-netbox-1 | standard_init_linux.go:228: exec user process caused: exec format error netbox-docker-netbox-1 exited with code 1
起動に失敗します。
これは、NetBoxのコンテナイメージがamd64向けしか公開されておらず、でも実行しようとしてるプラットフォームはarm64のため起動に失敗している状態のため、何をどう頑張っても起動できません。
$ docker run --rm netboxcommunity/netbox:v3.0 WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested standard_init_linux.go:228: exec user process caused: exec format error
じゃあどうすればいいかと言うと、実行したいプラットフォーム用のイメージを自分でビルドすれば(今回動かしたいNetBoxについては)OKです。
NetBoxのコンテナイメージは、(わかりにくいけど)alpineがベースイメージになっていて、このイメージはarm64用が用意されているため、このイメージをベースにビルドします。特定プラットフォーム用のビルドというとクロスコンパイルみたいなイメージがありますが、単に動かしたいarm64のプラットフォーム(のDockerエンジン)上でビルドすればOKです。
NetBoxのコンテナイメージビルドは、デプロイに使用するComposeファイルを提供しているnetbox-dockerリポジトリに、ビルド用のスクリプトも同梱しているため、そのスクリプトを実行すればよいので簡単にビルドできます。
2021.09.30時点で最新のv3.0.4でお試し。
ビルドスクリプトの引数に、NetBox本体のリポジトリのターゲットバージョンのtagを指定します。
$ ./build.sh v3.0.4
ビルドはこれだけ。そこそこ時間かかる。
ビルド完了すると以下の通り。
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE netboxcommunity/netbox latest-ldap 955e60dabcfc 4 minutes ago 442MB netboxcommunity/netbox v3.0-ldap 955e60dabcfc 4 minutes ago 442MB netboxcommunity/netbox v3.0.4-ldap 955e60dabcfc 4 minutes ago 442MB netboxcommunity/netbox latest cffca943100b 4 minutes ago 436MB netboxcommunity/netbox v3.0 cffca943100b 4 minutes ago 436MB netboxcommunity/netbox v3.0.4 cffca943100b 4 minutes ago 436MB
v3.0
のタグを含めてビルドできてるので、そのままdocker compose up
します。
(標準で用意されているdocker-compose.yml
がv3.0
タグ前提の記述なので)
$ docker compose up [+] Running 6/6 ⠿ Container netbox-docker-redis-cache-1 Creat... 0.0s ⠿ Container netbox-docker-postgres-1 Created 0.0s ⠿ Container netbox-docker-redis-1 Created 0.0s ⠿ Container netbox-docker-netbox-housekeeping-1 Recreated 0.1s ⠿ Container netbox-docker-netbox-worker-1 Rec... 0.1s ⠿ Container netbox-docker-netbox-1 Recreated 0.1s Attaching to netbox-docker-netbox-1, netbox-docker-netbox-housekeeping-1, netbox-docker-netbox-worker-1, netbox-docker-postgres-1, netbox-docker-redis-1, netbox-docker-redis-cache-1 netbox-docker-redis-cache-1 | 1:C 30 Sep 2021 12:11:13.783 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo [...] netbox-docker-netbox-1 | ✅ Initialisation is done. netbox-docker-netbox-1 | ⏳ Waiting for control socket to be created... (1/10) netbox-docker-netbox-1 | 2021/09/30 12:12:15 [warn] 7#7 Unit is running unprivileged, then it cannot use arbitrary user and group. netbox-docker-netbox-1 | 2021/09/30 12:12:15 [info] 7#7 unit started netbox-docker-netbox-1 | 2021/09/30 12:12:15 [info] 20#20 discovery started netbox-docker-netbox-1 | 2021/09/30 12:12:15 [notice] 20#20 module: python 3.9.5 "/usr/lib/unit/modules/python3.unit.so" netbox-docker-netbox-1 | 2021/09/30 12:12:15 [info] 7#7 controller started netbox-docker-netbox-1 | 2021/09/30 12:12:15 [notice] 7#7 process 20 exited with code 0 netbox-docker-netbox-1 | 2021/09/30 12:12:15 [info] 22#22 router started netbox-docker-netbox-1 | 2021/09/30 12:12:15 [info] 22#22 OpenSSL 1.1.1l 24 Aug 2021, 101010cf netbox-docker-netbox-1 | ⚙️ Applying configuration from /etc/unit/nginx-unit.json netbox-docker-netbox-1 | 2021/09/30 12:12:16 [info] 26#26 "netbox" application started netbox-docker-netbox-1 | 🧬 loaded config '/etc/netbox/config/configuration.py' netbox-docker-netbox-1 | 🧬 loaded config '/etc/netbox/config/extra.py' netbox-docker-netbox-1 | 🧬 loaded config '/etc/netbox/config/logging.py' netbox-docker-netbox-1 | 🧬 loaded config '/etc/netbox/config/plugins.py' netbox-docker-netbox-1 | ✅ Unit configuration loaded successfully netbox-docker-netbox-1 | 2021/09/30 12:12:18 [notice] 7#7 process 18 exited with code 0
はい。
あとはセキュリティグループなどの設定を確認しつつwebアクセスすればこの通り。
Oracle Linux 7.9の場合
Gitバージョンでトラップあるので注意。
それ以外はUbuntu 20.04 / Oracle Linux 8と同じ。
$ ./build.sh v3.0.4 ▶️ ./build.sh v3.0.4 🌐 Checking out 'v3.0.4' of NetBox from the url 'https://github.com/netbox-community/netbox.git' into '.netbox' Note: checking out '84d83fbd143f26097db9464a46657b7a65ab27cb'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name fatal: git fetch-pack: expected shallow list
標準リポジトリでyum install
できるGitのバージョンが1系のため、必要な操作ができないエラーになります。
$ git version git version 1.8.3.1
IUSのリポジトリからインストールできたら簡単かな?と思ったけど、あいにくこのリポジトリではarm64版のパッケージはありません。
探した結果、Oracle Linux 7.9では標準リポジトリでrh-git218-git-all.noarch
というパッケージが用意されています。(名前…いいのかな、これw)
$ sudo yum install rh-git218-git-all
このパッケージをインストールすると、/opt/rh/rh-git218/root/usr/bin/git
にv2系のGitがインストールされます。
$ /opt/rh/rh-git218/root/usr/bin/git version git version 2.18.4
PATH設定してリビルド
$ export PATH=/opt/rh/rh-git218/root/usr/bin:$PATH $ ./build.sh v3.0.4 ▶️ ./build.sh v3.0.4 /opt/rh/rh-git218/root/usr/libexec/git-core/git-remote-https: error while loading shared libraries: libcurl-httpd24.so.4: cannot open shared object file: No such file or directory ❌ Remote branch 'v3.0.4' not found in 'https://github.com/netbox-community/netbox.git'; Nothing to do
をしようとすると、更にエラー。
検索すると以下がヒット。
$ sudo ln -s /opt/rh/httpd24/root/usr/lib64/libcurl-httpd24.so.4 /lib64/
この状態で更にリビルトしようとすると、同じように以下のエラー
$ ./build.sh v3.0.4 ▶️ ./build.sh v3.0.4 /opt/rh/rh-git218/root/usr/libexec/git-core/git-remote-https: error while loading shared libraries: libnghttp2-httpd24.so.14: cannot open shared object file: No such file or directory ❌ Remote branch 'v3.0.4' not found in 'https://github.com/netbox-community/netbox.git'; Nothing to do
これも同様に、
$ sudo ln -s /opt/rh/httpd24/root/usr/lib64/libnghttp2-httpd24.so.14 /lib64/
する。
今度こそリビルド。
$ ./build.sh v3.0.4
しばらく待てばビルド完了するはず。
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE netboxcommunity/netbox latest-ldap feae491462bb 41 seconds ago 442MB netboxcommunity/netbox v3.0-ldap feae491462bb 41 seconds ago 442MB netboxcommunity/netbox v3.0.4-ldap feae491462bb 41 seconds ago 442MB netboxcommunity/netbox latest b746cc1f2603 About a minute ago 436MB netboxcommunity/netbox v3.0 b746cc1f2603 About a minute ago 436MB netboxcommunity/netbox v3.0.4 b746cc1f2603 About a minute ago 436MB [...]
あとは同じようにdocker-compose.override.yml
を作成し、docker compose up -d
でデプロイできます。
$ docker compose up -d [+] Running 1/3 ⠴ redis-cache Pulling 1.6s ⠿ 552d1f2373af Already exists 0.0s ⠋ 08b93f529d04 Waiting 0.1s [+] Running 1/169 Waiting 0.1s ⠦ redis-cache Pulling 1.7s [...]
現状だとHTTPアクセスになっており経路が暗号化されないのでその点は注意。
あくまでお試しということで、セキュリティグループで自分のIPアドレスでのみアクセスできるようにするなどフィルタした方がよい。