Docker Compose是Docker容器编排工具。使用它可以将多个容器组合在一起形成完整的应用,同时可以方便地进行资源管理、规划和部署、测试和升级等操作。这里是Docker Compose的安装和使用步骤的完整攻略。
安装Docker Compose
- 查看官网获取最新安装包的下载链接。
https://docs.docker.com/compose/install/
- 通过curl命令下载最新版本的Docker Compose。本示例以Docker Compose的v1.27.4版本为例:
bash
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
- 赋予所下载的二进制文件可执行权限:
bash
chmod +x /usr/local/bin/docker-compose
- 查看Docker Compose版本号是否正确:
bash
docker-compose --version
此时,会输出Docker Compose的版本信息。表示安装成功。
使用Docker Compose
- 准备Docker Compose编排文件。假设我们需要搭建一个基于MySQL和PHPMyAdmin的Web应用。我们编写的docker-compose.yaml文件如下:
yaml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- ./mysql_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_USER: user
MYSQL_PASSWORD: password
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: root
ports:
- "8080:80"
首先,定义了两个服务,分别是db和phpmyadmin。其中,db是使用MySQL 5.7版本的官方镜像来搭建的MySQL数据库服务,启用宿主机的./mysql_data
目录用于持久化数据,配置MySQL的登录信息。phpmyadmin是使用phpmyadmin镜像的自启动web端口容器,依赖于db服务,由用户在8080端口上访问。
- 命令行进入编排文件所在目录,使用以下命令启动这个编排文件,拓扑关系将被建立在一个docker网络之中:
bash
docker-compose up -d
-d
表示后台运行,可以不必占用命令行窗口。此时Docker Compose就会自动创建并运行所有的容器,这时就可以通过访问地址http://localhost:8080
来访问phpmyadmin容器。
- 如果需要查看整个应用的运行状态,可以使用以下命令:
bash
docker-compose ps
- 使用以下命令对启动的容器进行管理:
bash
docker-compose start # 启动容器
docker-compose stop # 停止容器
docker-compose restart # 重启容器
docker-compose rm # 删除容器
这就是Docker Compose的安装和使用步骤。下面是两个简单实现的例子:
例子一
假设我们有一个名为hello-world
的简单应用程序,里面只有一个index.html
文件。我们可以通过Docker和Docker Compose来实现它的自启动。
首先,创建hello-world
目录,并在其目录下新建index.html
文件:
<!doctype html>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
接着,创建docker-compose.yml
文件,内容如下:
version: '3'
services:
web:
image: nginx:alpine
volumes:
- ./hello-world:/usr/share/nginx/html
ports:
- "80:80"
现在我们可以在hello-world
目录下使用以下命令运行这个应用:
docker-compose up -d
使用以下命令停止应用:
docker-compose down
在浏览器中访问http://localhost/
,将会看到“Hello World!”消息。
例子二
这个例子演示如何搭建一个基于Node.js和MongoDB的Web应用。 Node.js程序用于提供RESTful API,MongoDB数据库用于存储数据。
首先,创建myapp
目录,并在其中新建以下文件:
myapp/
├── docker-compose.yml
├── Dockerfile
└── index.js
创建Dockerfile文件,内容如下:
FROM node:12
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
创建docker-compose.yml
文件,内容如下:
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
links:
- db
db:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password
MONGO_INITDB_DATABASE: mydb
volumes:
- ./mongo_data:/data/db
这里,我们通过Dockerfile文件来创建一个node.js的Docker镜像。Node.js程序用的是一个非常简单的koa HTTP服务器(文件app.js
已经被省略了,这里以index.js
为例)。
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const MongoClient = require('mongodb').MongoClient;
const MONGO_URL = 'mongodb://admin:password@db:27017/mydb';
const app = new Koa();
app.use(bodyParser());
let db;
MongoClient.connect(MONGO_URL, (err, client) => {
if (err) {
console.error(err);
} else {
console.log("Connected to MongoDB server");
db = client.db("mydb");
}
});
app.use(async ctx => {
if (ctx.path == '/book') {
let result = await db.collection('books').find({}).toArray();
ctx.body = result;
} else {
ctx.body = 'Hello World!';
}
});
app.listen(3000);
这个程序简单地创建了一个Koa应用程序,提供了RESTful API的GET
请求。在这种情况下,/book
路径查询了books
集合。请求可以通过HTTP GET localhost:3000/book进行测试。
最后,使用以下命令运行应用程序:
docker-compose up -d
在浏览器中访问http://localhost:3000/book
,将会看到MongoDB中的books
集合中的内容。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker Compose的安装和使用步骤 - Python技术站