Docker Compose基础与实战

news2024/9/20 18:51:49

一、是什么

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

二、能做什么

  • Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
  • 可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。

三、安装

  1. 现在Docker Compose。

    curl -SL https://github.com/docker/compose/releases/download/v2.19.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    
  2. 赋权限。

    chmod +x /usr/local/bin/docker-compose
    
  3. 测试。

    docker-compose --version
    

四、核心概念

服务:一个个应用容器实例,也就是说我们要用到的所有容器

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

五、常用命令

命令作用
docker-compose -h查看帮助
docker-compose up动所有docker-compose服务
docker-compose up -d启动所有docker-compose服务并后台运行
docker-compose down停止并删除容器、网络、卷、镜像
docker-compose exec yml里面的服务id进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps展示当前docker-compose编排过的运行的所有容器
docker-compose top展示当前docker-compose编排过的容器进程
docker-compose logs yml里面的服务id查看容器输出日志
docker-compose config检查配置
docker-compose config -q检查配置,有问题才有输出
docker-compose restart重启服务
docker-compose start启动服务
docker-compose stop停止服务

六、使用

使用过程主要分为三个步骤

  • 编写Dockerfile定义各个微服务应用并构建出相应的镜像文件。
  • 编写docker-compose.yml定义一个完整业务单元,并安排好整体应用中的各个容器服务。
  • 执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线。

下面我将用一个小案列来加深理解

项目下载地址: https://www.aliyundrive.com/s/9djHR3Hj3H1

完成该项目的前提是要拥有Java8,mysql,redis的镜像,mysql的版本是5.7,redis的版本是6.0.8。

项目修改

修改配置,我们自己使用自己创建的docker网络可以实现配置文件不需要写IP就可以直接通讯。

在这里插入图片描述
重新打包把项目传到自己的服务器上。
在这里插入图片描述

编写Dockerfile

# 基础镜像使用java

FROM java:8

# 作者

MAINTAINER sveinn

# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp

VOLUME /tmp

# 将jar包添加到容器中并更名为zzyy_docker.jar

ADD docker_boot-0.0.1-SNAPSHOT.jar sveinn_docker.jar

# 运行jar包

RUN bash -c 'touch /svienn_docker.jar'

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

#暴露6001端口作为微服务

EXPOSE 6001

编写docker-compose.yml文件

version: "3"

 

services:

  microService:

    image: sveinn_docker:1.6

    container_name: ms01

    ports:

      - "6001:6001"

    volumes:

      - /app/microService:/data

    networks: 

      - my_net 

    depends_on: 

      - redis

      - mysql

 

  redis:

    image: redis:6.0.8

    container_name: redis68

    ports:

      - "6379:6379"

    volumes:

      - /app/redis/redis.conf:/etc/redis/redis.conf

      - /app/redis/data:/data

    networks: 

      - my_net

    command: redis-server /etc/redis/redis.conf

 

  mysql:

    image: mysql:5.7

    container_name: mybatis57

    environment:

      MYSQL_ROOT_PASSWORD: 'root'

      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'

      MYSQL_DATABASE: 'docker_boot'

      MYSQL_USER: 'sveinn'

       

       - "3306:3306"

    volumes:

       - /app/mysql/db:/var/lib/mysql

       - /app/mysql/conf/my.cnf:/etc/my.cnf

       - /app/mysql/init:/docker-entrypoint-initdb.d

    networks:

      - my_net

    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

 

networks: 

   my_net: 

部署服务

构建镜像

docker build -t svein_docker:1.6 .

执行命令一键部署

docker-compose up -d

数据处理

进入mysql容器构建数据

docker exec -it mysql57 /bin/bash

创建数据库和表,我是直接在mysql直接执行sql语句也可以执行直接执行sql脚本。

 mysql -uroot -p
 create database boot_docker;
 use boot_docker;
