题目要求

(1)将springboot应用程序打成jar包:Hot.jar
(2)利用dockerfile将Hot.jar构建成镜像
(3)构建 Swarm 集群
(4)在 Swarm 集群中使用 compose 文件 (docker-compose.yml) 来配置、启动多个服务 包括: Mysql、Redis以及应用程序Hot

实现过程

springboot项目搭建及打包

项目实现功能:输入 http://localhost:8080/docker/test,网页上会打印:docker-hot。

由于功能非常简单,故这里不讲解项目搭建过程及打包过程。

安装docker

安装官方yum源

yum install -y yum-utils

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装Docker引擎

yum install -y docker-ce docker-ce-cli containerd.io

启动docker

启动命令

systemctl start docker

设置开机启动

systemctl enable docker

查看docker状态

docker info

修改镜像

vim /etc/docker/daemon.json

构建镜像

拉取java环境并上传jar包

docker pull java:8u111

mkdir /usr/dockerfile -p

将hot.jar上传到 /usr/dockerfile 目录下。

编写dockerfile:

cd /usr/dockerfile
vim dockerfile-demo
FROM java:8u111
COPY hot.jar /root
CMD ["nohup","java","-jar","/root/hot.jar","&"]

构建镜像并启动

docker build -f dockerfile-demo -t hot:1.0 .

启动含 hot.jar 容器:

docker run --rm -it --network host hot:1.0

输入网址访问,可以看到访问成功:

搭建 swarm+compose 集群

首先,复制前面那台已安装好docker的虚拟机。

安装swarm(两台虚拟机都要安装)

docker pull swarm

安装compose(主机安装即可)

运行以下命令以下载Docker Compose的当前稳定版本:

curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

注:这里我因为在线下载总是无法成功,所以直接到:https://github.com/docker/compose/releases 网站上下载了最新的 docker-compose-Linux-x86_64,之后改名为 docker-compose 并上传至虚拟机的 /usr/local/bin/ 目录下。

将可执行权限应用于二进制文件:

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

添加到环境中:

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

查看compose版本:

docker-compose --version

看到这个结果,就证明compose安装成功了。

搭建集群

建立manager(对应的虚拟机ip地址:192.168.112.140)

docker swarm init --advertise-addr 192.168.112.140

建立worker(对应的虚拟机ip地址:192.168.112.141)

docker swarm join --token SWMTKN-1-2e2d1l1p4qf7frlqxsca8q3qr3hu21glrffp6x687q6h5oh1s8-4u1h08jtq8ryauq4rc8941zve 192.168.112.140:2377

注:这里我第一次执行的时候报错了,错误信息如下:

Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 192.168.112.140:2377: connect: no route to host"

原因是忘记将manager虚拟机的防火墙关闭。(执行 systemctl stop firewalld.service 命令即可)

编写docker-compose.yml文件

cd /usr/local/bin
vim docker-compose.yml

docker-compose.yml文件的内容如下:

version: "3.0"
services:
mysql:
image: mysql:5.7.30
ports:
- 3306:3306
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--default-time-zone=+8:00
environment:
MYSQL_ROOT_PASSWORD: "root"
deploy:
mode: replicated
replicas: 2
redis:
image: redis:5.0.9
environment:
- TZ=Asia/beijing
ports:
- 6379:6379
#主备都存在
deploy:
mode: replicated
replicas: 2
hot:
image: hot:1.0
ports:
- 8080:8080
deploy:
mode: replicated
replicas: 2

部署应用程序hot(注意:下文中 docker stack 相关的命令都需要在 /usr/local/bin 目录下执行)

docker stack deploy -c docker-compose.yml hot

运行应用程序hot

docker stack services hot

分别使用 192.168.112.140:8080/docker/test 和 192.168.112.141:8080/docker/test 访问应用程序

停止应用程序hot

docker stack down hot

总结

到这里,我们就完成了题目要求中的所有内容,其实还是非常简单的,只不过在搭建过程中可能会遇到各种各样的小问题,基本上也可以通过上网搜索找到对应的解决方案。

