获取示例程序
- 示例程序
或者
示例程序
获取示例程序 - 程序结构如下
├── getting-started-app/
│ ├── package.json
│ ├── README.md
│ ├── spec/
│ ├── src/
│ └── yarn.lock
多容器app
到目前为止,我们学的都是只包含一个容器的程序。但是现在,我们需要向程序栈中添加MySQL。由此引出了下面的问题:“我们计划把MySQL放到哪里运行?在当前的容器还是在一个新的容器?”。一般情况下,每个容器应该负责完成一件事,会完成的更好。下面我列举了在单独的容器中运行程序的优势:
- 很多情况下,我们对接口和前端的修改多于数据库。
- 独立的容器可以方便我们对程序各个部分的版本管理。
- 你开发时用的本地数据库系统,当要部署到生产环境中时,想要换一个第三方服务的数据库系统。你肯定不希望把程序连带着数据库一起发布。
- 运行多个进程需要有一个进程管理器,运行的进程越多会增加容器的启动的负担。
还有很多的优势证明单独容器运行单独的进程的好处。
容器的网络
请记住,默认情况下,容器在隔离的环境下运行,它不知道同一个宿主机上的任何其它进程或者容器的存在。所以,我们如何使一个容器可以和另外一个容器通讯呢?答案就是网络。如果你把他们放到同一个网络中,它们就可以相互通信。
启动MySQL
有2种方式把容器放到一个网络中:
- 启动容器时设置网络
- 连接一个运行中的程序到一个网络
下面,我们先创建一个网络,然后在容器启动时,附加到这个网络。
- 创建网络
$ docker network create todo-app
- 启动MySQL,然后把它附加到网络。你还要定义一些环境变量供数据库使用初始化。要了解更多的MySQL环境变量,参考 MySQL Docker Hub listing中的"Environment Variables"部分。
docker run -d \--network todo-app --network-alias mysql \-v todo-mysql-data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=secret \-e MYSQL_DATABASE=todos \mysql:8.0
上面的命令里,出现了--network-alias
,后面,我们会介绍关于它更多的内容。
说明
我们注意到上面的命令里,有一个名字为todo-mysql-data
的volumeÿ