Docker-将服务组合到dockerfile中

时间:2017-02-17 15:06:03

标签: docker docker-compose dockerfile

我是docker的新手,我正在尝试制作一个包含多个应用的​​容器。

假设我的docker-compose文件是这样的:

version: '2'

services:
    myapp:
        build: ./dockerfiles/myapp
        volumes:
          - ./www:/var/www
          - ./logs:/var/log
          - ./mysql-data:/var/lib/mysql
          - ./php:/etc/php5
          - ./nginx:/etc/nginx
        ports:
            - "8082:8000"
            - "6606:3306"
        links:
            - mysql:mysql
            - php:php
            - nginx:nginx
    mysql:
        image: mysql
        environment:
            MYSQL_ROOT_PASSWORD: M@yW3Bw35t
            MYSQL_USER: replymwp
            MYSQL_PASSWORD: ZSzLPoOi9wlhFaiJ
    php:
        image: php:5.6-fpm
        links:
            - mysql:db
    nginx:
        image: nginx
        links:
            - php:php

现在,在myapp DockerFile中,我想安装一个需要mysql的软件包。

FROM debian:jessie

RUN apt-get update

RUN apt-get update 
RUN apt-get install -y apt-show-versions

RUN apt-get install -y wget 
RUN wget http://repo.ajenti.org/debian/key -O- | apt-key add -
RUN echo "deb http://repo.ajenti.org/ng/debian main main ubuntu" >>         /etc/apt/sources.list
RUN apt-get update 
RUN apt-get install -y ajenti

RUN apt-get install -y ajenti-v ajenti-v-ftp-vsftpd ajenti-v-php-fpm ajenti-v-mysql

EXPOSE 8000
ENTRYPOINT ["ajenti-panel"]

现在的问题是,当docker尝试构建我的图像时,它会安装php,mysql等...即使我将它链接到我的docker-compose文件中。其次,当它尝试安装mysql时,它会提示输入主密码并在此步骤中保持阻止,即使我填写了某些内容......

我使用它的方式可能完全错了吗?

任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

我认为你的ajenti依赖于mysql,所以如果你做apt-get install ajenti,它会尝试满足这种依赖。具体来说,您正在安装ajenti-v-mysql,它似乎具有mysql依赖性

因为你想运行mysql分离,你可能需要--no-install-recommends?这是apt-get的旗帜,所以你会得到像

这样的东西
apt-get install <packagename> --no-install-recommends

这意味着你没有依赖关系,所以你可能需要找出你需要的其他依赖项。

php-fpm有同样的问题,我想包含ajenti-v-php-fpm的整行有点太多了?

答案 1 :(得分:0)

如果您打算使用单独的mysql和php容器,那么为什么还要在此行的mpapp dockerfile中包含安装:

RUN apt-get install -y ajenti-v ajenti-v-ftp-vsftpd ajenti-v-php-fpm ajenti-v-mysql

如果您要使用mysql和php容器,那么您的应用程序中不需要它们。这也应该解决你提示输入mysql密码的第二个问题。

请记住,您需要从myapp配置更改mysql的主机名和php配置。我认为你可能最好寻找一个设置docker compose的教程,你必须看看自己找到最合适的,但像this之类的东西会给你一个良好的开端。