是否可以在 Docker 上运行多个容器来运行公共服务?

Posted

技术标签:

【中文标题】是否可以在 Docker 上运行多个容器来运行公共服务?【英文标题】:Is it possible to run multiple containers on Docker to run a common service? 【发布时间】:2018-10-15 04:32:36 【问题描述】:

我对 Docker 很陌生,我遇到的最大问题是:

尝试使用基本 LAMP(包括 phpMyAdmin)制作我自己的图像 使用已创建的 LAMP 图像 (This one works for me but I'm having troubles with phpMyAdmin and privileges)

所以我问自己是否可以运行多个连接它们的容器(我看到有可能在 Docker 上创建一个网络,但我不知道它的局限性)并像 LAMP 一样作为单一服务运行.换句话说:

    Apache2 + PHP -> 与容器 nº2 连接 ||通过端口转发连接的主机。 mysql + PhpMyAdmin -> 与容器 nº1 连接

我仍然对 Docker 能做或不能做的所有事情感到非常困惑。

【问题讨论】:

【参考方案1】:

您可以通过将容器放在同一个网络中来实现这一点。

在主机上(包含数据库):

# docker-compose.yml
    services:
      db:
        mediawiki_db:
          image: mariadb
          networks:
            - mediawiki
          ports:
            - 3306:3306
    networks:
      mediawiki:
        driver: bridge

在客户端(带有 phpmyadmin 的容器):

# docker-compose.yml
services:
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    networks:
      - db_mediawiki

networks:
  db_mediawiki:
    external: true

在server下的phpMyAdmin页面,填写db容器的IP。

还要确保您已授予 mysql 用户外部访问权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'password' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

【讨论】:

【参考方案2】:

您需要docker-compose - 它允许通过一个命令运行多个容器:docker-compose up

您需要配置它们,例如:https://github.com/pnglabz/docker-compose-lamp。

【讨论】:

以上是关于是否可以在 Docker 上运行多个容器来运行公共服务?的主要内容,如果未能解决你的问题,请参考以下文章

将图像从公共 Docker Hub 拉取到 AWS Elastic Beanstalk 多个容器

如何检查 Docker 镜像是否存在漏洞

如何检查 Docker 镜像是否存在漏洞

Centos7 Docker私有仓库搭建

nginx 反向代理可以访问多个 docker 容器

[Docker Compose定义运行多个Docker容器]