前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker Compose学习之docker-compose.yml编写规则 及 实战案例

Docker Compose学习之docker-compose.yml编写规则 及 实战案例

作者头像
鳄鱼儿
发布2024-05-22 09:10:10
3010
发布2024-05-22 09:10:10
举报

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

编写规则

官方文档:docs.docker.com/compose/com…

主要分为三层

代码语言:javascript
复制
# 第一层 版本,与docker版本对应,向下兼容。最新为3.9
version: '3.9'
# 第二层 服务
services: 
  # 服务一
  web:
    # 服务配置
    images:
    bulid:
    ports:
    network:
    ...
  redis:
    ...
  mysql:
    ...

# 第三层 其他配置,如:网络、数据卷、全局配置
networks:
  frontend:
  backend:
volumes:
  db-data:
configs:

官方实例

可根据上述三层,参考下官方例子

代码语言:javascript
复制
version: "3.9"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        max_replicas_per_node: 1
        constraints:
          - "node.role==manager"

  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - "5000:80"
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure

  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - "5001:80"
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints:
          - "node.role==manager"

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"

networks:
  frontend:
  backend:

volumes:
  db-data:

实战案例

搭建一个WordPress博客。

官方文档:docs.docker.com/samples/wor…

创建文件夹

用来存放项目文件

代码语言:javascript
复制
mkdir -p /test/wordpress
cd /test/wordpress

docker-compose.yml

创建docker-compose.yml文件

代码语言:javascript
复制
vim docker-compose.yml

输入以下内容

代码语言:javascript
复制
version: "3.9"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

启动Docker Compose

代码语言:javascript
复制
# 前台启动
docker-compose up
# 后台启动
docker-compose up -d

前台启动,Ctrl+c就能停止

后台启动成功

访问

浏览器ip:8000,如我的192.168.227.3:8000

Docker Compose配置springboot微服务项目

新建Springboot项目

controller类

每访问一次,更新redis中数据,并在前端展示出来。

代码语言:javascript
复制
/**
 * @author ber
 * @version 1.0
 * @date 21/8/30 15:12
 */
@RestController
public class HelloController {
    @Autowired
    StringRedisTemplate redisTemplate;

    @GetMapping("/")
    public String hello() {
        final Long count = redisTemplate.opsForValue().increment("count");
        return "Hello ber, thanks. views: " + count;
    }
}

application.yml

redis的ip直接配置成redis

代码语言:javascript
复制
server:
  port: 8001
spring:
  redis:
  host: redis

创建Dockerfile

代码语言:javascript
复制
FROM java:8

COPY *.jar /app.jar

CMD ["--server-port=8001"]

EXPOSE 8001

ENTRYPOINT ["java", "-jar", "/app.jar"]

创建docker-compose.yml

代码语言:javascript
复制
version: "3.9"
services:
  berapp:
    image: berapp
    build: .
    depends_on:
      - redis
    ports:
      - "8001:8001"
    stdin_open: true
    tty: true
  redis:
    image: "redis:alpine"

将项目jar包、Dockerfile、docker-compose.yml上传服务器

代码语言:javascript
复制
mkdir /test/berapp
cd /test/berapp

将项目jar包、Dockerfile、docker-compose.yml上传至/test/berapp

启动Docker Compose

代码语言:javascript
复制
# 前台运行
docker-compose up
# 后台运行
docker-compose up -d
# 再次运行可尝试使用 –build:在启动容器前构建服务镜像
docker-compose up --build

没出现exited 或 error字样,就基本上表示成功运行啦

访问试试效果。我这里直接通过curl指令访问了,浏览器通过ip:8001端口访问也是可以的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编写规则
    • 官方实例
    • 实战案例
      • 搭建一个WordPress博客。
        • 创建文件夹
        • docker-compose.yml
        • 启动Docker Compose
        • 访问
      • Docker Compose配置springboot微服务项目
        • 新建Springboot项目
        • controller类
        • application.yml
        • 创建Dockerfile
        • 创建docker-compose.yml
        • 将项目jar包、Dockerfile、docker-compose.yml上传服务器
        • 启动Docker Compose
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档