完美的Docker界面!优雅而不简单,那就是Arcane

要说Docker UI项目,知名的其实就那么几个,目前感觉备用的比较多的还是老牌的portainer,不过portainer从早几个版本就已经没有中文更新了,加上国产NAS目前大都自带非常好用的管理界面,所以很多时候自带的Docker就能做到绝大部分操作。但在对容器的更新以及存储卷上,各家NAS都还没有做到很好的适配,而很多时候部分容器不是新版本功能差距很大,这时候就需要第三方协助了。
完美的Docker界面!优雅而不简单,那就是Arcane_第1张图片
Github 地址:https://github.com/ofkm/arcane/

拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/arcane:latest

docker run -d \
  --name arcane \
  -p 31100:3000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v arcane-data:/app/data \
  -e APP_ENV=production \
  -e PUBLIC_SESSION_SECRET=westlife995 \
  --restart unless-stopped \
  registry.cn-hangzhou.aliyuncs.com/qiluo-images/arcane:latest

首次启动会默认创建管理员用户,默认用户名为arcane,密码为arcane-admin。

完美的Docker界面!优雅而不简单,那就是Arcane_第2张图片

完美的Docker界面!优雅而不简单,那就是Arcane_第3张图片
Docker Compose 配置(docker-compose.yml 文件):

version: '3.8'

services:
  arcane:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/arcane:latest
    container_name: arcane
    ports:
      - "31100:3000"  # 宿主机31100映射到容器3000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock  # 挂载Docker套接字
      - arcane-data:/app/data  # 持久化数据卷
    environment:
      - APP_ENV=production  # 生产环境模式
      - PUBLIC_SESSION_SECRET=westlife995  # 会话密钥(建议替换为随机值)
    restart: unless-stopped  # 自动重启策略

volumes:
  arcane-data:  # 定义命名卷
    driver: local

将上述内容保存为 docker-compose.yml 文件
运行以下命令启动服务:

docker-compose up -d

停止服务:

docker-compose down

Docker Swarm 的部署配置,基于你的需求转换为 docker-stack.yml 文件

version: '3.8'

services:
  arcane:
    image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/arcane:latest
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.role == manager  # 限制只在 Manager 节点运行(因挂载了 Docker 套接字)
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
    ports:
      - target: 3000
        published: 31100
        protocol: tcp
        mode: host  # 使用 host 模式避免 Swarm 的 ingress 网络端口冲突
    volumes:
      - type: bind
        source: /var/run/docker.sock
        target: /var/run/docker.sock
      - type: volume
        source: arcane-data
        target: /app/data
    environment:
      - APP_ENV=production
      - PUBLIC_SESSION_SECRET=westlife995  # 建议替换为 secrets 更安全

volumes:
  arcane-data:
    driver: local

# 如果使用 secrets 管理密钥(推荐):
# secrets:
#   arcane-secret:
#     external: true  # 需提前通过 `echo "westlife995" | docker secret create arcane-secret -` 创建

部署命令Stack:

docker stack deploy -c docker-stack.yml arcane

查看服务状态:

docker service ls
docker service logs arcane_arcane

以下是为 Kubernetes (k8s) 准备的部署配置,包含 Deployment 和 Service 资源定义(arcane-k8s.yaml):

---
# 持久化存储声明(PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: arcane-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi  # 根据实际需求调整大小
  storageClassName: standard  # 根据集群存储类调整

---
# 密钥管理(Secret)
apiVersion: v1
kind: Secret
metadata:
  name: arcane-secrets
type: Opaque
data:
  # 使用 base64 编码的值:echo -n "westlife995" | base64
  session-secret: d2VzdGxpZmU5OTU=  

---
# 主应用部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: arcane
spec:
  replicas: 1
  selector:
    matchLabels:
      app: arcane
  template:
    metadata:
      labels:
        app: arcane
    spec:
      containers:
        - name: arcane
          image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/arcane:latest
          ports:
            - containerPort: 3000
          env:
            - name: APP_ENV
              value: "production"
            - name: PUBLIC_SESSION_SECRET
              valueFrom:
                secretKeyRef:
                  name: arcane-secrets
                  key: session-secret
          volumeMounts:
            - name: docker-sock
              mountPath: /var/run/docker.sock
            - name: app-data
              mountPath: /app/data
      volumes:
        - name: docker-sock
          hostPath:
            path: /var/run/docker.sock
            type: File
        - name: app-data
          persistentVolumeClaim:
            claimName: arcane-data-pvc

---
# 服务暴露(NodePort 方式)
apiVersion: v1
kind: Service
metadata:
  name: arcane-service
spec:
  type: NodePort
  selector:
    app: arcane
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
      nodePort: 31100  # 范围需在 30000-32767 之间

部署步骤:

kubectl apply -f arcane-k8s.yaml

查看状态:

kubectl get pods -l app=arcane
kubectl logs -f deploy/arcane

访问服务:
NodePort 方式:http://<任意节点IP>:31100
或通过 Ingress 域名访问

你可能感兴趣的:(docker,容器)