# 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 /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))所以上面的例子已经不能用了。
参考这里: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这里就抽风,算了。
这个应该是可以的,说明: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,需按以下步骤操作:
首先确保已经安装了 CTR。可通过以下命令来检查 CTR 的版本信息:
ctr version
。如果未安装,则需根据所使用的 Linux 发行版进行相应的安装。接下来,我们需要创建并配置容器运行时的配置文件
config.toml
。该文件包含有关 CTR 的设置选项。可以参考官方文档或示例文件来编写自定义的配置文件。然后,将 Docker 镜像加载到 CTR 中。可以使用
ctr images import
命令导入 Docker 镜像。例如,ctr images import docker-archive:/path/to/image.tar
。这里/path/to/image.tar
是指存放 Docker 镜像的 tar 文件路径。最后,使用
ctr run
命令来运行 Docker 容器。例如,ctr run -d --rm
。其中是之前导入的 Docker 镜像对应的 ID。
-d
表示在后台运行容器,--rm
表示容器结束后删除。若想与正在运行的容器交互,可以使用
ctr exec
命令。例如,ctr exec -it
。这会打开一个新的 shell 连接到容器内部。sh 当不再需要容器时,可以使用
ctr stop
命令停止容器的运行。例如,ctr stop
。若要移除容器及其相关数据,可以使用
ctr rm
命令。例如,ctr rm
。此外,还可以使用其他 CTR 提供的命令来管理容器、网络等。更多命令和选项可以参考 CTR 的官方文档。
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的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再启动即可!