我是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时,它会提示输入主密码并在此步骤中保持阻止,即使我填写了某些内容......
我使用它的方式可能完全错了吗?
任何帮助都会受到赞赏。
答案 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之类的东西会给你一个良好的开端。