Docker 创建隔离机器(容器)。每个容器只包含一个进程(Apache 或 Mysql 或另一个);而 Dockerfile 定义了如何构建镜像。
Docker compose 允许一起运行、链接和配置 bunch 容器。
在您的情况下,apache 需要知道 mysql 的“位置”。并且 mysql 需要在运行 apache 容器之前被唤醒。
Dockerfile 定义了如何创建应用镜像。应用图像包含您的应用和网络浏览器。
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
您有两种方法可以做到这一点:
1) 本地 docker 方法。你运行数据库容器
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
在你需要运行应用容器之后(之前创建的图像)
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 compose 的优点并不明显,但是如果你有 5 个以上的容器,那么在没有 compose 的情况下很难将它们一起运行。