1. Docker Hub 用户注册
到官网注册账号:https://hub.docker.com/
2. 在本地服务器登录docker
docker login
#Log in with your Docker ID or email address to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com/ to create one.
#You can log in with your password or a Personal Access Token (PAT). Using a limited-scope PAT grants better security and is required for organizations using SSO. Learn more at https://docs.docker.com/go/access-tokens/
Username: xxx (你的用户名)
Password: (你的用户密码)
#WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
#Configure a credential helper to remove this warning. See
#https://docs.docker.com/engine/reference/commandline/login/#credentials-store
#Login Succeeded
4. 查看容器
docker ps
5. 将容器commit成镜像
# 用法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# CONTAINER 是你想要转换的容器的 ID 或名称。
# REPOSITORY 是你为新创建的镜像设定的仓库名称。
# TAG 是镜像的标签,通常用于版本控制,默认为 latest。
docker commit -m 'wp_mysql 备份 20240423' wp_mysql bluebro/wp_mysql:v1
# 返回结果为: sha256:c3509fccab34ddcc0cf2c812a8fca533547d5501f771ad27373c69dbdf381db9
6. tag为镜像创建新的标签
# 用法
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# SOURCE_IMAGE 是源镜像的名称。
# TAG 是可选的,如果不指定,默认为 latest。
# TARGET_IMAGE 是目标镜像的名称,可以是同一个镜像的不同标签,或是推送到不同仓库的名称。
# TAG 在目标镜像中也是可选的,同样默认为 latest。
7. 查看镜像
docker images
8. push到Docker Hub
# 用法
docker push username/nginxrepo:v1
9. Docker Hub效果
10. 定期推送脚本
如果想将容器定期推送到 Docker Hub,防失联的话,参考以下代码
#!/bin/bash
# 配置变量
USERNAME="xxx"
REPOSITORY="xxx_repository"
DATE_TAG=$(date +%Y%m%d)
# 定义要处理的容器和对应的镜像名
declare -A containers
containers=(["nginx"]="nginx" ["mysql"]="mysql" ["wordpress"]="wordpress")
# 登录 Docker Hub
echo "Logging into Docker Hub..."
docker login # 确保事先配置好了 Docker 的认证信息,或在这里提供用户名和密码
# 循环遍历容器,处理镜像
for container in "${!containers[@]}"; do
image_base="$USERNAME/$REPOSITORY:${containers[$container]}"
image_latest="${image_base}-latest"
image_date_tag="${image_base}-$DATE_TAG"
echo "Processing container: $container..."
# 获取本地镜像ID
image_id=$(docker images -q $image_latest)
# 检查是否获取到镜像ID
if [ ! -z "$image_id" ]; then
echo "Removing local image: $image_latest"
docker rmi $image_latest
else
echo "No local image to remove: $image_latest"
fi
# 从 Docker Hub 拉取最新的镜像
if docker pull $image_latest; then
echo "Retagging $image_latest to $image_date_tag"
docker tag $image_latest $image_date_tag
docker push $image_date_tag
docker rmi $image_latest $image_date_tag # 清理拉取和重标记的镜像
fi
# 提交容器为最新镜像并推送
echo "Committing container $container to $image_latest"
docker commit $container $image_latest
docker push $image_latest
done
echo "Images processing complete."
Comments | NOTHING