总结:最后一部分FreeBSD下安装docker-machine来使用docker是成功的!

不可用版本docker-freebsd

# pkg install docker-freebsd ca_root_nss
...New packages to be INSTALLED:        
docker-freebsd: 06252015        ca_root_nss: 3.19.1_1        
bash: 4.3.39_2        indexinfo: 0.2.3        
gettext-runtime: 0.19.4        go: 1.4.2,1        
sqlite3: 3.8.10.2        readline: 6.3.8
The process will require 155 MiB more space.26 MiB to be downloaded....
You will need to create a ZFS dataset on /usr/docker
# zfs create -o mountpoint=/usr/docker <zroot>/docker 
And lastly enable the docker daemon
# sysrc -f /etc/rc.conf docker_enable="YES"
# service docker start

碰到的问题:

提示没有docker-freebsd包,可真奇怪。原来2020年一月,这个包被删除了。(FreeBSD Port: sysutils/docker-freebsd (Deleted: Jan 2020))所以上面的例子已经不能用了。

开始以为目前可以用的FreeBSD下的Docker

参考这里:https://github.com/kvasdopil/docker/blob/freebsd-compat/FREEBSD-PORTING.md

后来发现这个库也是9年前的库了!

首先安装需要的库:

pkg install git sqlite3  bash ca_root_nss

然后下载源码:

git clone https://github.com/kvasdopil/docker 
cd docker
git checkout freebsd-compat

然后编译:

setenv AUTO_GOPATH 1
./hack/make.sh binary 

 运行:

zfs create -o mountpoint=/dk zroot/docker 
./bundles/latest/binary/docker -d -e jail -s zfs -g /dk -D

启动之后,就可以像linux下那样使用docker啦!

./bundles/latest/binary/docker pull lexaguskov/freebsd
./bundles/latest/binary/docker run lexaguskov/freebsd echo hello world

本来想装起来试试的,但是git clone这里就抽风,算了。

当前最新的FreeBSD下的Docker支持

这个应该是可以的,说明:Containers - FreeBSD Wiki

 主页:https://github.com/samuelkarp/runj

 安装

pkg install runj containerd

创建镜像

$ runj demo download --output rootfs.txz
Found arch:  amd64
Found version:  12.1-RELEASE
Downloading image for amd64 12.1-RELEASE into rootfs.txz
[...output elided...]
$ runj demo oci-image --input rootfs.txz
Creating OCI image in file image.tar
extracting...
compressing...
computing layer digest...
writing blob sha256:f585dd296aa9697b5acaf9db7b40701a6377a3ccf4d29065cbfd3d2b80395733
writing blob sha256:413cc9413157f822242a4bb2c86ea50d20b8343964b5cf1d86182e132b51f78b
tar...
$ sudo ctr image import --index-name freebsd image.tar
unpacking freebsd (sha256:5ac2e259d1e84a9b955f7630ef499c8b6896f8409b6ac9d9a21542cb883387c0)...done

但是最后一条命令ctr报错,说没有这句命令。看说明,发现runj需要containerd支持,安装:pkg install containerd ,装好之后就有ctr这条命令了。

运行ctr容器之前,先启动containerd的服务:

service containerd start ,然后就可以执行哪些ctr的命令了,比如上面的最后一句,比如下面的run:

sudo ctr run \
    --runtime wtf.sbk.runj.v1 \
    --rm \
    public.ecr.aws/samuelkarp/freebsd:13.1-RELEASE \
    my-container \
    sh -c 'echo "Hello from the container!"'
# 输出 Hello from the container!

运行这句之前先要下载:

ctr image pull public.ecr.aws/samuelkarp/freebsd:13.1-RELEASE

不然会报错。

好吧,到这里,还是不明白怎么安装常规的docker镜像。后续再继续学习

CTR怎么运行docker

ctr 怎么运行docker

