Henry
发布于 2025-10-12 / 3 阅读
0
0

expect - 自动下载和推送 Docker 镜像至私有服务器

背景简介

由于每次手动下载和推送 Docker 镜像文件至私有服务器比较麻烦,因此准备一个脚本文件自动完成操作。

前置信息

  1. expect 5.45.4
  2. docker 28.2.2

详细步骤

第一步: 准备脚本文件

  • 例如: tool-download-push-docker-image.sh
#!/usr/bin/expect -f


puts "$argv0 executing..."

# checking parameters 
if { [llength $argv] != 2 } {
    puts "\nPlease executing with 2 parameters"
    puts "\nSample: $argv0 docker_image_name docker_repo_name"
    exit 1
}

#  get parameters
set docker_image_name [lindex $argv 0]
set docker_repo_name [lindex $argv 1]

# start download docker image
puts "Start download docker image $docker_image_name"

spawn docker pull $docker_image_name
expect eof
set download_status [lindex [wait] 3] 
if { $download_status == 0 } {
    puts "Success: Downloading $docker_image_name success"
} else {
    puts "Error: Downloading $docker_image_name fail"
    exit 1
}

# tag docker image
spawn docker tag $docker_image_name "$docker_repo_name/$docker_image_name"
expect eof
set tag_status [lindex [wait] 3]
if { $tag_status == 0 } {
    puts "Success: Tag docker image to $docker_repo_name/$docker_image_name success"
} else {
    puts "Error: Tag docker image to $docker_repo_name/$docker_image_name fail"
    exit 1
}

# push docker image
spawn docker push "$docker_repo_name/$docker_image_name"
expect eof
set push_status [lindex [wait] 3]
if { $push_status == 0 } {
    puts "Success: Push $docker_repo_name/$docker_image_name success"
} else {
    puts "Error: Push $docker_repo_name/$docker_image_name fail"
    exit 1
}
  • 添加可执行权限
$ chmod +x tool-download-push-docker-image.sh

第二步: 执行脚本文件

$ ./tool-download-push-docker-image.sh nginx:1.28.0 private-docker-repo:20706
./tool-download-push-docker-image.sh executing...
Start download docker image nginx:1.28.0
spawn docker pull nginx:1.28.0

	****** 
Success: Downloading nginx:1.28.0 success
spawn docker tag nginx:1.28.0 private-docker-repo:20706/nginx:1.28.0
Success: Tag docker image to private-docker-repo:20706/nginx:1.28.0 success
spawn docker push private-docker-repo:20706/nginx:1.28.0

	******
Success: Push private-docker-repo:20706/nginx:1.28.0 success

以上便是本文的全部内容,感谢您的阅读,如遇到任何问题,欢迎在评论区留言讨论。



评论