Docker-将链接服务组合成dockerfile

我对Docker来说很新颖,而且我正在尝试使用多个应用程序创build一个容器。

假设我的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试图build立我的形象,它安装PHP,MySQL等…即使我把它链接到我的docker组成文件。 其次,当它试图安装MySQL,它会提示input一个主密码并在这一步保持阻塞,即使我填充了一些东西…

也许我完全错误的使用它的方式吗?

任何帮助将不胜感激。

我想你的ajenti有一个依赖于mysql,所以如果你做apt-get install ajenti ,它会试图满足这种依赖。 特别是你正在安装ajenti-v-mysql ,它似乎有一个mysql的依赖

因为你想运行mysql分离,你可能需要做--no-install-recommends ? 这是一个标志,所以你会得到类似的东西

 apt-get install <packagename> --no-install-recommends 

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

php-fpm有相同的问题,我想整个包含ajenti-v-php-fpm的代码有点太多了?

如果你打算使用单独的mysql和php容器,那你为什么仍然在这一行的mpapp dockerfile中包含安装:

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

如果你打算使用mysql和php容器,那么你的应用程序就不需要它们了。 这也应该照顾你被提示inputmysql密码的第二个问题。

请记住,您将需要从myappconfiguration中更改mysql的主机名和您的phpconfiguration。 我认为你可能会更好地寻找一个设置docker写作的教程,你将不得不看看自己find最合适的,但是这样的事情会给你一个好的开始。