跳转至

部署与加速

Docker 代理、镜像加速、daemon 配置与常用服务的一键部署命令。

  • 代理与加速


    系统级 / 构建时代理、registry-mirrors

  • buildx


    跨平台构建多架构镜像

  • daemon.json


    data-root / live-restore / runtime

  • 常用服务


    FileBrowser / MySQL / Jenkins / Aria2 …


🚀 代理与镜像加速

HTTP_PROXY · build-arg · registry-mirrors · entrypoint。系统级、构建时代理与镜像加速。

系统级代理(dockerd 走代理)

mkdir -p /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/proxy.conf
proxy.conf
[Service]
Environment="HTTP_PROXY=http://xl.hoao.fun:7890"
Environment="HTTPS_PROXY=http://xl.hoao.fun:7890"
systemctl daemon-reload
systemctl restart docker.service

代理地址

上面是个人代理 xl.hoao.fun:7890,换成自己的即可(通用占位 proxy.example.com:7890)。

构建时代理(build-arg)

docker build -t app \
  --build-arg http_proxy=http://xl.hoao.fun:7890 \
  --build-arg https_proxy=http://xl.hoao.fun:7890 .

镜像加速(阿里云个人镜像)

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://p3nm1lt0.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload && systemctl restart docker

镜像入口脚本(entrypoint)

开启 IP 转发后执行传入命令:

entrypoint.sh
#!/bin/sh

set -e

# enable IP forwarding
sysctl -w net.ipv4.ip_forward=1
# $0 表示脚本名称,$1 和 $2 表示第一个、第二个参数,$@ 表示所有位置参数
exec "$@"

对应 Dockerfile:ENTRYPOINT ["/entrypoint.sh"]


🧱 buildx 跨平台构建

# 创建 buildx 环境
docker buildx create --name=buildx --driver=docker-container

# 启动 buildx 环境
docker buildx inspect --bootstrap buildx

# 切换到 buildx 环境
docker buildx use buildx

# 构建并推送多平台镜像(arm64 + amd64)
docker buildx build --platform linux/arm64,linux/amd64 \
  -t hub.docker.com/username/app:v0.0.1 . --push

# 停止 / 删除 buildx 环境
docker buildx stop buildx
docker buildx rm buildx

⚙️ daemon.json 常用项

data-root · live-restore · registry-mirrors · default-address-pools。Docker 守护进程常用配置。