CREATE TABLE `t_user` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户名',
  `password` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '密码',
  `sex` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '性别 0=女 1=男 ',
  `deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',
  `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

测试

访问swagger地址http://服务器地址:服务端口号/swagger-ui.html#/,注意把swagger地址换成自己服务器的地址,端口号改成自己服务器的端口号。
在这里插入图片描述
能成功进到swagger而且能添加数据和查询数据就说明该项目成功部署。

七、总结

本文介绍了用docker-compose解决了用docker部署的要多次构建容器的痛点,解决方式就是在docker-compose文件定义好项目所需要的容器和一些配置。直接用一个命令就可以构建多个容器,实现对Docker 容器集群的快速编排。介绍了一些简单的命令以及如何安装docker-compose,同时还用一个简单的部署实例来加深对docker-compose的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单链表的简介与实现(Java)

一、前言 线性结构的链式存储是用若干地址分散的存储单元存储数据元素,逻辑上相邻的两个数据元素在物理位置上并不一定相邻,必须采用附加信息来表示数据元素之间的顺序关系。因此存储一个数据元素的数据单元至少包含两部分------数据域和地址域 上述的结…

java简易计算器的设计

简易计算器的设计 1.1实训内容 模仿Windows自带的标准版计算器,设计并用Java语言实现简易的计算器(根据自己的能力,可以适当地增加或删除部分功能)。 最低要求: 计算器运行界面如下图所示,包含二个文本框…

Android Binder通信原理(七):java 下的C-S

源码基于:Android R 0. 前言 在之前的几篇博文中,对Android binder 的通信原理进行的深入的剖析,这些博文包括:binder 简介、servicemanager启动、service注册、service获取、Java 端的service 注册和获取。 在前一文中&#xf…

PostgreSQL处理JSON数据

源:https://blog.csdn.net/c_zyer/article/details/130968257?ops_request_misc&request_id&biz_id102&utm_termPostgreSQL%20%E7%9A%84JSON%20%E5%A4%84%E7%90%86&utm_mediumdistribute.pc_search_result.none-task-blog-2allsobaiduweb~default-…

pgsql:纵列字段转为横列字段

问题: 想要将查询出来的数据纵列字段转为横列字段。如以下是24小时内每个小时的数据表: SELECT deviceid,press_avg, hh FROM site_data 想要转换后的效果如下,将24小时内所有数据横向展示: 解决方案: 实现的sql查询…

Spring事务的介绍和使用

目录 一、Spring事务作用 二、代码实现 三、Spring事务相关配置 1、事务配置 2、事务传播行为 一、Spring事务作用 事务作用:在数据层保障一系列的数据库操作同成功同失败 Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败 二、…

分散输入和集中输出(Scatter-Gather I/O):readv()和writev()

readv()和writev()系统调用分别实现了分散输入和集中输出的功能。 NAMEreadv, writev, preadv, pwritev - read or write data into multiple buffersSYNOPSIS#include <sys/uio.h>ssize_t readv(int fd, const struct iovec *iov, int iovcnt);ssize_t writev(int fd, c…

蓝桥杯专题-试题版-【数字游戏】【城市建设】【最大子阵】【蚂蚁感冒】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

数字人解决方案——基于真人视频的三维重建数字人源码与训练方法

前言 1.真人视频三维重建数字人源码是基于NeRF改进的RAD-NeRF&#xff0c;NeRF&#xff08;Neural Radiance Fields&#xff09;是最早在2020年ECCV会议上的Best Paper&#xff0c;其将隐式表达推上了一个新的高度&#xff0c;仅用 2D 的 posed images 作为监督&#xff0c;即…

MongoDB存储引擎

1、前言 存储引擎是数据库的组成部分&#xff0c;负责管理数据存储。 MongoDB支持的以下存储引擎&#xff1a; 存储引擎 描述 WiredTiger存储引擎 从MongoDB 3.2开始默认的存储引擎&#xff0c;新的版本MongoDB推荐使用WiredTiger存储引擎。 MMAPv1存储引擎 MMAPv1是Mon…

