You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在企业内部私有Docker仓库发布容器并实现自动更新?

Hey there! 作为Docker新手,你完全不用一开始就纠结K8s或者Swarm这些复杂工具——咱们先从最基础、最适合小团队的方案入手,一步步实现你要的目标:内部镜像打包、私有仓库存储,还有简易的容器自动更新。

第一步:编写Dockerfile打包你的应用

首先得把你的Django应用和脚本分别打包成Docker镜像,这是容器化的基础。

Django Web应用的Dockerfile示例

选个轻量的Python基础镜像,然后把你的应用依赖、代码都打包进去:

# 使用官方Python基础镜像(slim版本更小巧)
FROM python:3.11-slim

# 设置容器内的工作目录
WORKDIR /app

# 先复制依赖文件,利用Docker缓存优化构建速度
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制Django应用的所有代码
COPY . .

# 暴露Django服务的端口(比如默认的8000,如果你用gunicorn也可以改成对应的端口)
EXPOSE 8000

# 启动生产环境的Django服务(推荐用gunicorn替代自带的runserver)
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "your_project_name.wsgi:application"]

构建镜像命令(记得替换成你的镜像名和版本):

docker build -t internal-django-app:v1 .

脚本类应用的Dockerfile示例

如果是定时脚本或者一次性执行的脚本,同样用Python镜像打包,调整启动命令即可:

FROM python:3.11-slim

WORKDIR /script

# 安装脚本依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制脚本文件
COPY your_script.py .

# 脚本启动命令(如果是定时任务,可以后续结合cron或者Docker的调度工具)
CMD ["python", "your_script.py"]

构建命令:

docker build -t internal-script-app:v1 .
第二步:搭建内部私有Docker仓库

不用找复杂的第三方工具,官方的registry镜像就能快速搭建一个轻量的私有仓库,完全满足内部使用需求。

  • 启动私有仓库容器:
docker run -d -p 5000:5000 --name internal-registry --restart always registry:2

这条命令会启动一个监听5000端口的仓库容器,并且设置开机自启。

  • 给本地镜像打私有仓库标签:
    要把镜像推送到私有仓库,得先给镜像加上仓库地址的前缀(比如仓库所在机器的IP是192.168.1.100):
# 给Django镜像打标签
docker tag internal-django-app:v1 192.168.1.100:5000/internal-django-app:v1
# 给脚本镜像打标签
docker tag internal-script-app:v1 192.168.1.100:5000/internal-script-app:v1
  • 推送镜像到私有仓库:
docker push 192.168.1.100:5000/internal-django-app:v1
docker push 192.168.1.100:5000/internal-script-app:v1

如果其他机器要拉取这个仓库的镜像,需要在那些机器的Docker配置里添加私有仓库为“可信仓库”:编辑/etc/docker/daemon.json,添加"insecure-registries": ["192.168.1.100:5000"],然后重启Docker服务即可。

第三步:部署容器到内部机器

从私有仓库拉取镜像并启动容器,命令很简单:

# 启动Django应用容器,映射端口到宿主机80,设置开机自启
docker run -d -p 80:8000 --name django-app --restart always 192.168.1.100:5000/internal-django-app:v1

# 启动脚本应用容器
docker run -d --name script-app --restart always 192.168.1.100:5000/internal-script-app:v1
第四步:实现简易的容器自动更新

对于小规模部署,用watchtower工具就足够实现自动更新——它会自动监听私有仓库的镜像版本变化,拉取新镜像并重启容器,完全不用手动操作。

推荐用docker-compose来管理你的应用容器和watchtower,配置更清晰:
创建docker-compose.yml文件:

version: '3'
services:
  django-app:
    image: 192.168.1.100:5000/internal-django-app:v1
    ports:
      - "80:8000"
    restart: always

  script-app:
    image: 192.168.1.100:5000/internal-script-app:v1
    restart: always

  watchtower:
    image: containrrr/watchtower
    volumes:
      # 挂载Docker套接字,让watchtower能管理本地容器
      - /var/run/docker.sock:/var/run/docker.sock
    # 设置每天检查一次镜像更新(单位是秒,86400=24小时,可按需调整)
    # --cleanup参数会自动清理旧的镜像,节省磁盘空间
    command: --interval 86400 --cleanup

启动所有服务:

docker-compose up -d

之后,只要你更新了私有仓库里的镜像(比如推送v2版本),watchtower就会自动检测到,然后拉取新镜像、替换旧容器。如果想手动触发一次更新,也可以运行:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once django-app script-app
为什么不一开始用K8s/Swarm?

这些编排工具确实功能强大,但学习成本很高,对于当前小规模的内部部署来说,Docker Registry + docker-compose + watchtower的组合已经完全够用——操作简单、维护成本低,能快速实现你要的所有需求。等后续你的应用规模变大、需要更复杂的功能(比如负载均衡、滚动更新、服务发现)时,再考虑迁移到K8s也完全来得及。

内容的提问来源于stack exchange,提问作者Bring Coffee Bring Beer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:12:56