/etc/docker/daemon.json
{
    "data-root": "/data/docker",
    "live-restore": true,
    "registry-mirrors": ["https://p3nm1lt0.mirror.aliyuncs.com"],
    "insecure-registries": ["192.168.31.191:5000"],
    "default-address-pools": [{"base": "172.17.0.0/12", "size": 24}],
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] }
    }
}
说明
data-root Docker 数据持久化根目录(默认 /var/lib/docker
live-restore dockerd 挂掉时容器保持存活
registry-mirrors 镜像加速地址
insecure-registries 非 HTTPS 私有仓库
default-address-pools 容器子网地址池,避免与内网网段冲突(详见疑难杂症 11
default-runtime / runtimes 指定默认运行时(如 nvidia)

📦 常用服务一键部署

占位值

下面的密码 / 路径是个人环境实际值;通用占位可自行替换,如 yourpasswordyoursecret/data:/srv/data/Download/root/aria2-config

FileBrowser 文件管理

docker run -d --name=filebrowser -v /data:/srv -p 1080:80 filebrowser/filebrowser
docker run -d --name=filebrowser \
    -v /abusb320:/srv \
    -p 1080:80 \
    filebrowser/filebrowser
docker run \
    -v /path/to/root:/srv \
    -v /path/filebrowser.db:/database.db \
    -v /path/.filebrowser.json:/.filebrowser.json \
    --user $(id -u):$(id -g) \
    -p 80:80 \
    filebrowser/filebrowser

thin_filebrowser(临时分享目录)

docker run -it -v $PWD:/go/data -p 8080:80 admibo/thin_file
  • 进入想分享的目录再执行;其中下方 802 是 web 访问的端口,可以随意暴露。
  • 浏览器打开 http://<你的IP>,账号 admin,密码 admin@123

Excalidraw 写画板

docker run -dit --name excalidraw -p 5000:80 excalidraw/excalidraw:latest

源码:excalidraw/excalidraw

PHP + Apache

docker run -d -p 8012:80 --name my-apache-php-app -v "$PWD":/var/www/html php:7.2-apache

Apache httpd

docker run -p 80:80 --name apache --restart always \
  -v /var/www/html:/usr/local/apache2/htdocs/ \
  -d httpd

Jenkins

docker run -id --name myjenkins \
  -p 8080:8080 -p 50000:50000 \
  -v /var/jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

MySQL / MariaDB

docker run -p 127.0.0.1:3306:3306 --name some-mariadb \
  -e MARIADB_ROOT_PASSWORD=miboxp \
  -d mariadb:latest

免密登录(写入客户端配置):

echo -e "[client]\nuser=root\npassword=miboxp\nport = 3306" >> /etc/mysql/my.cnf

创建业务库与用户:

create database blog;
create user 'blog'@'localhost' identified by 'blog';
grant all privileges on blog.* to 'blog'@'localhost';
flush privileges;

创建超级用户:

create user 'mibo'@'localhost' identified by 'AzSf2SFCOakVH0sRTA1n.';
grant all privileges on *.* to 'mibo'@'localhost';
flush privileges;

Portainer 容器管理

docker run -d \
  -p 9000:9000 \
  --name=portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  portainer/portainer-ce

Gogs 代码托管

docker pull gogs/gogs-rpi
docker run -p 50022:22 -p 50080:3000 --name=gogs \
  -e TZ="Asia/Shanghai" \
  -v /root/gitgogs:/data \
  -d gogs/gogs-rpi
docker pull gogs/gogs
docker run -p 50022:22 -p 50080:3000 --name=gogs \
  -e TZ="Asia/Shanghai" \
  -v /root/gitgogs:/data \
  -d gogs/gogs

Aria2 下载工具

docker run -d \
  --name aria2-service \
  --restart unless-stopped \
  --log-opt max-size=1m \
  -e PUID=33 \
  -e PGID=33 \
  -e UMASK_SET=111 \
  -e RPC_SECRET=mibo \
  -e RPC_PORT=6800 \
  -p 6800:6800 \
  -e LISTEN_PORT=6888 \
  -p 6888:6888 \
  -p 6888:6888/udp \
  -v /root/info-home/aria2-config:/config \
  -v /abusb320/Download:/downloads \
  p3terx/aria2-pro
docker run -d \
  --name aria2-webui \
  --log-opt max-size=1m \
  --restart unless-stopped \
  -p 6880:6880 \
  p3terx/ariang

AriaNg 连接

在 AriaNg 设置中输入上面 RPC_SECRET 的值 mibo,即可连接成功。

禅道

docker run --name zentao -p 8081:80 \
  -v /opt/candao:/www/zentaopms \
  -v /opt/candaoDB:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=www1122345 \
  -d easysoft/zentao

MkDocs 服务

进入 mkdocs 仓库根目录,主题 material。

alias ddd='docker run -id --rm --name mibodoc -p 3366:80 -v /var/www/html/0BOOK_WRITEW:/home/ admibo/mkdocs && iptables -I DOCKER ! -s 10.66.30.100 -j DROP'
docker run -id --rm -p 11223:80 -v $PWD:/home/ admibo/mkdocs

AdGuard Home(DNS 服务器)

docker run --name adguardhome \
  -p 53:53/tcp -p 53:53/udp \
  -p 3000:3000/tcp \
  -d adguard/adguardhome

🐳 docker-compose 示例

docker-compose.yml · networks · links。编排示例。

这是一个一句话的 API,用于获取一言。

docker-compose.yml
version: '3'
networks:
  hitokoto_api:
    driver: bridge

services:
  hitokoto_api:
    networks:
      - hitokoto_api
    image: hitokoto/api:release
    container_name: hitokoto_api
    hostname: hitokoto_api
    environment:
      NODE_ENV: production
      # 服务配置
      # url: https://v1.hitokoto.cn # 请修改为您想要部署的域名
      api_name: sh-01-X23Hwoc # 改一个好听的标识吧
      requests.hosts: "['v1.hitokoto.cn']" # 改成你想统计的主机名列表
      redis.host: redis # Redis 连接地址,如果您使用本文件提供的 Redis 的话您无需修改此项
      redis.port: 6379 # Redis 连接端口
      # redis.password:
      # redis.database: 0
    ports:
      - 127.0.0.1:18000:8000
    links:
      - redis
    restart: unless-stopped
    volumes:
      - ./etc/api:/usr/src/app/data

  redis:
    networks:
      - hitokoto_api
    image: redis
    restart: unless-stopped
    container_name: redis
    hostname: redis
    volumes:
      - ./etc/redis.conf:/etc/redis/redis.conf # 一定要记得把 redis.conf 先放在这个位置哦
      - ./data/redis:/data
    command: redis-server /etc/redis/redis.conf
    # ports:
    #  - 6379:6379 # 如果有必要请取消注释本行

🧰 个人技巧

# 别名:更清晰地列出容器
alias pdocker='docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Command}}"'

# 清理(破坏性:删除未使用的镜像/网络/缓存与匿名卷,不可恢复)
docker system prune -a
docker volume prune

attach 会话

docker attach 会话中按 Ctrl+C 可能终止容器;改用 Ctrl+P Ctrl+Q 可脱离容器并保持运行。