k8s手动拉取docker镜像的方法示例

 更新时间:2024年02月02日 11:20:06   作者:WiFi大拿  
docker是一种便捷的容器化解决方案,它可以通过拉取镜像的方式轻松地部署和管理应用程序,本文主要介绍了k8s手动拉取docker镜像的方法示例,感兴趣的可以了解一下

首先我们需要安装 docker 来打包镜像,如果你本地已经安装了 docker

推荐安装方法

目前使用 Docker Desktop 来安装 docker 还是最简单的方案,打开官网下载对应你电脑操作系统的包即可

k8s 怎么手动拉取docker镜像_docker

当安装完成后,可以通过 docker run hello-world 来快速校验是否安装成功!

安装 minikube

我们还需要搭建一套 k8s 本地集群 (使用云厂商或者其它 k8s 集群都可) 。本地搭建 k8s 集群的方式推荐使用 minikube。

可以根据 minikube 快速安装 来进行下载安装,这里简单列举 MacOS 的安装方式,Linux & Windows 操作系统可以参考官方文档 快速安装。

brew install minikube

启动 minikube

因为 minikube 支持很多容器和虚拟化技术 (Docker, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation),也是问题出现比较多的地方,所以这里还是稍微说明一下。

如果你使用 docker 的方案是上面推荐的 Docker Desktop ,那么你以下面的命令启动 minikube 即可,需要耐心等待下载依赖。

minikube start --vm-driver docker --container-runtime=docker

启动完成后,运行 minikube status 查看当前状态确定是否启动成功!

如果你本地只有 Docker CLI,判断标准如果执行 docker ps 等命令,返回错误

 brew install hyperkit
minikube start --vm-driver hyperkit --container-runtime=docker

# Tell Docker CLI to talk to minikube's VM
eval $(minikube docker-env)

# Save IP to a hostname
echo "`minikube ip` docker.local" | sudo tee -a /etc/hosts > /dev/null

# Test
docker run hello-world

minikube 命令速查

minikube stop 不会删除任何数据,只是停止 VM 和 k8s 集群。

minikube delete 删除所有 minikube 启动后的数据。

minikube ip 查看集群和 docker enginer 运行的 IP 地址。

minikube pause 暂停当前的资源和 k8s 集群

minikube status 查看当前集群状态

安装 kubectl

这一步是可选的,如果不安装的话,后续所有 kubectl 相关的命令,使用 minikube kubectl 命令替代即可。

如果你不想使用 minikube kubectl 或者配置相关环境变量来进行下面的教学的话,可以考虑直接安装 kubectl。

brew install kubectl

注册 docker hub 账号登录

因为默认 minikube 使用的镜像地址是 DockerHub,所以我们还需要在 DockerHub 账号,并且使用 login 命令登录账号。

docker login

k8s 怎么手动拉取docker镜像_docker_02

Container

我们的旅程从一段代码开始。新建一个 main.go 文件,复制下面的代码到文件中。

package main

import (
	"io"
	"net/http"
)

func hello(w http.ResponseWriter, r *http.Request) {
	io.WriteString(w, "[v1] Hello, Kubernetes!")
}

func main() {
	http.HandleFunc("/", hello)
	http.ListenAndServe(":3000", nil)
}

上面是一串用 Go 写的代码,代码逻辑非常的简单,首先启动 HTTP 服务器,监听 3000 端口,当访问路由 /的时候 返回字符串 [v1] Hello, Kubernetes!。

在以前,如果你想将这段代码运行起来并测试一下。你首先需要懂得如何下载 golang 的安装包进行安装,接着需要懂得 golang module 的基本使用,最后还需要了解 golang 的编译和运行命令,才能将该代码运行起来。甚至在过程中,可能会因为环境变量问题、操作系统问题、处理器架构等问题导致编译或运行失败。

但是通过 Container (容器) 技术,只需要上面的代码,附带着对应的容器 Dockerfile 文件,那么你就不需要 golang 的任何知识,也能将代码顺利运行起来。

Container (容器) 是一种沙盒技术。它是基于 Linux 中 Namespace / Cgroups / chroot 等技术组合而成,更多技术细节可以参照这个视频 如何自己实现一个容器。

下面就是 Go 代码对应的 Dockerfile,简单的方案是直接使用 golang 的 alpine 镜像来打包,但是因为我们后续练习需要频繁的推送镜像到 DockerHub 和拉取镜像到 k8s 集群中,为了优化网络速度,我们选择先在 golang:1.16-buster 中将上述 Go 代码编译成二进制文件,再将二进制文件复制到 base-debian10 镜像中运行 (Dockerfile 不理解没有关系,不影响后续学习)。

这样我们可以将 300MB 大小的镜像变成只有 20MB 的镜像,甚至压缩上传到 DockerHub 后大小只有 10MB!

# Dockerfile
FROM golang:1.16-buster AS builder
RUN mkdir /src
ADD . /src
WORKDIR /src

