Docker Compose 使用
Docker Compose 使用
Compose 简介
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
使用
# yaml 配置
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
该 Compose 文件定义了两个服务:web 和 redis。
- web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。
- redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
参数
context:上下文路径。
dockerfile:指定构建镜像的 Dockerfile 文件名。
args:添加构建参数,这是只能在构建过程中访问的环境变量。
labels:设置构建镜像的标签。
target:多层构建,可以指定构建哪一层。
command
覆盖容器启动的默认命令。
command: ["bundle", "exec", "thin", "-p", "3000"]
container_name
指定自定义容器名称,而不是生成的默认名称。
container_name: my-web-container
logging
容器日志设置
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
remove: true
depends_on
设置依赖关系。
- docker-compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。
- docker-compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker-compose up web 还将创建并启动 db 和 redis。
- docker-compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。
version: "3.7"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
networks
方法二:使用自定义网络
version: "3"
services:
your_service:
image: your_image
network_mode: "host" # 这样容器将与主机共享网络命名空间 且 ports 将不再生效
方法二:使用自定义网络
version: "3"
services:
your_service:
image: your_image
networks:
- custom_network
networks:
custom_network:
driver: bridge
在这个例子中,your_service
将连接到 custom_network
网络。你可以使用容器的名称或 IP 地址来访问服务。例如,如果你的容器名称是 your_service
,你可以使用 http://your_service:container_port
来访问服务。
选择哪种方法取决于你的需求和安全考虑。如果只是需要快速访问主机上的端口,使用 "host" 网络模式可能更方便。如果你想更好地控制网络连接并保持更好的隔离性,可以选择使用自定义网络。
environment
设置环境变量 等于 docker run -e MY_VARIABLE=my_value my_image
version: '3'
services:
my_service:
image: my_image
environment:
- MY_VARIABLE=my_value
- ANOTHER_VARIABLE=another_value
# 顶层设置等于给所有启动容器用
environment:
- COMMON_VARIABLE=common_value
extra_hosts
添加主机名映射。类似 docker client --add-host。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
以上会在此服务的内部容器中 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系:
162.242.195.82 somehost
50.31.209.229 otherhost
# 实际ip 映射ip
最佳实例
docker-compose.yml
version: '3'
services:
my-container:
image: nginx:latest
container_name: nginx
environment:
- USER=RENOYUAN
volumes:
- ./shared:/app/shared
network_mode: "host"
ports:
- "1102:1102"
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
remove: true
使用 Compose 命令运行应用
在 docker-compose.yml 目录下运行
启动容器
docker-compose up -d -v my-service
# 可选参数 -d 后台启动 -v 删除容器卷 my-service 只操作里面指定服务
关闭/删除容器
docker-compose down
重启服务
docker-compose restart
暂停服务
docker-compose pause
恢复服务
docker-compose unpause
其他
关于YML
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
YAML 的配置文件后缀为 .yml,如:runoob.yml 。
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释