繁体   English   中英

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

[英]how does docker-compose.yml and dockerfile works together

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

有两个文件。

Dockerfile

FROM node:lts-alpine

WORKDIR /server

COPY package*.json ./

RUN npm install

COPY . . 

EXPOSE 3030

CMD ["npm", "run", "dev"]

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

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

一个。 镜像将基于 Dockerfile 构建
湾。 那是什么?

问题2

  test-db:
    image: mysql:5.7
  test-web:
    environment:
      - NODE_ENV=local
      #- DEBUG=*
      - PORT=3030
    image: node:lts-alpine

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

问题 3

    volumes:
      - ./db-data:/var/lib/mysql

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

更新

问题 4

    build: ./

这条线是干什么用的?

建议通过入门go ,您的大部分问题都会得到解决。

让我试着向你强调其中的一些。

  1. DockerfileCompose 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

请记住,Doc 永远是您的朋友。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM