ROLL-BLOG

  • 博客首页
  • 个人主页
  • 留言板
  • 在线工具
  • 关于我
ROLL
纸上得来终觉浅,绝知此事要躬行
  1. 首页
  2. 前端开发
  3. 正文

【学个新技术】十一、Docker Docker-Compose

9月 27, 2021 5937点热度 1人点赞 0条评论

一、简介

Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

它的定位是【定义和运行多个Docker容器的应用】,其前身是开源项目Fig. 同时可以对多个容器进行编排。

二、核心概念

服务:一个应用的容器,服务可以存在多个

项目:由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

三、Compose 使用

a、下载docker-compost

curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

下载可能很慢,可以直接去github下载,https://github.com/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64,

将下载的docker-compose放入/usr/local/bin/docker-compose

添加权限:sudo chmod +x /usr/local/bin/docker-compose

查看版本 docker-compose -v

四、模板命令总结

services:
    服务id:
        build: #启动服务时先将build命令中指定Dockerfile打包成镜像,再运行该镜像
      context: demo # 指定上下文目录dockerfile所在目录
      dockerfile: Dockerfile
        image: # 使用镜像是谁, image:tag image image:@digest
        container_name: # 服务启动之后容器名称 相当于docker run 之后的 --name
        ports: # 用来指定容器与宿主机端口映射 相当于docker run之后的 -p
            - "808:8080"
        volumes: # 用来指定容器中目录与宿主机目录进行数据卷映射 docker run 之后的 -v
            - /root/apps:容器内路径
            - aa(自动):容器内路径 注意:一旦使用卷名自动,必须通过volumes进行声明
        networks: # 用来指定容器使用的是哪个网桥 docker run --networks
            - ems (网桥名称自动创建)注意:一旦指定网桥,必须通过network进行声明
        environment: # 用来给容器中某些环境进行赋值操作
            - MYSQL_ROOT_PASSWORD=root
        env_file:# 用来给容器中某些环境进行赋值操作,将环境变量赋值转移到配置文件中
            - mysql_env 文件中内容必须是MYSQL_ROOT_PASSWORD=root
        command: redis-server /usr/redis/conf/redis.conf # 用来覆盖容易自动默认指令
        depends_on: #用来指定当前服务启动依赖哪些服务,依赖的服务会在当前服务之前优先启动
            - mysql
            - redis
        healthcheck: #心跳机制
            healthcheck: #心跳检查
      test: ["CMD","curl","-f","http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3
    sysctls: #用来修改容器中系统内部参数,并不是必须,有些服务启动受容器内操作系统参数限制可能会无法启动必须通过修改容器中参数才能启动
      - net.corn.somaxconn=1024
      - net-ipv4.tcp_syncookies=0
    ulimits: # 用来修改容器中系统内部进程数限制 日后使用时可根据当前容器运行服务要求进行修改
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000

volumes:
    aa: 
networks:
    ems:

五、Hello world 程序

docker-compose.yml

version: "3.8" # 官方网址:https://docs.docker.com/engine/reference/builder  支持3.8
services: # 用来书写当前项目中哪些容器 服务
  demo:
    build: #启动服务时先将build命令中指定Dockerfile打包成镜像,再运行该镜像
      context: demo # 指定上下文目录dockerfile所在目录
      dockerfile: Dockerfile
    container_name: demo # 指定构建成功之后的镜像后面的运行名称
    ports:
      - "8082:8080"
    network_mode:
      -  hello
    depends_on:
      - tomcat01

  tomcat01: # 服务名称
    image: tomcat:8.0-jre8 # 指定使用镜像  iamge:tag
    container_name: tomcat01 # 指定启动时容器名称 --name
    ports: # 指定容器端口与宿主机端口映射 -p
      - "8080:8080"
    volumes: # 指定容器中哪个路径与宿主机中路径进行数据卷映射
#      - /root/apps:/usr/local/tomcat/webapps
      - tomcatwebapps01:/usr/local/tomcat/webapps
    networks: # 指定容器启动之后使用哪个网桥 --network
      - hello
    depends_on: # 代表这个容器必须依赖哪些容器启动之后can呢个启动
      - tomcat02 # 书写的是服务名
      - redis
      - mysql
    healthcheck: #心跳检查
      test: ["CMD","curl","-f","http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3
    sysctls: #用来修改容器中系统内部参数,并不是必须,有些服务启动受容器内操作系统参数限制可能会无法启动必须通过修改容器中参数才能启动
      - net.corn.somaxconn=1024
      - net-ipv4.tcp_syncookies=0
    ulimits: # 用来修改容器中系统内部进程数限制 日后使用时可根据当前容器运行服务要求进行修改
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000

  tomcat02: # 服务名称
    image: tomcat:8.0-jre8 # 指定使用镜像  iamge:tag
    container_name: tomcat02 # 指定启动时容器名称 --name
    ports: # 指定容器端口与宿主机端口映射 -p
      - "8081:8080"
    volumes: # 指定容器中哪个路径与宿主机中路径进行数据卷映射
#      - /root/apps:/usr/local/tomcat/webapps
      - tomcatwebapps02:/usr/local/tomcat/webapps
    networks: # 指定容器启动之后使用哪个网桥 --network
      - hello
    healthcheck: #心跳检查
      test: ["CMD","curl","-f","http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3

  mysql: #服务名称
    image: mysql:5.7.32
    container_name: mysql
    ports:
      - "3307:3306"
    volumes:
      - mysqldata:/var/lib/mysql
      - mysqlconf:/etc/mysql
    #environment:
    #  - MYSQL_ROOT_PASSWORD=root
    env_file: #用来将environment环境中配置放入指定文件中 mysql.env 的内容 请查看下文
      - mysql.env
    networks:
      - hello
    healthcheck: #心跳检查
      test: ["CMD","curl","-f","http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3

  redis: #服务名称
    image: redis:5.0.10
    container_name: redis
    ports:
      - "6380:6379"
    volumes:
      - redisdata:/data
    networks:
      - hello
    command: "redis-server --appendonly yes" # run 镜像之后用来覆盖容器内容默认命令
    healthcheck: #心跳检查
      test: ["CMD","curl","-f","http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3

volumes: #定义服务所使用到的卷名
  tomcatwebapps01: # 服务中使用到的volume变量需要在这里定义 compose自动创建该卷名但是会在之前加上项目名
    external: # 使用自定义卷名
      false  # true确定使用指定卷名,注意:一旦使用外部自定义卷名启动服务之前必须手动创建
  tomcatwebapps02:
  mysqldata:
  mysqlconf:
  redisdata:

networks: #定义服务用到的网桥
  hello: # 服务中使用到的网桥变量需要在这里定义
    external:
      false  # true确定使用指定卷名,注意:一旦使用外部自定义卷名启动服务之前必须手动创建

mysql.env:

MYSQL_ROOT_PASSWORD=root

六、docker-compose 指令

1、模板指令和指令

模板指令:用来书写在docker-compose.yml文件中指令称之为模板指令,用来为服务进行服务的

指令:用来对整个docker-compose.yml对应的这个项目操作,书写docker-compose命令之后的命令

​ docker-compose up(指令)

2、常用指令

  • up 指令

    作用:用来启动所有docker-compose 服务

    选项:-d 后台启动所有服务

  • down 指令

    作用:用来关闭所有docker-compose服务,并移除自动创建的网桥

  • exec 指令

    作用:进入容器

    docker-compose exec 服务id(redis) bash

  • ps 指令

    作用:用来展示当前docker-compose运行的所有容器

    ​ docker-compse ps

  • restart 指令

    作用: 用来重启项目中某个服务如果不写服务id ,默认重启所有服务

    ​ docker-compose restart [服务id]

  • rm 指令

    作用:用来删除项目服务

    ​ docker-compose rm -fv 注意:谨慎操作,-v会删除服务的数据卷

  • start / stop 指令

    作用:启动和停止服务

    ​ docker-compose start 服务id

    ​ docker-compose stop 服务id,不会移除网桥

  • top 指令

    作用:用来查看compose容器中的进程

    ​ docker-compose top 【服务id】

  • pause / unpause 指令

    作用:暂停和恢复服务

    ​ docker-compose pause 【服务id】

    ​ docker-compose unpause 【服务id】

  • logs 指令

    作用:查看日志信息

    ​ docker-compose logs【服务id】

七、docker可视化工具 portainer

1、下载可视化

​ docker pull portainer/portainer

2、启动portainer

docker run -d 
                     -p 8000:8000
                     -p 9000:9000
                     --name=portanier
                     --restart=always # 停止就重启
                     -v /var/run/docker.sock:/var/run/docker.sock
                     -v portainer_data:/data
                     portainer/portainer

# 执行如下命令
docker run -d -p 8000:8000 -p 9000:9000 --name=portanier --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

3、查看后台管理

http://10.211.55.3:9000/#/containers

标签: Docker 前端开发 后端开发 学个新技术
最后更新:10月 21, 2021

穆仙念

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

取消回复
文章目录
  • 一、简介
  • 二、核心概念
  • 三、Compose 使用
  • 四、模板命令总结
  • 五、Hello world 程序
  • 六、docker-compose 指令
  • 七、docker可视化工具 portainer
最新 热点 随机
最新 热点 随机
太懒了,所以用小爱开楼下的门禁 做个自己的APP?段子乐开放API今日发布 使用NPS搭建内网穿透服务,限时开放 Jetpack系列之App Startup从入门到出家 一、【Mac新机安装】IntelliJ Idea 2020 破解安装.md 【学个新技术】六、SpringCloud 服务注册中心组件-eureka client
【需求解决系列之二】回款日历的实现 【学个新技术】十、Docker idea docker插件和远程访问 【学个新技术】二、Docker镜像相关操作 【学个新技术】三、SpringCloud 微服务环境父项目搭建 【为生活开发系列之三】Android屏幕适配资源文件批量分类工具 勇敢跨越,从0到1开发一个属于自己的App
最近评论
654 发布于 2 个月前(12月06日) 麻烦问下,2023年的万年历什么时候可以出来
0605 发布于 2 个月前(11月29日) 2023年的日历信息还未维护吗?
w 发布于 2 个月前(11月21日) 你好,报请求频繁咋解决?
minky 发布于 2 个月前(11月21日) 申请的appid 按照公众号复制了,还是提示不合法,用不了
Guilt 发布于 2 个月前(11月17日) 获取到驾考列表,但获取不了答案 控制台说是被策略阻止了
书签
  • CSDN
  • Github
  • 傻瓜记账APP
  • 在线工具
  • 掘金
  • 段子乐APP
  • 简书
  • 通用免费API
标签聚合
前端开发 SpringCloud 就是喜欢玩儿 指南 解决需求 后端开发 Docker 学个新技术

Copyright © 2017-2021 All Rights Reserved.

THEME KRATOS MADE BY VTROIS

鄂ICP备17026449号-2