Docker-Docker Compose
docker compose 常用命令
- docker-compose up -d:后台启动容器。
- docker-compose down:停止并删除容器、网络和卷(如果使用–volumes选项)。
- docker-compose start:启动服务。
- docker-compose stop:停止服务。
- docker-compose restart:重启服务。
- docker-compose logs:查看容器日志。
- docker-compose ps:列出所有容器。
- docker-compose config:检查docker-compose.yml文件的配置。
docker-compose.yml
version: '3.8'
services:
aspnetcore:
restart: always
image: fan/aspnetcore
container_name: aspnetcore4
ports:
- 8080:80
environment:
- "ASPNETCORE_ENVIRONMENT=Production"
volumes:
- /app:/app1
version(可省略)
docker-compose的version需要选择和docker引擎对应的版本,
查看docker引擎版本:docker -v
查看docker-compose版本与docker引擎版本对应关系:https://docs.docker.com/compose/compose-file/compose-file-v3/
services
服务,每个容器就是一个服务,一个服务可以有多个负载容器
image
指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。
如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中重复设置。
restart
no:是默认的重启策略,在任何情况下都不会重启容器。
always:容器总是重新启动。
on-failure:在容器非正常退出时(退出状态非0),才会重启容器。(推荐)
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
ports
暴露端口信息。
使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
ports:
- 3000 //宿主机随机端口
- 8000:8000
- 127.0.0.1:8001:8001
build
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
version: '3'
services:
webapp:
build: ./dir
你也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。使用 dockerfile 指令指定 Dockerfile 文件名。
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
container_name
指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。
container_name: docker-web-container
command
覆盖容器启动后默认执行的命令。
command: echo "hello world"
depends_on
解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
注意:web 服务不会等待 redis db 「完全启动」之后才启动。
networks
配置容器连接的网络。
version: "3"
services:
some-service:
networks:
- some-network
- other-network
networks:
some-network:
other-network:
links
不推荐
external_links
链接到 docker-compose.yml 外部的容器,甚至并非 Compose 管理的外部容器。
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
healthcheck
通过命令检查容器是否健康运行。
healthcheck:
test: curl --fail http://localhost:5000/xxxx || exit 1
interval: 40s
timeout: 30s
retries: 3
start_period: 60s
volumes
它的作用是,将宿主机上的数据与容器内的数据形成映射,实现数据的共享或者数据的保存;当删除容器的时候,在宿主机上仍然能够保留文件目录,这就是Volume,数据卷。
docker实现数据挂载的方式本质上分为两种:
- 通过宿主机绝对路径挂载
#docker
Docker run itd -v 宿主机路径:容器路径 Image
# docker-compose.yaml
services:
service-name:
volumes:
- 宿主机路径:容器路径
- 通过卷标映射挂载(又包括匿名挂载与具名挂载)
当使用卷标的方式进行数据挂载的时候,容器数据具体存放在宿主机的什么路径其实并不直观,但是docker提供了方法查看数据卷的宿主机目录,具体查看的方法如下,后文会在引例中直观说明。
#查看所有的数据卷
sudo docker volume ls
#查看指定数据卷的详细信息
sudo docker volume inspect 数据卷名称
匿名挂载:
#docker
docker run -itd -v 容器路径 -name 容器名镜像
# docker-compose.yaml
services:
service_name:
volumes:
-容器路径

这种情况下,我们可以看到,当我们通过docker volume ls查看卷标的时候,我们只能查看到其对应的“匿名”的数据卷。
如果我们使用命令docker volume inspect 数据卷查看一个数据卷的详细信息,可以看出其挂载点实际是在/var/lib/docker/volumes/
具名挂载:
# docker
docker run -itd -v数据卷名称:容器路径 -name容器名镜像
# docker-compose.yaml
services:
service_name:
volumes:
- 数据卷名称:容器路径
volumes:
数据卷名称:
environment
添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。
environment:
RACK_ENV: development
SHOW: 'true'
expose
expose 定义的端口对同一 Docker Compose 网络中的其他服务是可见的,但并不将这些端口映射到主机上。这意味着只有在同一网络上的容器才能通过指定的端口访问这些服务。
expose:
- "3000"
- "8000"

浙公网安备 33010602011771号