如何通过Docker Compose将多镜像及网站运行环境推送至Docker Hub?
把PHP+Apache+MySQL+PhpMyAdmin环境推送到Docker Hub的完整步骤
我来一步步帮你搞定把这个网站运行环境推送到Docker Hub的事儿~
1. 先做好Docker Hub的准备工作
- 首先得有个Docker Hub账号,没的话先去注册一个(直接搜Docker Hub官网就能完成注册)
- 打开本地终端,执行登录命令:
docker login,然后输入你的Docker Hub用户名和密码完成登录
2. 给你的自定义PHP-Apache镜像打标签
你的环境里只有php服务是基于本地Dockerfile构建的自定义镜像,MySQL和PhpMyAdmin用的是官方现成镜像,不需要你推送。我们需要给这个自定义镜像打上符合Docker Hub要求的标签,格式是{你的Docker Hub用户名}/{镜像名称}:{版本标签},比如你的用户名是sonumittal,可以把镜像命名为php-apache-mysqli,标签用latest或者7.4都可以。
有两种方式来打标签:
方法一:修改docker-compose.yml自动打标签
直接在你的docker-compose.yml里的php服务下添加image字段,这样构建时会自动给镜像打上正确的标签:
services: php: build: context: . dockerfile: Dockerfile image: sonumittal/php-apache-mysqli:latest # 替换成你自己的Docker Hub用户名和镜像名 ports: - 80:80 volumes: - ./src:/var/www/html/ # 其他服务(db、phpmyadmin)保持不变
然后执行构建命令:docker-compose build php
方法二:手动构建并打标签
先单独构建镜像:
docker build -t php-apache-mysqli .
然后给镜像打上Docker Hub格式的标签:
docker tag php-apache-mysqli sonumittal/php-apache-mysqli:latest
3. 推送自定义镜像到Docker Hub
标签打好之后,执行推送命令就可以把镜像传到Docker Hub上了:
docker push sonumittal/php-apache-mysqli:latest
(记得把命令里的标签换成你自己的)
4. 分享完整的运行环境
因为MySQL和PhpMyAdmin用的是官方公开镜像,其他人可以直接拉取,不需要你推送。要让别人能复现你的整个环境,你需要:
- 把修改后的
docker-compose.yml、Dockerfile一起分享(比如上传到代码仓库或者直接发给对方) - 注意:目前你的网站代码是通过volume挂载的,不会包含在Docker镜像里。如果想把代码打包到镜像里一起推送,需要修改你的Dockerfile,加上这一行:
这样重新构建的镜像就会包含你的网站代码,别人拉取镜像后不需要挂载volume就能直接运行。不过开发阶段还是推荐用volume挂载,方便实时修改代码;如果是生产环境或者要分享完整可运行的镜像,就用这种复制代码的方式。COPY ./src /var/www/html/
额外小提示
- 如果你后续修改了镜像内容(比如更新PHP扩展、修改配置),重新构建后记得重新打标签(可以更新
latest标签,或者用版本号标签比如v1.0、v1.1),然后重新推送 - 推送完成后,其他人只需要拿到你的
docker-compose.yml,执行docker-compose up -d就能拉取所有镜像并启动整个环境(如果你的镜像设为私有,对方需要先登录你的Docker Hub账号)
内容的提问来源于stack exchange,提问作者Sonu Mittal
相关产品推荐
相关产品推荐