这是我自己在学习docker过程中所记录的一些笔记,这里分享出来,希望其他人在学习过程中能从我的笔记中得到一些帮助!

docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群的更多相关文章

  1. Docker容器学习梳理 - Dockerfile构建镜像

    在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...

  2. 使用Dockerfile构建镜像-Docker for Web Developers(5)

    1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...

  3. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  4. docker学习笔记(3)- 镜像

    简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...

  5. 013、Dockerfile构建镜像(2019-01-02 周三)

    参考https://www.cnblogs.com/CloudMan6/p/6830067.html   Dockerfile构建镜像过程分析   root@docker-lab:~/111# ls  ...

  6. Dockerfile构建镜像

    Dockerfile构建镜像的步骤: 从基础镜像运行一个容器 执行一条指令,对容器做出修改 执行类似docker commit的操作,提交一个新的镜像层 再基于刚提交的镜像运行一个新的容器 执行Doc ...

  7. Dockerfile 构建镜像

    一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest  b.设置维护者信息 没有固定格式  c.设置需要添加到容器中的文件 ...

  8. Dockerfile构建镜像实战

    目录 一.常见Dockerfile指令 二.编写Centos Dockerfile 2.1.编写Dockerfile 2.2.构建 2.3.查看Docker镜像 2.4.运行镜像 三.CMD和ENTR ...

  9. RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群

    本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...

随机推荐

  1. linuxc语言图形化编程包含gtk/gtk.h编译总是报错找不到该文件的解决方法

    在编译时输入gcc file.c `pkg-config --libs --cflags gtk+-2.0` 注意`不是单引号,和--前均有一个字符 这样问题就结局啦

  2. 这个Bug的排查之路,真的太有趣了。

    这是why哥的第 92 篇原创文章 在<深入理解Java虚拟机>一书中有这样一段代码: public class VolatileTest {    public static volat ...

  3. Stone Game, Why are you always there? HDU - 2999

    题目链接:https://vjudge.net/problem/HDU-2999 题意:有N堆石头,两个人交替取,每次只能取连续的k个石子,最后没有石子取得人输. 思路:如果我们每次取靠边的k个,那么 ...

  4. 攻防世界 reverse Newbie_calculations

    Newbie_calculations Hack-you-2014 题目名百度翻译成新手计算,那我猜应该是个实现计算器的题目.... IDA打开程序,发现一长串的函数反复调用,而且程序没有输入,只有输 ...

  5. 提高ASP.NET Web应用性能的24种方法和技巧

    那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置 ...

  6. 一次VLAN标签引发的网络事件的处置

    一次VLAN标签引发的网络事件的处置 一.背景介绍 事件背景: HZ某分公司新装一套业务系统,通过一条专线和BJ总公司连通.分配给HZ公司的ip地址为:a.b.c.X,掩码24位,网关a.b.c.1. ...

  7. 第28 章 : 理解容器运行时接口 CRI

    理解容器运行时接口 CRI CRI 是 Kubernetes 体系中跟容器打交道的一个非常重要的部分.本文将主要分享以下三方面的内容: CRI 介绍 CRI 实现 相关工具 CRI 介绍 在 CRI ...

  8. elementui 表格 如何使操作中隐藏一个按钮

    <el-table-column label="权限"min-width="100"> <template scope="scope ...

  9. 软件工程第一次作业:Warm Up

    Warm Up 项目 内容 作业所属课程 2021春季软件工程(罗杰 任健) 作业要求 第一次阅读作业 课程目标 培养通过团队协作使用软件开发工具按照软件工程方法开发高质量并且可用的复杂软件系统的能力 ...

  10. 对不起,“下一代ERP”仍旧是现在的ERP

    最近数字化转型太火了,到处都是相关数字化的网文.很多人又说在数字化转型时代,ERP早就落伍了云云,取而代之的是什么"下一代ERP",叫什么"ARP"." ...