Skip to content

安装应用

推荐的做法是使用 编排/堆栈。

  1. 写好 Docker Compose 文件
  2. 打开 Potainer > 堆栈 > 添加堆栈
  3. 起个名称,粘贴Docker Compose 内容到其中。
  4. "部署堆栈"

Docker Compose:是一种语法。 包含一套信息,设定了要安装的应用、应用的环境、对应用的管理方式。

yml
# Docker Compose 示例
name: alist

services:
  alist:
    image: "xhofe/alist:latest"
    container_name: alist
    network_mode: "host"

    volumes:
      - "/app/alist/:/opt/alist/data"
    # ports:
    #   - "5244:5244"
    # environment:
    #   - PUID=0
    #   - PGID=0
    #   - UMASK=022

    restart: unless-stopped

命令行法

创建一个项目的目录,将编排的内容写入 docker-compose.yml

shell
mkdir app_name && cd app_name
echo "# 编排的内容
name: alist
services:
  alist:
    image: "xhofe/alist:latest"
" >> ./docker-compose.yml
docker compose up -d # 启动堆栈。 -d:在后台运行。

更新应用

  1. Potainer > 堆栈 > 某个堆栈 > 编辑器 > 更新堆栈
  2. 选择"重新拉取镜像并重新部署",点击“更新”

之后,Docker 应该会下载最新的版本,安装,运行。
如果应用没有破坏性更新,更新就完成了。如果应用有破坏性更新,建议看看开发者写的 迁移指南,再更新。

对于不在堆栈中的容器,做法也差不多:在容器的详情页点“复制/编辑”,点击“部署容器”。

命令行法

shell
cd app_name
docker compose up -d --pull always # 拉取最新镜像,在后台运行

自动更新应用

Docker 本身不提供此功能。但是WatchTower是一个自动更新Docker容器的应用,可以用它实现自动更新。
只需在 command 中,设定检查的时间、要自动更新的容器的ID。

计时方式:interval 指间隔;schedule 使用 cron 表达式。
cron 表达式:从左到右,每一位分别表示:(秒) 分 时 日 月 星期。

yaml
name: watchtower
services:
  Watchtower:
    image: containrrr/watchtower
    container_name: Watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      TZ: Asia/Shanghai # 时区
    command: --schedule "0 5 * * *"    aria2 DDNS-Go AutoBangumi # 每天5点(24h制)检查并更新
    # --interval 3600  /   --schedule "0 5 * * *" # 两种计时方式

卸载应用

删除容器或堆栈即可。

  1. Potainer > 堆栈
  2. 勾选堆栈,点击删除

或则在堆栈详情页删除其中的容器。或者在容器列表删除某个堆栈。

命令行法

shell
docker compose down

挂载网络卷

命令行创建外部卷

创建 NFS 卷

shell
docker volume create \
  --driver local \
  --opt type=nfs \
  --opt o=addr=192.168.5.25,vers=4,nolock,soft,rw \
  --opt device=:/mnt/pool_1/Main/ \
  mynfs

创建 SMB 卷

shell
docker volume create \
  --driver local \
  --opt type=cifs \
  --opt o=addr=192.168.5.25,username=用户,password=密码,vers=3.0 \
  --opt device=//192.168.5.25/pool_1 \
  my_smb

使用示例

yml
name: alist
services:
  alist:
    image: xhofe/alist:latest
    volumes:
      - mynfs:/mnt/nfs
      - my_smb:/mnt/nas

volumes:
  mynfs:
    external: true
  my_smb:
    external: true

编排创建内部卷

yml
name: alist
services:
  alist:
    image: xhofe/alist:latest
    volumes:
      - mynfs:/mnt/nfs
      - my_smb:/mnt/nas
 
volumes:
  mynfs:
    driver_opts:
      type: "nfs"
      o: "addr=192.168.5.25,vers=4,nolock,soft,rw"
      device: ":/mnt/pool_1/Main/"

  my_smb:
    driver_opts:
      type: "cifs"
      o: "addr=192.168.5.25,username=用户,password=密码,vers=3.0"
      device: "//192.168.5.25/pool_1"

维护命令

shell
docker exec -it 容器名称 sh # 连接容器的 shell

列出容器

shell
docker ps    # 列出正在运行的容器
docker ps -a # 列出所有容器

查看日志

shell
docker logs 容器名称    # 查看某个容器的日志
docker logs -f 容器名称 # 查看日志,实时地

docker compose logs # 查看本编排的日志

编排的操作

shell
docker compose ps   # 列出所有容器
docker compose logs # 查看日志
docker compose stop # 停止正在运行的容器
docker compose down [options]
# –rmi type,删除镜像,类型必须是:all,删除 compose 文件中定义的所有镜像;local,删除镜像名为空的镜像
# –v, –volumes,删除已经在 compose 文件中定义的和匿名的附在容器上的数据卷