Dockerfile
和docker-compose.yml
个文件之间的关系是什么?
看起来我可以使用Dockerfile
,FROM
(RUN
等和apt-get
命令使用CMD
构建任何Linux设置。但是看起来,这个是不是可以重复使用(我可以重用整个映像,但服务是硬编码的,不能被其他项目重用)。
我应该在新项目中使用这两个文件吗?
让我们说我想要定期LAMP堆栈:
debian:wheezy
)httpd:2.2
)mariadb
)php:5.6
)在一台常规机器上一起运行。
在主机系统的目录中:
我更喜欢使用官方的基本回购和图片,而不是预先配置的多功能一体机。
在这种情况下配置文件应该如何?
我在Ubuntu上使用docker-compose
v.1.8.1和docker
v.1.12.3。
答案 0 :(得分:11)
Dockerfile
:
docker-compose.yaml
:
Dockerfile
build:
将两者结合使用是很常见的。
Dockerfile
几乎总是用于创建自定义图像。某些映像可能用于运行服务(长时间运行的进程),但某些映像可能用于运行短期交互式进程(如运行单元测试)。
docker-compose.yaml
非常有用。
答案 1 :(得分:10)
Docker 创建隔离计算机(容器)。每个容器只包含一个进程(Apache或Mysql或其他); Dockerfile定义了如何构建图像。
Docker撰写允许同时运行,链接和配置容器的束。
在你的情况下,apache需要知道“where”是一个mysql。并且在运行apache容器之前需要唤醒mysql。
Dockerfile
定义了如何创建应用图片。应用程序映像包含应用程序和Web浏览器。
FROM apache:php5.6
ADD /src /var/www/awesome_project #add a project src code
ADD /config/apache/awesome_project.conf /etc/apache2/sites-available/ # add a configuration
# make any things
然后你需要建立图像docker build my_app:latest .
此时您已创建了图像,您需要运行app并将其链接到db
你有2种方法可以做到这一点:
1)本地码头工人方法。你运行数据库容器
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
并且在您需要运行app容器(之前创建了图像)
之后 docker run --name my_app --link some-mysql:mysql -P -d my_app
此时我们已经开始申请了。这个简单的事情让我们做出2长命令。如果您需要将应用程序复制到另一台机器,则需要完全重复此命令。
2) docker-compose方式允许创建运行容器的配置。它描述了如何精确运行容器。
简单docker-compose.yml
配置说明了这种方法
db:
image: mysql
environment:
- MYSQL_USER=root
- MYSQL_PASSWORD=root
app:
image: my_app:latest
ports:
- 80:80
depends_on:
- db
environment:
# Database
- DB_USER_NAME=root
- DB_USER_PASSWORD=root
此配置允许您一起运行2个容器,链接和配置它们。
这是一个非常简单的例子。使用docker的优点并不明显,但如果你有5个以上的容器,那么在没有编写的情况下将它们组合在一起就太难了。
答案 2 :(得分:0)
从根本上讲,这是关注点的分离和一种简单的构想方式,是通过思考什么 vrs 如何来考虑的。
Dockerfile定义容器内发生的事情。
Docker-compose.yml定义如何该容器在主机中运行。这就是为什么他们在文档中说“服务只是生产中的容器”的原因。
容器并不关心其运行方式或运行位置,它只关心其运行情况。主机不关心运行什么,仅运行运行方式。多个实例,那么多的RAM,那么多的CPU,请确保在该实例之前启动该服务,等等。
因此,我们为每个目的创建了两个单独的配置文档。