狂神jetson nano Docker进阶篇学习笔记(二)

目录

Docker Compose yaml规则

编写文件结构和示例

依赖于

开源项目快速入门:撰写和 WordPress

定义项目

构建项目

在网络浏览器中启动 WordPress

关闭和清理

实战

总结 


学习通道:【狂神说Java】Docker进阶篇超详细版教程通俗易懂

docker官网:Docker Documentation | Docker Documentation

docker hun:Docker Hub


Docker Compose yaml规则


官方规则配置参考:Compose file version 3 reference | Docker Documentation

编写文件结构和示例

# 一共有3层!
version: "3.9"            # 版本
services:                 # 服务
  # 服务1:redis
  redis:
    # 服务配置:image、posts、network、deploy
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  # 服务2:db
  db:
    # 服务配置:image、network、deploy
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        max_replicas_per_node: 1
        constraints:
          - "node.role==manager"
  # 服务3:vote
  vote:
    # 服务配置:image、posts、network、deploy、depends_on
    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
  # 服务4:result
  result:
    # 服务配置:image、posts、network、deploy、depends_on
    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
  # 服务5:worker
  worker:
    # 服务配置:image、network、deploy
    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"
  # 服务6:visualizer
  visualizer:
    # 服务配置:image、posts、volumes、deploy
    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:

依赖于

表示服务之间的依赖关系。服务依赖会导致以下行为:

  • docker-compose up按依赖顺序启动服务。在下面的例子中,dbredis在 之前启动web
  • docker-compose up SERVICE自动包含SERVICE的依赖项。在下面的示例中,docker-compose up web还创建并启动dbredis
  • docker-compose stop按依赖顺序停止服务。在以下示例中,webdb和之前停止redis

简单的例子:

version: "3.9"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

要想快速掌握yaml,就得多看多写yaml配置!

1、官方文档

Compose file version 3 reference | Docker Documentation

2、开源项目compose.yaml

redis、mysql、mq!

开源项目快速入门:撰写和 WordPress

定义项目

  1. 创建一个空的项目目录。例如,my_wordpress
  2. 切换到新建的项目目录
    cd my_wordpress/
  3. 创建一个docker-compose.yml文件来启动您的 WordPress博客和一个单独的MySQL实例,该实例具有用于数据持久性的卷挂载:
    version: "3.5"
        
    services:
      db:
        #虚拟机安装mysql,nano安装mysql/mysql-server
        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将 WordPress 对数据库以及已安装的主题和插件进行的更新卷db_data和wordpress_data持久化。了解有关 docker 卷的更多信息

    WordPress Multisite 仅适用于端口80和443.

构建项目

现在,docker-compose up -d从您的项目目录运行。

docker-compose up以分离模式运行,拉取所需的 Docker 镜像,并启动 wordpress 和数据库容器,如下面的示例所示。

docker-compose up -d
Pulling db (mysql/mysql-server:latest)...
latest: Pulling from mysql/mysql-server
78f907cdf4ab: Pull complete
035805736c03: Pull complete
<...>
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
789c1836f59f: Pull complete
c80326e90121: Pull complete
<...>
Status: Downloaded newer image for wordpress:latest
Creating mywordpress_db_1 ... 
Creating mywordpress_db_1 ... done
Creating mywordpress_wordpress_1 ... 
Creating mywordpress_wordpress_1 ... done
Attaching to mywordpress_db_1, mywordpress_wordpress_1

注意:WordPress Multisite 仅适用于端口80和/或443. 如果您收到有关绑定0.0.0.0到端口80443 (取决于您指定的端口)的错误消息,则您为 WordPress 配置的端口可能已被其他服务使用。

在网络浏览器中启动 WordPress

此时WordPress应该运行在8000你的Docker Host的端口上,你可以以WordPress管理员的身份完成“著名的五分钟安装”。

注意: WordPress 站点不能立即在端口上使用,8000 因为容器仍在初始化,在第一次加载之前可能需要几分钟。

如果您使用的是 Docker Desktop for Mac 或 Docker Desktop for Windows,您可以将其 http://localhost用作 IP 地址,并http://localhost:8000在 Web 浏览器中打开。

狂神jetson nano Docker进阶篇学习笔记(二)

狂神jetson nano Docker进阶篇学习笔记(二) 

关闭和清理

该命令docker-compose down会删除容器和默认网络,但会保留您的 WordPress 数据库。

该命令docker-compose down --volumes将删除容器、默认网络和 WordPress 数据库。

实战

  1. 编写项目微服务
    新建工程
    狂神jetson nano Docker进阶篇学习笔记(二)狂神jetson nano Docker进阶篇学习笔记(二)
    新建包和类文件
    狂神jetson nano Docker进阶篇学习笔记(二)
    编写java代码
    package com.example.demo.Controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
        @Autowired
        StringRedisTemplate redisTemplate;
    
        @GetMapping("/hello")
        public String hello(){
            Long views = redisTemplate.opsForValue().increment("views");
            return "hello,Ajj,thank you,views"+views;
        }
    }
    

    狂神jetson nano Docker进阶篇学习笔记(二)
     
  2. Dockerfile构建镜像
    #虚拟机安装java:8
    FROM java:8
    #nano安装jopenjdk
    FROM openjdk:11.0.10-jdk-oraclelinux7
    
    
    COPY *.jar /app.jar
    
    CMD ["--server.port=8080"]
    
    EXPOSE 8080
    
    ENTRYPOINT ["java","-jar","/app.jar"]
  3. docker-compose.yml编排项目
    version: '3.5'
    services:
      ajjapp:
        build: .
        image: ajjapp
        depends_on:
          - redis
        ports:
        - "8080:8080"
      redis:
        image: "library/redis:alpine"
  4. 将jar包、Dockerfile、docker-compose.yml上传到服务器或者虚拟机上
    狂神jetson nano Docker进阶篇学习笔记(二)
  5. docker-compose up启动项目
    狂神jetson nano Docker进阶篇学习笔记(二)狂神jetson nano Docker进阶篇学习笔记(二)搞定! 

 

总结 

简而言之:Compose项目会有多个工程,工程上会有多个服务,每个服务会运行成容器

Compose项目工程会有三层:

  • 工程project
  • 各种服务
  • 容器运行示例

 至此docker-compose了解到这,nice!

上一篇:重新认识Docker Compose-Sidecar


下一篇:Docker 15 Compose