【问题标题】:docker build a custom image from docker-compose.ymldocker 从 docker-compose.yml 构建自定义镜像
【发布时间】:2022-11-11 17:53:22
【问题描述】:

我有一个设置,其中有一个 Dockerfile 和一个 docker-compose.yml。

Dockerfile:

# syntax=docker/dockerfile:1
FROM php:7.4
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN docker-php-ext-install mysqli pdo pdo_mysql
RUN apt-get -y update
RUN apt-get -y install git
COPY . .
RUN composer install

YML 文件:

version: '3.8'
services:
  foo_db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=foo
      - MYSQL_DATABASE=foo
  foo_app:
    image: foo_php
    platform: linux/x86_64
    restart: unless-stopped
    ports:
      - 8000:8000
    links:
      - foo_db
    environment:
      - DB_CONNECTION=mysql
      - DB_HOST=foo_db
      - DB_PORT=3306
      - DB_PASSWORD=foo
    command: sh -c "php artisan serve --host=0.0.0.0 --port=8000"
  foo_phpmyadmin:
    image: phpmyadmin
    links:
      - foo_db
    environment:
      PMA_HOST: foo_db
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
      PMA_USER: root
      PMA_PASSWORD: foo
    restart: always
    ports:
      - 8081:80

为了在新工作站上进行设置,我首先运行的步骤是:

docker build -t foo_php .

据我了解,这将运行 Dockerfile 中的命令并创建一个名为 foo_php 的新图像。

一旦完成,我将运行docker compose up

问题:

如何告诉 docker 我希望自动构建我的 foo_app 映像,以便我可以跳过首先构建映像的步骤。理想情况下,我会有一个类似于docker compose up 的命令,每次我想启动我的容器时都可以调用它。第一次它会构建它需要的镜像,包括我在 Dockerfile 中描述的这个自定义镜像,随后调用它只会运行这些镜像。是否存在实现这一目标的方法?

【问题讨论】:

    标签: docker docker-compose dockerfile docker-image


    【解决方案1】:

    你可以让 docker compose 每次都构建镜像:

    docker compose up --build
    

    但是您还需要指示 docker compose 构建什么:

    foo_app:
        image: foo_php
        build:
          context: .
    

    其中context 指向包含您的 Dockerfile 的文件夹

    【讨论】:

    • (明确命名image: foo_php 是可选的。)
    • 可选的是,但如果您想回顾图像的先前版本,这是一个非常好的做法。此外,如果您稍后决定将图像推送到存储库,则该图像名称可能会非常方便
    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 2021-08-01
    • 2019-06-22
    • 1970-01-01
    • 2019-12-21
    • 2021-05-30
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多