docker&k8s

82 阅读2分钟

传统的虚拟机技术

image.png

容器技术

image.png

image.png

容器对比kvm的好处

  1. 容器可以提供宿主机的性能,而虚拟机是分配宿主机的硬件资源,性能弱
  2. 可以启动更多的容器
  3. 启动一个虚拟机,需要完整的开机流程,启动容器时间更短
  4. kvm需要硬件支持虚拟化,容器不需要

docker部署

  1. image镜像:构建容器,我们把应用程序运行所需要的环境,打包为镜像文件
  2. container:容器,我们的程序,就跑在容器里
  3. dockerhub:镜像仓库,(保存镜像文件,提供上传,下载镜像),好比GitHub
  4. dockerfile:将你部署的项目操作,写成一个部署脚本,该脚本还能构建出镜像文件

image.png

web 部署

  1. 编写dockerfiles:导入golang镜像,设置话环境变量,编译成二进制可执行文件,声明端口
  2. 在项目目录下,创建镜像:
docker build . -t goweb_app
  1. 我们接下来要做的是运行我们的镜像,以便它能够处理我们的请求。运行中的镜像称为容器。
docker run -p 8888:8888 goweb_app
  1. 分阶段构建:我们的Go程序编译之后会得到一个可执行的二进制文件,其实在最终的镜像中是不需要go编译器的,也就是说我们只需要一个运行最终二进制文件的容器即可。
FROM golang:alpine AS builder

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 移动到工作目录:/build
WORKDIR /build

# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件 app
RUN go build -o app .

###################
# 接下来创建一个小镜像
###################
FROM scratch

# 从builder镜像中把/dist/app 拷贝到当前目录
COPY --from=builder /build/app /

# 需要运行的命令
ENTRYPOINT ["/app"]
FROM golang:alpine AS builder

# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 移动到工作目录:/build
WORKDIR /build



# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件 bluebell_app
RUN go build -o bluebell_app .

###################
# 接下来创建一个小镜像
###################
FROM scratch

COPY ./templates /templates
COPY ./static /static
COPY ./conf /conf

# 从builder镜像中把/dist/app 拷贝到当前目录
COPY --from=builder /build/bluebell_app /

# 声明服务端口
EXPOSE 8084

# 需要运行的命令
ENTRYPOINT ["/bluebell_app", "conf/config.yaml"]