在FreeBSD上使用Docker

2021-09-11 21:29:16 字數 3988 閱讀 5303

freebsd是個好東西,因為有zfs。docker也是個好東西,因為很爽。

然而之前docker只支援linux,所以在其它平台上都需要搞個linux虛擬機器才能用,麻煩得很。

當然現在也是一樣,只是官方出了乙個docker-machine可以更方便地管理虛擬機器裡的docker。基本用法可以參考這篇《docker on freebsd》

不過為了折騰這個東西,我把家裡的伺服器搞崩潰好多次,最後甚至不得不重灌一遍……前前後後折騰了快乙個月。

現在把這個血淚教訓總結成本文。

docker-machine依賴虛擬機器環境,這裡以最常用的virtualbox為例。

我的伺服器上本來就跑著vbox,所以當時就直接拿來用了,結果可恥滴失敗了。

首先是需要系統版本:freebsd 11以上才提供了docker-machine,所以必須先把我的10公升級一下。公升級方法以前說過(見《freebsd公升級失敗的處理》),這裡從略。

公升級完成之後還是不能用,建立新machine的時候各種報錯,比如:

error creating machine: error in driver during machine creation: unable to start the vm: /usr/local/bin/vboxmanage startvm dockerhost --type headless failed:

vboxmanage: error: the vmmr0.r0 module version does not match vboxvmm.dll/so/dylib. if you just upgraded virtualbox, please terminate all vms and make sure th

at neither vboxnetdhcp nor vboxnetnat is running. then try again. if this error persists, try re-installing virtualbox. (verr_vmm_r0_version_mismatch)

vboxmanage: error: details: code ns_error_failure (0x80004005), component consolewrap, inte***ce iconsole

details: 00:00:00.488143 power up failed (vrc=verr_vmm_r0_version_mismatch, rc=ns_error_failure (0x80004005))

複製**

看上去是某些驅動或服務沒有正常工作。於是參考virtualbox文件,把vboxdrv和vboxnet都啟用,然後重啟……恭喜,系統崩潰了……

查了很久也沒查出原因,我甚至另外搞了一台電腦安裝了freebsd11重試,還是一樣的問題。

只要下面任意乙個命令執行就崩潰:

service vboxnet onestart

kldload vboxdrv.ko

複製**

搜了很久也沒找到原因,搞了好幾天,直到今天搜到有人說了一句:可能跟系統不完全相容。我靈光一閃——對了,我的vbox是通過pkgng安裝的,有可能不相容。於是果斷換成多年不用的ports:

portsnap fetch

portsnap extra # 或update,如果已經安裝了ports的話

cd /usr/ports/emulators/virtualbox-ose

make config

make

make install clean

複製**

然而仍然沒有那麼順利,因為舊版的還在……

pkg delete virtualbox-ose

複製**

刪除後再編譯,仍然會有一些衝突的依賴包,全部刪除掉改用ports的版本。vbox這東西依賴還是相當多的,斷斷續續編譯了兩天才算完成。最後還編譯安裝了一把virtualbox-ose-kmod

為了保險起見,docker-machinedocker-compose我也是用ports的版本。

需要注意的是,如果你想用非root使用者操作的話,需要先允許這個使用者操作虛擬機器:

pw groupmod vboxusers -m yourname

複製**

使用者需要重新登入一下,如果用了screen或tmux之類的,也需要新開會話(不是新開視窗)才會生效。

另外,為了充分利用zfs,建立乙個zfs供machine使用:

zfs create -o mountpoint=/home/yourname/.docker tank/docker

複製**

這樣建立的虛擬機器就會在tank/docker這個zfs裡了。

重點來了,為了使用docker,先得建立乙個machine,這就需要使用前面安裝的docker-machine了:

docker-machine create --driver virtualbox \

--virtualbox-memory 2048 \

--virtualbox-cpu-count 1 \

--virtualbox-disk-size 204800 \

dockerhost

複製**

上面的命令建立了乙個叫做dockerhost的虛擬機器,記憶體2g,cpu一顆,硬碟200g,並且自動執行起來。

然後就可以對這個machine進行一系列操作了。

docker-machine ls

docker-machine stop dockerhost # 停止虛擬機器

docker-machine start dockerhost # 啟動虛擬機器

docker-machine rm dockerhost # 刪除虛擬機器

複製**

成功建立或啟動乙個machine之後,就可以操作docker了,不過操作之前需要設定一下環境:

eval `docker-machine env dockerhost`

複製**

主要是就是設定幾個環境變數給docker使用。

如果使用root使用者,需要注意的是:

root使用者的預設shell是csh,並不支援這個命令,必須使用bash。

其它使用者如果也是用csh,也要注意這一點。

現在終於可以開始使用docker了:

docker images

docker ps

docker run helloworld

複製**

大功告成!

但是還沒完,docker-machine裡的檔案路徑是對映過的,所以現在試試這個是不會成功的:

docker run -it --rm -v /home/yourname:/var/workdir alpine /bin/sh

# cd /var/workdir

# touch test

# exit

> cd /home/yourname

> ls test

# 並沒有這個檔案

複製**

因為-v對映的路徑不正確,必須使用在machine裡對映過的路徑。預設的對映路徑是:

share => /home

複製**

所以上面那個測試可以改為:

docker run -it --rm -v /share/yourname:/var/workdir alpine /bin/sh

複製**

這樣再做上面的測試就可以成功了。

當然那個預設對映可以自己在virtualbox裡修改,或者在建立docker-machine的時候指定。

在FreeBSD 上配置 Sphinx 搜尋引擎

在freebsd 上配置 sphinx 搜尋引擎 和 linux 上相比,會有一些差異,而且步驟可能會更加的繁瑣。有些可能無法用 make 系統進行編譯,必須手動修改 configure 檔案,或者 或者只能手動編譯。1.安裝 mmse gmmseg 比較成熟,安裝的過程一般不會出什麼問題。但是還是...

dock基本使用

要安裝最新的 docker 版本,首先需要安裝 apt transport https 支援,之後通過新增源來安裝。要安裝最新的 docker 版本,首先需要安裝 apt transport https 支援,之後通過新增源來安裝。sudo docker images 顯示本地已有的映象 sudo ...

在FreeBSD上CVSD的安裝與配置 轉貼

要說明的是,我是按照老黃的cvsd安裝配置方法來進行的安裝,過程中發現了一些問題,所以我特別重新寫了一篇新的文件,讓大家避免出現不必要的麻煩 1.安裝cvsd by huangyaoshifog 建立cvsd使用者和cvsd組 by huangyaoshifog 建議使用 sysinstall 建立...