46人参与 • 2024-08-01 • 微服务
本文主要介绍了docker compose核心原理,docker compose的编写以及常用指令,可以对docker compose有个整体的框架
docker-compose是docker官方的开源项目,负责实现对docker多容器编排管理系统。使用 docker-compose,可以用一个 yaml 文件定义一组要启动的容器,以及容器运行时的属性。docker-compose的工程配置文件默认为docker-compose.yml,docker compose 的前身是 fig,现阶段 docker compose 是 docker 官方的单机多容器管理系统,它本质是一个python 脚本,它通过解析用户编写的 yaml 文件,调用 docker api 实现动态的创建和管理多个容器。
类似于开发中前后端,docker-compose由如下几个部分组成
其中services需要解决以下四类问题:
image指令用于指定dockerfile创建镜像的名称,也可以使用docker hub或其它镜像仓库中的镜像名称。示例:
services:
web:
image: nginx:latest
build指令用于构建镜像,需要指定dockerfile文件的位置,以及镜像名称和版本等信息。示例:
services:
web:
build:
context: .
dockerfile: dockerfile
image: mynginx:latest
container_name指令用于指定容器的名称,不设置默认为服务名称。示例:
services:
web:
image: nginx:latest
container_name: mynginx
depends_on指令用于设置服务之间的依赖关系,即该服务需要在其所依赖的服务启动之后才能启动。示例:
services:
db:
image: mysql:latest
web:
image: nginx:latest
depends_on:
- db
links指令用于设置容器之间的连接关系,即从一个容器中访问另一个容器。示例:
services:
db:
image: mysql:latest
web:
image: nginx:latest
links:
- db:mysql
ports指令用于将容器内的端口映射到宿主机的端口,以实现对外服务的访问。示例:
services:
web:
image: nginx:latest
ports:
- 8080:80
volumes指令用于将容器内的目录或文件映射到宿主机的目录或文件,以实现数据的持久化。示例:
services:
db:
image: mysql:latest
volumes:
- ./data:/var/lib/mysql
$ 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
#指定 docker-compose.yml 文件的版本
version: '3.3'
# 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
# 定义容器重启策略
restart: always
# 设置环境变量, environment 的值可以覆盖 env_file 的值
environment:
mysql_root_password: somewordpress
mysql_database: wordpress
mysql_user: wordpress
mysql_password: wordpress
wordpress:
#docker-compose up 以依赖顺序启动服务,先启动db
depends_on:
- db
image: wordpress:latest
# 建立宿主机和容器之间的端口映射关系,容器的 80 端口和宿主机的 8000 端口建立映射关系
ports:
- "8000:80"
restart: always
environment:
wordpress_db_host: db:3306
wordpress_db_user: wordpress
wordpress_db_password: wordpress
wordpress_db_name: wordpress
# 定义容器和宿主机的卷映射关系, 其和 networks 一样可以位于 services 键的二级key和 compose 顶级key, 如果需要跨服务间使用则在顶级key定义, 在 services 中引用
volumes:
db_data: {}
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论