这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
本篇笔记主要记录一下Docker的学习知识
1.Docker是什么?
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进行快速部署,其中的流程是:
- 配置Dockerfile文件
- docker build 生成image,这是dockerfile配置文件中源代码的编译版本,有了image就可以在registry发布,这个注册中心类似git的资源库。
- 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浪一下。