0.开篇词
之前在rocky8 linux服务器上部署了harbor,今天就来尝试一下制作镜像,并试一下镜像的上传下载。
1.准备工作
在制作镜像并测试镜像的上传下载之前,需要以下准备工作:
(1)rocky8 Linux服务器;
(2)正常运行的docker服务;
(3)正常运行的harbor服务;
(4)编译好的golang文件。
2.准备golang编译文件
先来写一个简单的go web服务,代码付下:
package main
import (
"fmt"
"log"
"net/http"
)
func sayHello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello the cruel world")
}
func main() {
http.HandleFunc("/", sayHello)
log.Fatalln(http.ListenAndServe(":8090", nil))
}
这个服务就是请求服务器的8090端口,响应一个字符串,我们将其命名为hello.go。
可以看到编译后的文件为可执行文件hello。
3.制作镜像
3.1 编写dockerfile文件
我们知道想要制作本地镜像,需要一个dockerfile文件,这里我们就编写一个简单的dockerfile文件,内容如下:
FROM docker.1panel.live/library/golang:1.16.6-alpine3.14
ADD . /app
WORKDIR /app
CMD ["/app/hello"]
后面会专门出文章说明如何编写一个dockerfile文件,这里就不做详细说明了。
3.2 制作镜像
基于Dockerfile文件就可以创建镜像了,命令如下:
docker build -t hello:v1 .
注意:最后面有一个“.”,这个表示Dockerfile在当前路径下面。
有以上输出,说明镜像制作完成,镜像名称是hello,tag是v1。
docker images |grep hello
OK,到这里我们的镜像就制作完成了。
4.上传镜像
4.1 登录镜像仓库
在登录harbor仓库之前,我们需要修改一下docker配置文件,添加以下内容:
cat /etc/docker/daemon.json
"insecure-registries":["192.168.xxx.xxx:80"]
该配置项的含义是可信任的镜像仓库。
修改好配置之后记得重启docker,命令如下:
systemctl restart docker
之前我们已经部署好了harbor,在上传镜像之前需要登录,命令如下:
docker login harbor_host:80
输入正确的用户名和密码,会显示登录成功。
4.2 上传镜像
我们先看下我们之前创建的镜像,命令如下:
docker images |grep hello
在harbor上创建一个images项目,用来管理我们上传的镜像:
(1)重新给镜像打标签:
docker tag hello:v1 192.168.xxx.xxx:80/images/hello:v1
(2)上传镜像到harbor:
docker push 192.168.xxx.xxx:80/images/hello:v1
上传成功会显示镜像的版本和hash值。
最后,我们到harbor上检查下镜像是否上传成功:
可以对比一下两个镜像的hash值,可以看到前面8位是一样的。