后端基础班Day6-Docker | 青训营笔记

54 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

本篇笔记主要记录一下Docker的学习知识

1.Docker是什么?

image.png

Docker是一个容器化平台,它包装你所有开发环境依赖成一个整体,像一个容器。

Docker根据存储卷(Volumes)、环境变量注入(Environment variable)、只读(Read-only)文件系统来实现与环境无关的容器系统。

2.Docker的image镜像和container容器是什么?

  • Docker image是Docker容器的源。Docker images用于创建Docker 容器,Images通过Docker build命令创建,通过run启动。由于制作的镜像可能非常庞大,经常注册存储在registry.hub.docker.com这样的公共平台上,通过分层设计,每层可以单独成为一个小镜像,再由多层镜像构成大镜像。
  • Docker containers 是包含其所有运行依赖环境,但与其它容器共享操作系统内核的应用,它运行在独立的主机操作系统用户空间进程中。Docker 容器并不紧密依赖特定的基础平台:可运行在任何配置的计算机,任何平台以及任何云平台上。

3.Dockerfile

Docker可以通过Dockerfile进行快速部署,其中的流程是:

  1. 配置Dockerfile文件
  2. docker build 生成image,这是dockerfile配置文件中源代码的编译版本,有了image就可以在registry发布,这个注册中心类似git的资源库。
  3. docker run启动image,生成containers。

里面也有常用的一些指令:

FROM: 使用FROM为后续的指令建立基础镜像,是第一条指令
LABEL: 用于组织项目镜像、模块、许可等。
RUN: 在镜像当前层执行命令并且创建一个新层,用于在镜像层中添加功能层。
CMD: 为执行的容器提供默认值。如果有多个CMD指令,只有最后的CMD指令执行。
ENTRYPOINT:配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。如果有多个时,只有最后一个起效。

举个简单的Dockerfile例子:

FROM golang:alpine
# 轻量级镜像

MAINTAINER .... 
# 署名信息 一般为 id<email>

ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct

WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build  -ldflags="-w -s" -o main
# 编译

RUN mkdir publish  \
    && cp main publish
# 将编译后的文件进行拷贝

FROM busybox:1.28.4

WORKDIR /app

COPY --from=builder /app/publish .

# 指定运行时环境变量
ENV GIN_MODE=release
EXPOSE 8080

ENTRYPOINT ["./main"]
# 运行

在大项目下因为需要部署多个容器,因此会编写docker-compose文件进行快速部署多个容器。

人生苦短,不如go浪一下。