要在 CTR(Container Runtime)中运行 Docker,需按以下步骤操作:

  1. 首先确保已经安装了 CTR。可通过以下命令来检查 CTR 的版本信息:ctr version。如果未安装,则需根据所使用的 Linux 发行版进行相应的安装。

  2. 接下来,我们需要创建并配置容器运行时的配置文件 config.toml。该文件包含有关 CTR 的设置选项。可以参考官方文档或示例文件来编写自定义的配置文件。

  3. 然后,将 Docker 镜像加载到 CTR 中。可以使用 ctr images import 命令导入 Docker 镜像。例如,ctr images import docker-archive:/path/to/image.tar。这里 /path/to/image.tar 是指存放 Docker 镜像的 tar 文件路径。

  4. 最后,使用 ctr run 命令来运行 Docker 容器。例如,ctr run -d --rm <container_id>。其中 <container_id> 是之前导入的 Docker 镜像对应的 ID。-d 表示在后台运行容器,--rm 表示容器结束后删除。

  5. 若想与正在运行的容器交互,可以使用 ctr exec 命令。例如,ctr exec -it <container_id> sh。这会打开一个新的 shell 连接到容器内部。

  6. 当不再需要容器时,可以使用 ctr stop 命令停止容器的运行。例如,ctr stop <container_id>

  7. 若要移除容器及其相关数据,可以使用 ctr rm 命令。例如,ctr rm <container_id>

  8. 此外,还可以使用其他 CTR 提供的命令来管理容器、网络等。更多命令和选项可以参考 CTR 的官方文档。

FreeBSD下安装docker-machine来使用docker

在pkg install docker的时候,提示这是客户端,服务端请安装docker-machine,于是尝试安装它!

pkg install docker-machine

安装好之后,怎么用呢?

执行:docker-machine create --driver virtualbox myvm

有报错,不过不重要,一个叫myvm的虚拟主机创建好了。

在VirtualBox中启动这个myvm,然后就可以开始docker的使用之旅拉!,具体参见:boot2docker实践@FreeBSD-CSDN博客

Ubuntu Linux下安装:

sudo apt install docker.io
sudo systemctl start docker

如果没有正常启动需要写启动文件 (类似FreeBSd) 

启动服务:sudo systemctl start docker

 配置加速镜像,中科大的源特别快!编辑文件: /etc/docker/daemon.json 

{
    "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn/",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn"
    ]
}

然后重启服务,如果daemon.json文件里面格式不对,则会重启失败:

sudo systemctl restart docker

Job for docker.service failed because the control process exited with error code.

重启成功后,执行测试,不过我这里直接就执行需要的库了:

sudo docker run --rm -p 8080:80 ai4green/ai4green

进入docker内部

首先查看docker的id和名字:docker ps

然后执行 sudo docker exec -it ec3256e9fc6e  /bin/bash

停止:sudo docker stop 0117dc3cf9d1

cp文件: 

sudo docker cp configs.yaml 35b352222ae4:/Webapp/

调试

执行ctr报错

[root@x250 ~/work]# ctr image import --index-name freebsd image.tar
ctr: failed to dial "/run/containerd/containerd.sock": context deadline exceeded: connection error: desc = "transport: error while dialing: dial unix:///run/containerd/containerd.sock: timeout"

原来是containerd没有启动服务,启动服务:
[root@x250 ~/work]# service containerd start
Cannot 'start' containerd. Set containerd_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'.

执行 echo containerd_enable="YES" >> /etc/rc.conf再启动即可!

执行docker-machine create --driver virtualbox myvm报错

(myvm) Found a new host-only adapter: "vboxnet2"
Error creating machine: Error in driver during machine creation: Error setting up host only network on machine start: /usr/local/bin/VBoxManage hostonlyif ipconfig vboxnet2 --ip 192.168.99.1 --netmask 255.255.255.0 failed:
VBoxManage: error: Code E_ACCESSDENIED (0x80070005) - Access denied (extended info not available)
VBoxManage: error: Context: "EnableStaticIPConfig(Bstr(pszIp).raw(), Bstr(pszNetmask).raw())" at line 242 of file VBoxManageHostonly.cpp

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