[2023-06-24] 不建议通过此方法在truenas中使用docker,在更新truenas系统时,若遇到系统对docker进行修改或升级,则daemon.json文件会被重置

简单的介绍

docker 是一种容器化部署工具,它能够将应用程序打包成镜像(image),然后在 docker 中创建这个镜像的容器(container),使应用程序运行在这个容器中。

docker 能够使部署程序变得非常简单,之后我们将使用 docker 来部署应用程序,这样在不需要专业知识的情况下,也能轻松完成部署。

注意:容器内部的所有数据将会在容器删除时被一起删除,所以在使用 docker 时,需要挂载主机中的目录到容器。挂载后,在容器中对挂载目录中文件进行修改,就等同于修改主机中的文件。这里只是作为提醒,如果按照我列出的步骤操作就不需要担心,如果你需要自己修改配置文件,那就需要注意这个问题。

TrueNAS 使用 k8s 来管理 docker 容器,但是自带的 UI 部署 docker 应用非常麻烦,需要填非常多的参数,而我对 k8s 还不了解,所以就使用 docker compose 来部署。

配置 docker

设置存储池

我们需要开启 k8s 后 TrueNAS 才会开启 docker,只要设置一个存储池就能够启用了。

  1. 进入【应用】菜单,点击【设置】,然后【选择池】。

  2. 选择存储池后,会在这个存储池中创建一个【ix-applications】的数据集用于存放 k8s 和 docker 的相关文件。

修改 docker 配置

因为 TrueNAS 中 docker 配置的问题,只有 k8s 创建的 docker 应用才能访问外部网络,所以我们需要修改配置文件使 docker 直接创建的容器也能够访问外部网络。

  1. 通过【系统设置 -》命令行】进入命令行界面,并切换到 root 用户 su root

  2. 复制配置文件,cp /etc/docker/daemon.json /etc/docker/daemon-new.json

  3. 编辑文件 vi /etc/docker/daemon-new.json,删除 iptables 和 bridge 参数(就是圈出来的这些),然后保存

  4. 编辑文件 vi /usr/lib/systemd/system/docker.service,找到 [service]段,在 ExecStart=/usr/bin/dockerd 后面添加 --config-file=/etc/docker/daemon-new.json

  5. 重新加载配置,systemctl daemon-reload

  6. 重启 docker ,systemctl restart docker

安装 docker-compose

docker-compose 是用于定义和运行多容器 Docker 应用程序的工具,通过使用 YML 文件来配置应用程序。配置好后使用一个命令就可以启动对应的容器,使部署docker应用更简单。

使用 apt-get 安装的 docker-compose 版本过低,目前还停留在 1.29.2,所以这里下载二进制包进行安装

github 下载比较慢,这里使用 daocloud 镜像进行下载

如需安装其他版本,可以替换 v2.16.0,其他版本号可以在 GitHub 查看

  1. 使用 root 用户,执行以下命令行下载
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.16.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  1. 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
  1. 创建软连接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  1. 测试是否安装成功,出现版本号就是完成
docker-compose version

创建一个网桥

由于 docker 自带的网桥无法给 docker-compose 使用,我们需要创建一个自己的网桥

在命令行执行 docker network create --driver bridge my-bridge,这样就创建了一个名为 my-bridge 的网桥

安装 portainer

portainer 是一个 docker 图形化管理工具,接下来就试着安装第一个 docker 应用

  1. 创建一个数据集用于存放 docker 数据,并将这个数据集添加到 SMB 中

  2. 在 windows 中挂载这个数据集

  3. 在 docker 文件夹中创建一个 portainer 文件夹,用于存放 docker 相关的配置,配置可以在 这里 下载,最后结构如下

  4. 进入 TrueNAS,从命令行进入 portainer 文件夹 cd /mnt/volume1/docker/portainer,其中 volume1 是存储池名称,docker 是数据集名称,请根据实际情况修改

  5. 执行 docker-compose up -d 启动容器

  6. 通过浏览器访问 http://ip:9000 访问 portainer,设置账号密码

  7. 点击 Get Started

  8. 点击本地 docker,你也可以通过最右边的编辑按钮修改名称,这样就能用网页来查看容器的运行状态了