Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用一个 YAML 文件来配置应用程序的服务。然后,通过一条命令,就可以创建并启动配置中的所有服务。
Compose 适用于开发、测试和部署服务的容器化应用程序,并且可以在本地工作站和云端托管提供环境和一致性。
安装
使用 curl 命令下载可执行文件 sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
添加可执行权限 sudo chmod +x /usr/local/bin/docker-compose
常用命令
启动服务
Copy Codedocker-compose up [-d]
- -d(可选参数):在后台启动并运行整个应用程序。
启动指定服务
Copy Codedocker-compose up [-d] [SERVICE...]
- SERVICE:指定要启动的服务名称,可以同时启动多个服务。
关闭服务
Copy Codedocker-compose down
- 关闭并移除所有运行中的容器和网络。
启动并重新构建服务
Copy Codedocker-compose up --build [-d] [SERVICE...]
- --build:强制重新构建服务的镜像。
- SERVICE:指定要启动的服务名称,可以同时启动多个服务。
查看服务运行状态
Copy Codedocker-compose ps
- 列出所有服务及其状态。
进入运行中的服务
Copy Codedocker-compose exec SERVICE [COMMAND]
- SERVICE:指定要进入的服务名称。
- COMMAND:可选参数,指定要在服务中运行的命令。
暂停服务
Copy Codedocker-compose pause SERVICE
- SERVICE:指定要暂停的服务名称。
恢复服务
Copy Codedocker-compose unpause SERVICE
- SERVICE:指定要恢复的服务名称。
重启服务
Copy Codedocker-compose restart SERVICE
- SERVICE:指定要重启的服务名称。
查看服务日志
Copy Codedocker-compose logs [-f] [SERVICE...]
- -f(可选参数):查看实时日志。
- SERVICE:指定要查看日志的服务名称。
构建服务镜像
Copy Codedocker-compose build [SERVICE...]
- SERVICE:指定要构建镜像的服务名称,可以同时构建多个服务的镜像。
停止并删除服务容器
Copy Codedocker-compose rm [-s] [-v] [-f]
- -s(可选参数):停止但不删除当前运行的服务容器。
- -v(可选参数):移除挂载的数据卷。
- -f(可选参数):强制删除正在运行中的服务容器。
应用示例
创建一个名为 docker-compose.yml 的 YAML 文件
Copy Codeversion: "3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
我们定义了两个服务:一个 web 服务和一个 redis 服务。web 服务使用Dockerfile构建一个镜像,映射主机的5000端口到容器的5000端口,redis 服务使用官方的 Redis 镜像。
docker-compose.yml 示例,它将创建一个包含 Flask、PostgreSQL 和 NGINX 的 Web 应用程序:
yamlCopy Codeversion: '3'
services:
db:
image: postgres:12-alpine
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: example_pwd
POSTGRES_USER: example_user
POSTGRES_DB: example_db
web:
build: .
command: flask run --host=0.0.0.0
volumes:
- ./app:/usr/src/app
ports:
- "5000:5000"
depends_on:
- db
nginx:
image: nginx:1.21-alpine
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./app/static:/usr/share/nginx/html/static
- ./app/templates:/usr/share/nginx/html/templates
depends_on:
- web
volumes:
postgres-data:
这个示例中我们有三个服务:
- db: 使用官方的 PostgreSQL 镜像,指定了必要的环境变量。
- web:使用自定义的 Dockerfile 构建一个 Flask 应用程序。将应用程序映射到主机的 5000 端口上。还依赖于 db 服务。
- nginx:使用官方的 Nginx 镜像,在容器中运行Nginx。并将静态文件和模板从 web 服务映射到 Nginx 容器中。
可以通过以下命令构建和启动应用:
Copy Codedocker-compose up -d
在浏览器中访问 http://localhost 就可以看到部署成功的 Web 应用程序了。
整理不易,欢迎点赞,收藏,转发,关注我每天分享一下运维小知识。