掏出魔法传送门和镜像宝箱)小魔法师们!今天我们要学习镜像传送魔法——把本地制作的魔法镜像发布到私有魔法库!这样就能安全地分享我们的独家魔法了!🔮✨
🧙♂️ 第一章:为什么需要私有魔法库?
想象一下:你发明了超厉害的”熊猫奶茶魔法”,但:
-
🚫 不想公开到Docker Hub(公共魔法集市)
-
🔒 只想给你的魔法小队使用
-
🏰 在公司/学校内部共享
这时候就需要搭建私有魔法库(Private Registry)!
📦 第二章:搭建私有魔法库
方法一:用Docker官方Registry镜像(最简单)
# 启动私有Registry容器(使用特定版本标签)
docker run -d \
-p 5000:5000 \
--name private-registry \
--restart always \
registry:2.8.2
# 或者使用最新稳定版本
docker run -d \
-p 5000:5000 \
--name private-registry \
--restart always \
registry:latest
# 现在私有库就在 http://localhost:5000 运行啦!
方法二:带认证的安全魔法库
# 1. 创建认证目录
mkdir -p auth
# 2.使用httpd镜像生成密码文件(使用正确的命令)
docker run --rm --entrypoint htpasswd httpd:2.4 \
-Bbn admin securepassword123 > auth/htpasswd
# 3. 启动带认证的Registry
docker run -d \
-p 5000:5000 \
--name private-registry \
-v $(pwd)/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry:2.8.2
# 4. 测试登录
docker login localhost:5000
# 用户名: admin
# 密码: securepassword123
💡 参数解释
-
-B
:使用bcrypt加密(更安全) -
-b
:批量模式(从命令行读取密码) -
-n
:不加密密码(输出到标准输出) -
admin
:用户名 -
securepassword123
:密码
🐼 第三章:制作本地魔法镜像
我们先做个简单的可爱的熊猫魔法镜像:
1. 创建Dockerfile:
FROM alpine:3.18
CMD echo "🐼 Hello from $(hostname)! Magic milk tea is ready!"
2. 构建镜像:
docker build -t panda-tea:v1.0 .
3. 测试运行:
docker run panda-tea:v1.0
# 输出:🐼 Hello from abc123! Magic milk tea is ready!
📤 第四章:标记镜像(打上私有库地址)
关键步骤! 镜像名称必须包含私有库地址:
# 给镜像打上私有库标签
docker tag panda-tea:v1.0 localhost:5000/panda-tea:v1.0
# 如果是远程私有库,使用IP或域名
docker tag panda-tea:v1.0 192.168.1.100:5000/panda-tea:v1.0
docker tag panda-tea:v1.0 registry.example.com:5000/panda-tea:v1.0
为什么?
就像寄快递要写地址一样!localhost:5000/
告诉Docker:”这个镜像要送到本地5000端口的私有库”
🚀 第五章:推送镜像到私有库
# 推送到私有Registry
docker push localhost:5000/panda-tea:v1.0
如果看到类似这样的输出,就成功了!
The push refers to repository [localhost:5000/panda-tea]
a1b2c3d4: Pushed
v1.0: digest: sha256:... size: 527
📥 第六章:从私有库拉取镜像
其他魔法师可以这样获取你的镜像:
# 从私有库拉取镜像
docker pull localhost:5000/panda-tea:v1.0
# 运行测试
docker run localhost:5000/panda-tea:v1.0
🔐 第七章:远程私有库和认证
如果私有库在别的机器上:
1. 首先配置Docker允许非安全Registry(允许不安全注册中心)
# 编辑Docker配置文件
sudo nano /etc/docker/daemon.json
# 添加内容:
{
"insecure-registries": ["192.168.1.100:5000", "registry.example.com:5000"]
}
# 重启Docker服务
sudo systemctl restart docker
2. 登录认证(如果设置了密码)
# 登录到私有Registry
docker login 192.168.1.100:5000
# 输入用户名和密码
Username: admin
Password: password123
3. 推送和拉取
# 标记镜像
docker tag panda-tea:v1.0 192.168.1.100:5000/panda-tea:v1.0
# 推送到远程Registry
docker push 192.168.1.100:5000/panda-tea:v1.0
# 从其他机器拉取
docker pull 192.168.1.100:5000/panda-tea:v1.0
🎯 第八章:实战完整流程
假设我们在3台机器上共享镜像:
在机器A(私有库服务器):
# 启动私有Registry
docker run -d -p 5000:5000 --name registry registry:2.8.2
# 配置允许非安全Registry
echo '{"insecure-registries": ["server-a-ip:5000"]}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker
在机器B(开发机):
# 构建镜像
docker build -t my-app:v2.0 .
# 标记并推送
docker tag my-app:v2.0 server-a-ip:5000/my-app:v2.0
docker push server-a-ip:5000/my-app:v2.0
在机器C(生产机):
# 拉取并运行
docker pull server-a-ip:5000/my-app:v2.0
docker run -d server-a-ip:5000/my-app:v2.0
💡 第九章:高级技巧
查看私有库中的镜像:
# 查看所有镜像
curl -X GET http://localhost:5000/v2/_catalog
# 查看特定镜像的标签列表
curl -X GET http://localhost:5000/v2/panda-tea/tags/list
删除私有库中的镜像(谨慎操作!):
# 启用垃圾回收功能
docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
🎩 魔法总结:
-
搭建私有库:
docker run -d -p 5000:5000 registry:2
-
标记镜像:
docker tag 镜像名 私有库地址/镜像名:标签
-
推送镜像:
docker push 私有库地址/镜像名:标签
-
拉取镜像:
docker pull 私有库地址/镜像名:标签
(魔法传送门发出耀眼蓝光)✨现在你学会了镜像传送魔法!可以在团队内部安全地分享你的魔法镜像了!
记住:私有库就像专属魔法图书馆,只对信任的人开放! 快去建立你们的魔法知识宝库吧!📚🐋