我如何能够在 Docker 中使用多个操作系统映像?

How am I able to use multiple operating system images within Docker?

我目前正在使用 Docker 来部署 Web 应用程序的开发版本。这是我写的docker-compose.yml文件

version: '3'

services:

  nginx:
    build:
      context: ./docker/nginx
    ports:
      - "80:80"
    volumes:
      - .:/var/www/html/acme.com
      - ./docker/nginx/acme.com.conf:/etc/nginx/conf.d/acme.com.conf
    networks:
      - my_network

  php:
    build:
      context: ./docker/php
    ports:
        - "9000:9000"
    volumes:
      - .:/var/www/html/acme.com
    networks:
      - my_network

  database:
    build:
      context: ./docker/database
    volumes:
      - ./docker/database/acme.sql:/docker-entrypoint-initdb.d/acme.sql
      - ./docker/database/remote_access.sql:/docker-entrypoint-initdb.d/remote_access.sql
      - ./docker/database/custom.cnf:/etc/mysql/conf.d/custom.cnf
    ports:
        - "3306:3306"
    environment:
      MYSQL_DATABASE: ${db_database}
      MYSQL_ROOT_PASSWORD: ${db_password}
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

仔细查看 nginx 和 mysql 的不同上下文文件如下:

./docker/nginx/Dockerfile

FROM nginx:alpine

./docker/database/Dockerfile

FROM mariadb:latest

可见nginx镜像使用的是alpine基础镜像

但是 mariadb 使用的是什么图像?我浏览了 dockerhub 网站并跟随 link 到 https://github.com/MariaDB/mariadb-docker/blob/db55d2702dfc0102364a29ab00334b6a02085ef9/10.7/Dockerfile

在此文件中,引用了

FROM ubuntu:focal

这是否意味着我的 docker 容器正在使用 alpine linux 基础映像以及 ubuntu 映像?如果我的容器中有多个 linux 分布,它如何工作?

我应该怎么做才能解决这个问题? 我是否应该使用 FROM 命令将 mariadb 安装到 alpine linux 中并构建我自己的 docker 映像?

将您的 docker 想象成一个服务器场。每个服务(nginx、mariadb、..)都是一个物理服务器 运行 一个 OS 及其软件。它们都通过同一子网内的 LAN 连接。每台机器都有自己的 IP 地址,并且有一个 DNS 和 DHCP 服务 运行ning 用于提供 IP 和解析名称(服务名称 = DNS-Alias)。并且有一个路由器阻止来自其他子网(=您的主机)的所有连接。异常通过端口映射配置(=forwarding)ports: - 8000:8000.

因此您可以将服务器与 一种类型 的所有不同 OS 变体混合使用。这是因为 docker 不是真正的虚拟机,而是一个使用主机 OS 资源到 运行 容器的虚拟机。所以你可以混合各种 Linux 发行版 Windows 版本。每个容器都使用最适合它的 OS 目标,例如Alpine 占地面积非常小,Ubuntu 更舒适。