Docker Compose基础与实战

一、是什么

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

# 基础镜像使用javaFROM java:8# 作者MAINTAINER sveinn# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmpVOLUME /tmp# 将jar包添加到容器中并更名为zzyy_docker.jarADD 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.6container_name: ms01ports:- "6001:6001"volumes:- /app/microService:/datanetworks: - my_net depends_on: - redis- mysqlredis:image: redis:6.0.8container_name: redis68ports:- "6379:6379"volumes:- /app/redis/redis.conf:/etc/redis/redis.conf- /app/redis/data:/datanetworks: - my_netcommand: redis-server /etc/redis/redis.confmysql:image: mysql:5.7container_name: mybatis57environment: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.dnetworks:- my_netcommand: --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.hqwc.cn/news/503.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端web入门-CSS-day07

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 定位 相对定位 绝对定位 定位居中 固定定位 堆叠层级 z-index 定位-总结 高级技巧 CSS 精灵 字…

将图像2D转换为3D--LeiaPix Converter

LeiaPix Converter是一款免费的在线图像处理工具,可帮助用户将2D图像实时转换为精美的3D光场图像。 它使用由Leia开发的专有算法,为照片、插画和艺术作品等2D图像添加深度和立体感,目前是完全免费的。 LeiaPix Converter 的特点 多格式转换…

【Spring Clound】Nacos高可用集群搭建与使用

文章目录 一、Nacos 简介二、Nacos 安装2.1、Nacos 环境依赖2.2、Nacos 服务端安装 三、Nacos 部署3.1、单实例部署3.2、 集群部署3.2.1、集群架构3.2.2、模拟部署 四、微服务集成Nacos4.1、依赖组件版本选型4.2、注册中心4.2.1、服务提供者4.2.2、服务消费者4.2.3、服务调用4.…

Linux上安装matlab

首先需要下载文件,微人大正版软件下载里有 然后直接点击,就可以就可以安装,不需要使用挂载命令,然后使用 ./install就可以进行安装了,这里记住是得登录自己的人大邮箱,否则无法激活,然后修改安…

HBase(9):过滤器

1 简介 在HBase中,如果要对海量的数据来进行查询,此时基本的操作是比较无力的。此时,需要借助HBase中的高级语法——Filter来进行查询。Filter可以根据列簇、列、版本等条件来对数据进行过滤查询。因为在HBase中,主键、列、版本都是有序存储的,所以借助Filter,可以高效地…

<Linux开发>驱动开发 -之- Linux RTC 驱动

<Linux开发>驱动开发 -之- Linux RTC 驱动 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细…

macOS Big Sur 11.7.8 (20G1351) 正式版 ISO、PKG、DMG、IPSW 下载

macOS Big Sur 11.7.8 (20G1351) 正式版 ISO、PKG、DMG、IPSW 下载 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Window…

RabbitMQ学习笔记6(小滴课堂)路由,主题模式

我们去修改我们的生产者代码: 我们去修改我们的消费者: 第一个节点: 我们还要去创建其它更多的节点: 这里第二个节点我们只绑定一个交换机队列。 我们去分别启动消费者和生产者: 我们可以看到第一个交换机只绑定了一…

Linux学习之进程的通信方式信号:kill命令

kill -l可以看到可以使用信号量。 把下边的内容使用编辑器,比如vim写到./a.sh。 #!/bin/bashecho $$ while : # 无限循环 do: donecat a.sh看一下文件里边的内容。 chmod ur,ux a.sh给当前用户赋予a.sh文件的写和执行权限。 在第一个端口里边,使用./a…

Redis从入门到精通【高阶篇】之底层数据结构跳表(SkipList)

文章目录 0.前言1.跳表(SkipList)基本详解2. 源码解析3.总结4.思考题5. Redis从入门到精通系列文章 0.前言 上个篇章回顾,我们上个章节我们学习了《Redis从入门到精通【高阶篇】之底层数据结构整数集(IntSet)详解》,我们从源码层了解整数集由一个头部和…

FFmpeg5.0源码阅读——avformat_find_stream_info

摘要:在使用FFmpeg库时通常使用avformat_find_stream_info相关函数来探测流的基本信息,为了更加深入理解FFmpeg的基本流程,本文根据FFmpeg 5.0的源码详细描述了该函数的具体实现。   关键字:FFmpeg   读者须知:读者…

用Python写了一个下载网站所有内容的软件,可见即可下

目录标题 前言效果展示环境介绍:代码实战获取数据获取视频采集弹幕采集评论 GUI部分尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 今天我们分享一个用Python写下载视频弹幕评论的代码。 顺便把这些写成GUI,把这些功能放到一起让朋友用起来更方便~ 效果…