微信小程序使用vant组件样式未生效解决办法

1.删除小程序自带的样式 首先在app.json里面删除这一行 2.清除缓存 重新编译 3.重新构建npm 重新编译 在工具里面

nginx之rewrite

一、Rewrite跳转的场景二、Rewrite跳转实现三、Rewrite实际场景四、常用的 Nginx 正则表达式五、Rewrite命令、语法格式六、location的分类七、location的优先级八、rewrite与location的区别九、rewrite示例9.1 基于域名的跳转9.2 基于客户端 IP 访问跳转9.3 基于旧域名跳转到新…

chatgpt赋能python:Python迭代运算:概述、应用及效果分析

Python迭代运算&#xff1a;概述、应用及效果分析 在Python编程领域中&#xff0c;迭代运算是一项基础性操作。它不仅适用于循环遍历数据&#xff0c;还支持函数式编程中的高阶函数应用&#xff08;例如map、filter等&#xff09;。本文将从多个方面探讨Python迭代运算的应用和…

高性能计算开发软件培训班-选猿代码科技IT培训机构!

学习CPU并行程序性能优化的意义&#xff1a; 学习CPU计算是现代计算机科学中不可或缺的一部分。掌握CPU计算原理和应用&#xff0c;能够提高我们的编程技能和解决问题的能力&#xff0c;帮助我们更好地应对计算机科学领域中的挑战和机遇。此外&#xff0c;CPU计算在计算机体系结…

python写路径时候的问题————转载ningqingzy的文章

作为笔记总结学习&#xff0c;如有侵权&#xff0c;立马删除。 总结有三种方法&#xff1a; 更换为绝对路径的写法&#xff1a;func1(“C:\Users\renyc”)显式声明字符串不用转义&#xff08;加r&#xff09;&#xff1a;func1(r"C:\Users\renyc")使用Linux的路径&a…

workbench 链接mysql 报错 authentication plugin caching_sha2_password

用workbench连接MySQL出现Authentication plugin ‘caching_sha2_password’ cannot be loaded的问题&#xff0c;如下图 原因 出现这个问题的原因是由于Navicat和MySQL的版本问题&#xff0c; mysql8 之前&#xff0c;加密规则是mysql_native_password&#xff1b; mysql8 之后…

leetcode97. 交错字符串(动态规划-java)

交错字符串 leetcode97. 交错字符串题目描述解题思路代码演示&#xff1a; 动态规划加状态压缩代码演示 动态规划专题 leetcode97. 交错字符串 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/interleaving-string 题目描…

线性代数高级--矩阵的秩--SVD分解定义--SVD分解的应用

目录 矩阵的秩 概念 k阶子式 矩阵的秩的定义 矩阵的秩的性质 SVD分解 概念 注意 SVD的分解过程 SVD分解的应用 矩阵的秩 概念 矩阵的秩是线性代数中的一个重要概念&#xff0c;用于描述矩阵的行&#xff08;或列&#xff09;向量的线性无关程度。矩阵的秩可以通过…

chatgpt赋能python:Python遍历0到100的使用场景及方法

Python遍历0到100的使用场景及方法 Python是一种简洁、高效的脚本语言&#xff0c;广泛用于各种领域的开发。本文介绍Python遍历0到100的使用场景以及方法&#xff0c;旨在帮助读者更加了解Python的强大之处。 遍历0到100的背景和意义 遍历0到100是一种常见的问题&#xff0…

网络安全合规-银行业数据治理架构体系搭建(一)

为引导银行业金融机构加强数据治理&#xff0c;充分发挥数据价值&#xff0c;全面向高质量发展转变&#xff0c;银监会于2018年发布了《银行业金融机构数据治理指引》&#xff0c;主要内容如下&#xff1a; 近年来银行业金融机构在业务快速发展过程中&#xff0c;积累了客户数…