Compose常用命令
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose.yml
文件,你可以配置应用程序的服务、网络和卷。
注意
:需要在包含 docker-compose.yml
文件的目录下执行它们,且下面的命令后面省略了 服务名,比如 docker-compose up myapp -d
。
1、docker-compose up
该命令会构建、创建、启动容器,并附加到它们上。使用 -d
参数可以使容器在后台运行。
docker-compose up -d
# 删除停止的服务容器
docker-compose rm
# 查看端口映射
docker-compose port [service_name] [private_port]
# 示例:docker-compose port web 80
2、docker-compose down
停止并移除容器、网络、镜像以及卷(如果使用默认配置)。
docker-compose down
注意
:添加 --volumes
同时删除命名卷:docker-compose down --volumes
3、docker-compose start
docker-compose start
4、docker-compose stop
停止正在运行的容器而不删除它们,以便以后可以重新启动。
docker-compose stop
5、docker-compose restart
重启服务容器。
docker-compose restart
6、docker-compose build
构建或重建服务。此命令等同于执行 docker-compose up
时自动进行的构建步骤。
docker-compose build
注意
:添加 --no-cache
不使用缓存:docker-compose build --no-cache
7、docker-compose logs
查看服务容器输出的日志信息。使用 -f
参数可以实时跟踪日志输出。
docker-compose logs -f
8、docker-compose exec
进入某个服务的容器中执行命令,类似于 Docker 的 exec
命令。
docker-compose exec [service_name] [command]
# 运行一次性命令
docker-compose run [service_name] [command]
# 示例:docker-compose run web python manage.py migrate
9、docker-compose config
查看服务配置。
docker-compose config
# 验证配置
docker-compose config -q
10、docker-compose pause
暂停服务。
docker-compose pause [service_name]
# 恢复暂停的服务
docker-compose unpause [service_name]
11、docker-compose scale
扩展服务。
docker-compose scale
命令原本是用来扩展 Docker Compose 文件中定义的服务实例数量的。例如,如果你定义了一个名为 web
的服务,使用 docker-compose scale web=3
可以启动三个该服务的实例。
docker-compose scale [service_name]=[num]
# 示例:docker-compose scale web=3 worker=2
不过,需要注意的是,scale
命令在Compose文件版本2.x中有效,从 Docker Compose 2.x 版本开始,docker-compose scale
命令已经被弃用,并且在最新的版本中被移除。取而代之的是通过修改 docker-compose.yml
文件来实现相同的功能。现在推荐的方式是在 Compose 文件中使用 scale
参数或者直接指定服务的数量。例如:
services:
web:
image: "example/webapp"
deploy:
replicas: 3
---
# 也可以使用环境变量(建议使用Docker自动命名)
services:
app:
container_name: myapp_${INSTANCE_NUMBER}
image: my-image
在这个例子中,replicas: 3
表示将会启动三个 web
服务的实例。
版本v3+替代命令:
docker-compose up -d --scale [service_name]=[num]
容器名称问题
如果直接这样使用,则会报错,也就是没有什么效果,这是因为 Docker 要求每个容器必须有唯一的名称。
所以我们只有在 docker-compose.yml 文件中,去掉或注释掉 container_name
指令,docker-compose 在使用 scale 的时候,会自动命令容器,默认格式为:
[project]_[service]_[index]
比如:myproject_app_1
如果您在应用中硬编码了容器名称进行服务发现,移除 container_name
后可能需要调整。
考虑使用 Docker 内置的 DNS 服务发现(通过服务名访问)。
其他容器可以通过服务名称(如 app
)访问该服务,不需要知道具体容器名称。
Docker 会自动处理负载均衡。
容器端口问题
上述解决了容器命名的问题,还有一个端口问题,我们也建议让 Docker,随机映射端口,在 docker-compose.yml 文件中就需要写:
services:
app:
# container_name: myapp
image: dockette/jdk8
ports:
- "8090"
- "8080-8090:8090" # 或者让Docker在范围内选择可用端口
上述就是通过仅指定容器端口而不指定主机端口来实现,这样,Docker 会自动为你选择一个可用的主机端口映射到容器的8090端口。
关于容器的负载均衡,后面单独来写。
12、docker-compose -f
指定配置文件。
docker-compose -f [file_name.yml] [command]
# 可以指定多个文件
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
完毕。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。