文档:

https://blog.csdn.net/gmaaa123/article/details/134164838

https://blog.csdn.net/wangooo/article/details/133127774

https://blog.csdn.net/wangooo/article/details/109148640

https://blog.csdn.net/lejustdoit/article/details/130275792

https://zhuanlan.zhihu.com/p/667075764

https://cloud.tencent.com/developer/article/2133294

编辑 Dockerfile:

vim Dockerfile

内容如下:

 1FROM openjdk:8-jdk-alpine
 2
 3 # 软件源修改为国内清华镜像站
 4RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
 5
 6# 解决时差8小时问题
 7ENV TZ=Asia/Shanghai
 8RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
 9
10# 解决字体问题
11RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*

构建镜像

1docker build -f Dockerfile -t openjdk:8-jdk-alpine-timezone-font .

注意:

  • -t 后面是镜像的名字和标签

  • 最后面有一个点,表示Dockerfile所在目录

发布镜像到 Docker Hub

登录到 Docker Hub 账号:

1[zhangcong@master test]$ docker login

然后根据提示输入正确的用户名和密码完成登录过程。

为镜像添加标签。

每个镜像都应该被分配一个唯一的标签,这样才能区分不同版本或者不同功能的镜像。

使用 docker tag 命令为镜像添加标签:

docker tag <image_id> username/repository:tag

其中 <image_id> 是原始镜像的 ID,username 是你的 Docker Hub 用户名,repository 是仓库名称,tag 则是自定义的标签名称。

例如:

1[zhangcong@master test]$ docker tag e9125e1053ec conggege325/public-repository:8-jdk-alpine-timezone-font

通过运行 docker push 命令将镜像上传到 Docker Hub:

docker push username/repository:tag

例如:

1[zhangcong@master test]$ docker push conggege325/public-repository:8-jdk-alpine-timezone-font

等待上传过程完成,此时镜像就会被存储在 Docker Hub 服务器上了。

阿里云Docker仓库的常用操作

1. 登录阿里云Docker Registry

1$ docker login --username=iweiyi10@163.com registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

$ docker pull registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:[镜像版本号]

3. 将镜像推送到Registry

$ docker login –username=iweiyi10@163.com registry.cn-hangzhou.aliyuncs.com

$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:[镜像版本号]

$ docker push registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

导入导出镜像

首先使用 docker images 查看本机镜像,找到他的镜像id

导入/导出方式有两种方式,两种方式不可以混用,否则虽然导入不提示错误,但是启动容器时会提示失败,存在导入的镜像环境变量丢失等问题

方法一(推荐)

使用 save 命令,通过镜像id导出镜像到宿主机:

docker save -o [镜像文件名] [REPOSITORY]:[TAG]

例如:

1$ docker save -o 8-jdk-alpine-timezone-font.tar openjdk:8-jdk-alpine-timezone-font

然后将导出的镜像文件上传到网络不好的主机上,执行 load 命令进行镜像导入:

docker load < [镜像文件名]

例如:

1$ docker load < 8-jdk-alpine-timezone-font.tar

方法二

我们还可以使用 export 和 import 命令,进行导入/导出操作,导出命令如下:

1$ docker export eb516548c180 > coredns.tar

eb516548c180表示容器id

我们将上述 coredns.tar 镜像在另一个网络不好的节点进行导入,命令如下(二者选其一即可):

1$ docker import /usr/local/coredns.tar
2$ cat coredns.tar | docker import - k8s.gcr.io/coredns:1.3.1(镜像名自己定义)

docker导出本地镜像,然后导入到k8s

 1删除docker中旧的镜像(如果有的话):
 2docker rmi registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:demo
 3
 4在docker中构建镜像:
 5docker build -f Dockerfile -t registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:demo .
 6
 7从docker中导出:
 8docker save -o demo.tar registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:demo
 9
10删除k8s中旧的镜像(如果有的话):
11sudo crictl rmi registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:demo
12
13导入到k8s中:
14sudo ctr -n k8s.io image import demo.tar registry.cn-hangzhou.aliyuncs.com/conggege325/pri-repository:demo