背景简介
由于每次手动下载和推送 Docker 镜像文件至私有服务器比较麻烦,因此准备一个脚本文件自动完成操作。
前置信息
- expect 5.45.4
- 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
以上便是本文的全部内容,感谢您的阅读,如遇到任何问题,欢迎在评论区留言讨论。