传统的虚拟机技术

容器技术


容器对比kvm的好处
- 容器可以提供宿主机的性能,而虚拟机是分配宿主机的硬件资源,性能弱
- 可以启动更多的容器
- 启动一个虚拟机,需要完整的开机流程,启动容器时间更短
- kvm需要硬件支持虚拟化,容器不需要
docker部署
- image镜像:构建容器,我们把应用程序运行所需要的环境,打包为镜像文件
- container:容器,我们的程序,就跑在容器里
- dockerhub:镜像仓库,(保存镜像文件,提供上传,下载镜像),好比GitHub
- dockerfile:将你部署的项目操作,写成一个部署脚本,该脚本还能构建出镜像文件

web 部署
- 编写dockerfiles:导入golang镜像,设置话环境变量,编译成二进制可执行文件,声明端口
- 在项目目录下,创建镜像:
docker build . -t goweb_app
- 我们接下来要做的是运行我们的镜像,以便它能够处理我们的请求。运行中的镜像称为容器。
docker run -p 8888:8888 goweb_app
- 分阶段构建:我们的Go程序编译之后会得到一个可执行的二进制文件,其实在最终的镜像中是不需要go编译器的,也就是说我们只需要一个运行最终二进制文件的容器即可。
FROM golang:alpine AS builder
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
WORKDIR /build
COPY . .
RUN go build -o app .
FROM scratch
COPY --from=builder /build/app /
ENTRYPOINT ["/app"]
FROM golang:alpine AS builder
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
WORKDIR /build
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN go build -o bluebell_app .
FROM scratch
COPY ./templates /templates
COPY ./static /static
COPY ./conf /conf
COPY --from=builder /build/bluebell_app /
EXPOSE 8084
ENTRYPOINT ["/bluebell_app", "conf/config.yaml"]