一个简单的docker-compose的示例

更新于 2023-04-11 22:18 92
专栏: Docker 标签: docker

代码是由ChatGPT生成,可以根据自己的需求进行改进

代码

  1. version: "3" # docker-compose版本号
  2. services: # 定义多个服务
  3. web: # 第一个服务名为web
  4. build: # 使用Dockerfile构建镜像
  5. context: . # 构建上下文为当前目录
  6. dockerfile: Dockerfile # Dockerfile文件名为Dockerfile
  7. ports: # 端口映射
  8. - "8080:80" # 将容器内部的80端口映射到主机的8080端口
  9. depends_on: # 依赖关系
  10. - db # web服务依赖于db服务
  11. environment: # 环境变量
  12. MYSQL_HOST: db # MySQL服务器的主机名为db
  13. MYSQL_USER: sample_user # MySQL用户名为sample_user
  14. MYSQL_PASSWORD: sample_password # MySQL密码为sample_password
  15. MYSQL_DATABASE: sample_db # MySQL数据库名为sample_db
  16. db: # 第二个服务名为db
  17. image: mysql:5.7 # 使用官方提供的MySQL 5.7镜像
  18. volumes: # 卷挂载
  19. - db_data:/var/lib/mysql # 挂载卷db_data到/var/lib/mysql
  20. environment: # 环境变量
  21. MYSQL_ROOT_PASSWORD: root_password # MySQL root用户密码为root_password
  22. MYSQL_DATABASE: sample_db # MySQL数据库名为sample_db
  23. MYSQL_USER: sample_user # MySQL用户名为sample_user
  24. MYSQL_PASSWORD: sample_password # MySQL密码为sample_password
  25. volumes: # 定义卷
  26. db_data: # 卷名称为db_data

解释

在这个示例中,我们定义了两个服务:web和db,以及一个卷db_data。

web服务使用当前目录中的Dockerfile构建镜像,并将容器内部的80端口映射到主机上的8080端口。该服务还依赖于db服务,以便能够与MySQL数据库进行交互。我们还设置了一些环境变量来配置MySQL连接信息,如MySQL服务器的主机名、用户名、密码和数据库名等。

db服务使用了官方提供的MySQL 5.7镜像,并将MySQL数据挂载到了一个卷db_data上,以便能够持久化保存数据库数据。此外,我们还设置了一些环境变量来配置MySQL的root密码、数据库名、用户名和密码等。

值得注意的是,depends_on选项只是告诉docker-compose在启动web服务之前先启动db服务,但并不能保证db服务已经完全就绪。因此,在实际应用中,我们应该使用一些工具来校验数据库是否已经正常启动。例如,在web服务中可以使用wait-for-it.sh脚本等待MySQL服务器可用后再启动应用程序。

总的来说,这个示例展示了如何使用docker-compose构建多个服务,并通过卷和环境变量等方式来进行配置。同时,它也强调了依赖关系的重要性,以及需要使用其他工具来确保服务之间的正确交互。

运行

启动

  1. docker-compose up -d

该命令会启动两个服务:web和db。其中,-d选项表示以后台模式运行服务。

停止

  1. docker-compose down

该命令会停止并移除所有相关服务和容器,并删除卷db_data。

BLOG

搜索文章