如何不发布至Docker Hub部署Docker应用?无需注册及使用Swarm
不用Docker Hub、Swarm的Docker部署方案 + Stack逻辑学习指南
嘿,完全懂你的顾虑——不想被公共仓库绑定,闭源代码也绝对不能随便丢出去,还要搞懂Stack的工作原理对吧?我给你拆解成几个部分来解决:
一、绕开Docker Hub的镜像分发方法
1. 本地镜像导出/导入(适合少量机器)
这是最直接的方式,不用任何仓库,把镜像打包成文件拷贝到目标机器就行:
- 本地导出镜像:
docker save -o my-app-image.tar your-app-image:latest - 把
my-app-image.tar通过SCP、U盘等方式传到目标机器,然后加载镜像:
这样目标机器就有你的应用镜像了,直接运行容器即可。docker load -i my-app-image.tar
2. 搭建自己的私有镜像仓库(适合多机器/长期部署)
自己搭个私有仓库完全可控,闭源镜像只会存在你自己的服务器上,安全得很:
- 启动私有仓库容器(用官方的registry镜像):
docker run -d -p 5000:5000 --restart always --name private-registry registry:2 - 给本地镜像打私有仓库的标签(替换成你的仓库IP/域名):
docker tag your-app-image:latest 192.168.1.100:5000/your-app-image:latest - 推送到私有仓库:
docker push 192.168.1.100:5000/your-app-image:latest - 目标机器拉取镜像:
👉 注意:如果你的私有仓库是HTTP协议(默认是),需要在目标机器的Docker配置里允许不安全仓库:编辑docker pull 192.168.1.100:5000/your-app-image:latest/etc/docker/daemon.json,添加:
然后重启Docker服务:{ "insecure-registries": ["192.168.1.100:5000"] }systemctl restart docker
二、关于Stack部分的学习(不用Swarm也能搞懂逻辑)
Stack本质是Swarm集群上的编排工具,它的配置文件(docker-compose.yml)语法和Docker Compose几乎一致,只是多了deploy这类Swarm专属字段。如果你不想用Swarm组件,其实可以通过以下方式学习:
- 单节点Swarm模拟:虽然你不想用Swarm,但单节点Swarm完全可以用来测试Stack的工作逻辑,不会强制你建多节点集群。初始化单节点Swarm:
然后用docker swarm init --advertise-addr 127.0.0.1docker stack deploy -c docker-compose.yml my-stack来部署,部署后可以用docker stack ps my-stack查看状态,这样就能直观理解Stack如何管理服务了。测试完后可以用docker swarm leave --force关闭Swarm。 - 用Docker Compose替代学习:因为Stack的核心编排逻辑(比如服务依赖、端口映射、环境变量)和Compose几乎一样,你可以先写Compose文件,然后把里面的
deploy字段加上,就能模拟Stack的配置逻辑——毕竟Stack就是Compose在Swarm上的扩展。
三、解决你之前"应用仅部署在本地"的问题
你按教程操作后应用只在本地,是因为Stack默认部署在Swarm集群里,如果你没有把其他机器加入Swarm集群,自然只会在本地节点运行。如果不想用Swarm,那可以:
- 用前面说的私有仓库/镜像导出导入,把镜像传到目标机器;
- 把你的
docker-compose.yml(或者Stack的配置文件,去掉Swarm专属字段)拷贝到目标机器; - 目标机器上运行
docker-compose up -d,就能完成部署了。
这样既不用Docker Hub,不用Swarm,闭源代码也完全在你自己的掌控范围内,还能搞懂Stack的工作原理~
内容的提问来源于stack exchange,提问作者Chloe




