Dockerfile基础

Dockerfile是用来自动化创建Docker镜像的脚本文件,通过编写Dockerfile文件,可以自动化构建过程,减少手动操作,确保环境一致性,在Dockerfile中常见的命令有:FROM(指定基础镜像)、RUN(执行命令)、COPY/ADD(拷贝文件)、WORKDIR(设置工作目录)、CMD/ENTRYPOINT(指定容器启动时的命令)、EXPOSE(指定暴露的端口)、ENV(设置环境变量)。

列如下方是一个Dockerfile示例:

# 第一阶段:构建阶段
FROM node:14 AS builder
WORKDIR /app
COPY . .
RUN npm install

# 第二阶段:运行阶段
FROM node:14
WORKDIR /app
COPY --from=builder /app /app
CMD ["npm", "start"]

配置好dockerfile脚本后,就可以通过一下命令构建镜像并启动容器

# 构建镜像llmops-ui:1.0.1
docker build -f llmops-ui/Dockerfile -t llmopps-ui:1.0.1 llmops-ui/

# 运行构建好的镜像
docker run -d -p 5173:80 --name llmops-ui llmops-ui:1.0.1

# 进入到Docker容器内部
docker exec -it llmops-ui /bin/sh

但是在整个项目中会用到多个Docker容器,如果逐个容器去启动+运行,并且有可能容器之间会有依赖关系,需要按照特定的顺序启动,手动操作起来非常麻烦,这时可以使用docker-compose工具来定义和运行多容器

docker-compose基础

Docker Compose是一个用于定义和运行多容器Docker应用的工具。使用Compose,我们可以通过一个YAML配置文件(docker-compose.yml)来定义所有的服务、网络和卷等。然后,通过一个人简单的命令docker-compose up, 我们就能够启动所有相关的容器服务,通过docker-compose down, 就可以一键卸载所有关联的容器服务。

要想使用Docker Compose 工具,需要配置一个docker-compose.yaml 文件,该配置文件用于描述容器的服务、网络、卷等。我们通过YAML格式定义来定义该文件,列如下方是一个docker-compose.yaml文件的基本实例:

version: '3' # 定义 compose 文件的版本

services:
  web:
    image: nginx  # 使用nginx官方镜像
    ports:
      - "8080:80"  # 将容器的80端口映射到宿主机的8080端口
    networks:
      - my_network
  db:
    image: postgres:alpine # 使用postgres官方镜像
    environment:
      POSTGRES_PASSWORD: example # 设置环境变量
    networks:
      - my_network
   
 networks:
   my_network: #自定义网格定义
     driver: bridge # 使用bridge网络驱动

编写 docker-compose.yaml配置也非常简单,常见的配置如下:

  1. version: 指定docker-compose.yml的版本。通常我们使用的是3.x版本系列
  2. services: 定义了所有的容器服务。每个服务代表一个容器。服务可以是镜像的引用,也可以通过build来从Dockerfile构建镜像。
    • image: 指定容器使用的镜像。可以是从Docker Hub或其他仓库拉取的镜像
    • build: 指定构建镜像的上下文路径,如果是自己编写Dockerfile构建镜像时需要指定
    • environment: 定义环境变量,这些环境变量将传递给容器
    • volumes: 挂载宿主机目录或者Docker卷到容器内部,常用于持久化数据
    • ports: 定义容器端口与宿主机端口的映射
  3. networks: 定义服务之间的网络配置,每个服务可以连接到一个或多个网络
  4. volumes: 定义数据卷,用于容器之间共享数据或持久化数据

除了配置项之外,docker-compose还通过一系列的命令来执行相应的服务,命令如下:

  1. 启动服务
docker-compose up

该命令会启动docker-compose.yml中定义的所有服务。如果容器镜像不存在,会自动从Docker Hub拉取或根据Dockerfile构建镜像。

  • 如果只想启动后台容器(不阻塞终端),可以加上 -d 参数:
docker-compose up -d
  1. 停止服务
docker-compose down

该命令停止并删除所有由docker-compose.yml启动的容器、网络和卷。

  • 只停止容器但不删除容器,可以使用:
docker-compose stop
  1. 查看容器日志:
docker-compose logs

该命令用于查看所有服务的日志。如果只想查看某个服务的日志,可以指定服务名:

docker-compose logs web
  1. 重启服务
docker-compose restart

该命令用于重启所有服务的容器,如果只重启某一个服务,可以指定服务名:

docker-compose restart web
  1. 查看容器状态
docker-compose ps

该命令用于列出当前Compose环境中的容器状态,它会显示容器的状态、端口映射等信息。

  1. 构建镜像
    如果服务使用build指令来构建镜像,可以使用:
docker-compose build

该命令会根据docker-compose.yml文件中的配置重新构建镜像

  1. 运行单个命令:
    有时候你可能需要进入某个服务器。执行一些命令,比如查看容器内部的日志,或者执行数据库操作等。可以使用:
docker-compose exec <service_name> <command>

列如,要进入web容器的终端:

docker-compose exec web bash

更多推荐