RUN go env -w GO111MODULE=auto
RUN go build -o main .

FROM gcr.io/distroless/base-debian10

WORKDIR /

COPY --from=builder /src/main /main
EXPOSE 3000
ENTRYPOINT ["/main"]

需要注意 main.go 文件需要和 Dockerfile 文件在同一个目录下,执行下方 docker build 命令,第一次需要耐心等待拉取基础镜像。并且需要注意将命令中 guangzhengli 替换成自己的 DockerHub 注册的账号名称。 这样我们后续可以推送镜像到自己注册的 DockerHub 仓库当中。

docker build . -t guangzhengli/hellok8s:v1
# Step 1/11 : FROM golang:1.16-buster AS builder
# ...
# ...
# Step 11/11 : ENTRYPOINT ["/main"]
# Successfully tagged guangzhengli/hellok8s:v1


docker images
# guangzhengli/hellok8s          v1         f956e8cf7d18   8 days ago      25.4MB

docker build 命令完成后我们可以通过 docker images 命令查看镜像是否 build 成功,最后我们执行 docker run 命令将容器启动, -p 指定 3000 作为端口,-d 指定容器后台运行。

docker run -p 3000:3000 --name hellok8s -d guangzhengli/hellok8s:v1

运行成功后,可以通过浏览器或者 curl 来访问 http://127.0.0.1:3000 , 查看是否成功返回字符串 [v1] Hello, Kubernetes!。

这里因为我本地只用 Docker CLI,而 docker runtime 是使用 minikube,所以我需要先调用 minikube ip 来返回 minikube IP 地址,例如返回了 192.168.59.100,所以我需要访问 http://192.168.59.100:3000 来判断是否成功返回字符串 [v1] Hello, Kubernetes!。

最后确认没有问题,使用 docker push 将镜像上传到远程的 DockerHub 仓库当中,这样可以供他人下载使用,也方便后续 Minikube 下载镜像使用。 需要注意将 guangzhengli 替换成自己的 DockerHub 账号名称。

docker push guangzhengli/hellok8s:v1

经过这一节的练习,有没有对容器的强大有一个初步的认识呢?可以想象当你想部署一个更复杂的服务时,例如 Nginx,MySQL,Redis。你只需要到 DockerHub 搜索 中搜索对应的镜像,通过 docker pull 下载镜像,docker run 启动服务即可!而无需关心依赖和各种配置

到此这篇关于k8s手动拉取docker镜像的方法示例的文章就介绍到这了,更多相关k8s手动拉取docker镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Docker部署Dashdot服务器仪表盘的步骤

    使用Docker部署Dashdot服务器仪表盘的步骤

    Dashdot是一款简单、实用的开源服务器仪表盘,设计时考虑到了玻璃形态,它旨在用于较小的 VPS 和私人服务器,这篇文章主要介绍了使用Docker部署Dashdot服务器仪表盘,需要的朋友可以参考下
    2022-12-12
  • Docker login和logout的使用

    Docker login和logout的使用

    本文主要介绍了Docker login和logout的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Docker数据管理与网络通信的使用

    Docker数据管理与网络通信的使用

    这篇文章主要介绍了Docker数据管理与网络通信的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Docker搭建Redis Cluster集群的教程详解

    Docker搭建Redis Cluster集群的教程详解

    这篇文章主要为大家详细介绍了Docker搭建Redis Cluster集群的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的可以参考下
    2024-03-03
  • docker 安装Consul的教程 (最新版2023)

    docker 安装Consul的教程 (最新版2023)

    ​consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务,内置了服务注册与 发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其 他工具,这篇文章主要介绍了最新版2023 docker 安装Consul,需要的朋友可以参考下
    2023-12-12
  • 使用Docker搭建MySQL主从数据库的方法步骤

    使用Docker搭建MySQL主从数据库的方法步骤

    本文主要介绍了使用Docker搭建MySQL主从数据库的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • docker-desktop启动k8s的详细方法

    docker-desktop启动k8s的详细方法

    这篇文章主要介绍了docker-desktop启动k8s,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 查看docker镜像中文件的方法

    查看docker镜像中文件的方法

    在本篇文章里小编给各位分享的是关于查看docker镜像中文件的方法,有兴趣的朋友们可以参考学习下。
    2020-03-03
  • Navicat 连接服务器端中的docker数据库的方法

    Navicat 连接服务器端中的docker数据库的方法

    这篇文章主要介绍了Navicat 连接服务器端中的docker数据库,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Docker使用的个人学习总结

    Docker使用的个人学习总结

    最近时不时会用到很多开发工具,无奈装了太多无用软件,所以不想安装太多开发软件在电脑上,所以想到了用docker容器来配置开发环境适应不同开发内容,这篇文章主要给大家总结了关于Docker使用的一些个人学习知识点,需要的朋友们下面来一起看看吧。
    2017-06-06

最新评论