docker-compose.yml 和 Dockerfile 如何协同工作?

123*_*123 0 docker docker-compose

据我了解,
Dockerfile就像是创建镜像的config/recipe,而docker-compose用于轻松创建多个可能有关系的容器,避免通过docker命令重复创建容器。

有两个文件。

Dockerfile

FROM node:lts-alpine

WORKDIR /server

COPY package*.json ./

RUN npm install

COPY . . 

EXPOSE 3030

CMD ["npm", "run", "dev"]
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '2.1'

services:
  test-db:
    image: mysql:5.7
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=true
      - MYSQL_USER=admin
      - MYSQL_PASSWORD=12345
      - MYSQL_DATABASE=test-db
    volumes:
      - ./db-data:/var/lib/mysql
    ports:
      - 3306:3306
  test-web:
    environment:
      - NODE_ENV=local
      #- DEBUG=*
      - PORT=3030
    image: node:lts-alpine
    build: ./
    command: >
        npm run dev
    volumes:
      - ./:/server
    ports:
      - "3030:3030"
    depends_on:
      - test-db
Run Code Online (Sandbox Code Playgroud)

问题 1
当我运行 docker-compose up --build 时

A。镜像将基于 Dockerfile
b 构建。那又怎样呢?

问题2

  test-db:
    image: mysql:5.7
Run Code Online (Sandbox Code Playgroud)
  test-web:
    environment:
      - NODE_ENV=local
      #- DEBUG=*
      - PORT=3030
    image: node:lts-alpine
Run Code Online (Sandbox Code Playgroud)

我正在使用上面的代码下载 dockerhub 的映像,但是为什么以及何时需要在 --build 中创建的映像?

问题3

    volumes:
      - ./db-data:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

此行是否意味着数据应该存储在位置 /var/lib/mysql 的内存中,而我将此数据复制到工作目录 ./db-data 中?

更新

问题4

    build: ./
Run Code Online (Sandbox Code Playgroud)

这条线是做什么用的?

Pap*_*pEr 7

建议仔细阅读入门指南,大部分问题都会得到解决。

让我尝试向您重点介绍其中的一些内容。

  1. Dockerfile和之间的区别Compose file
    1. Docker 可以通过读取 Dockerfile 中的指令自动构建镜像
    2. Compose 是一个用于定义和运行多容器 Docker 应用程序的工具
    3. 主要区别在于Dockerfile用于构建图像,而Compose用于构建和运行应用程序。
    4. 您必须先构建一个图像,Dockerfile然后运行它Compose
  2. 运行docker-compose up --build镜像后,构建并缓存在系统中,然后 Compose 将启动由docker-compose.yml
  3. 如果您指定,image那么它将在构建时下载build: ./
  4. 卷是持久保存 Docker 容器生成和使用的数据的首选机制。,图像是只读的,删除容器后所有对容器的编辑都会被销毁,所以Volumes如果你想持久化数据就必须使用。

请记住,医生永远是你的朋友。