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最合适的,但是这样的事情会给你一个好的开始。