Docker 4.Dockerfile与docker-compose

48 阅读2分钟

Dockerfile

Dockerfile有一行行命令组成,并且支持以#开头的注释行。

一般而言,Dockerfile主体分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动指令。

部分指令说明

  1. FROM

    指定基础镜像。第一条指令必须为FROM。

  2. LABEL

    为生成的镜像添加元数据信息。

  3. EXPOSE

    声明镜像内服务监听的端口,只是声明,并不会完成自动映射,可以使用 -p

  4. ENV

    指定环境变量,可以被RUN命令使用,容器中也会存在。

  5. ENTRYPOINT

    指定镜像的默认入口命令,该命令会在容器启动时作为根命令执行。

  6. VOLUME

    创建一个数据卷挂载点。

  7. WORKDIR

    为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录

  8. RUN

    每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像层。当命令较长时可以使用\来换行。

  9. CMD

    CMD指令用来指定启动容器时默认执行的命令。

  10. ADD

    将本地文件添加到容器中。

  11. COPY

    COPY与ADD指令功能类似,当使用本地目录为源目录时,推荐使用COPY。

创建镜像

以go语言为例:

package main
import (
	"fmt"
)

func main() {
    fmt.Println("Hello Go")
}
FROM golang:1.9 as builder

RUN mkdir -p /go/src/test

WORKDIR /go/src/test

COPY main.go .

RUN CGO_ENABLED=0 GOOS=linux go build -o app .

FROM alpine:latest

RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY --from=builder /go/src/test/app .

CMD ["./app"]
docker build -t hello:1 .

docker-compose

相关命令

docker-compose up -d  #后台运行
docker-compose down # 关闭
docker-compose top # 列出容器内运行的进程
docker-compose ps # 查看状态
docker-compose restart # 重新启动
# -f 可以指定文件

部分指令

  1. build

    指定Dockerfile所在文件夹的路径。Compose将会利用它自动构建应用镜像,然后使用这个镜像。

  2. container_name

    指定容器的名字。

  3. depends_on

    指定多个服务之间的依赖关系。

  4. image

    镜像名称

  5. ports

    暴露端口信息

  6. volumes

    数据卷挂载设置。

  7. restart

    指定重启策略:no、always、on-failure

创建

version: "3"
services:
  redis:
    container_name: "redis"
    ports:
      - "6379:6379"
    image: redis:6.0.8

docker-compose up