docker安装

已经有一段时间了,但是根据一位朋友的要求,我将向您展示如何使用docker在Nginx反向代理后面部署Quarkus微服务。

我们会做什么…

我将在centos 8主机上安装docker和docker-compose,并部署一个将在端口80和443上公开Nginx的docker容器以及使用Quarkus的微服务。 相同的技术可以与任何Java微服务框架(例如microprofile,Springboot等)一起使用,因为最后您将要做的是运行一个简单的jar文件(java神奇吗?)。

开始吧…

我将跳过docker和docker-compose的安装详细信息。 如果您还没有听说过docker-compose,请查看https://gabrieltanner.org/blog/docker-compose ,您会喜欢的。 它可以自动执行您的容器部署,简直是摇摇晃晃!

先决条件

首先确保您已打开所需的端口

 sudo firewall-cmd --zone= public --add-masquerade --permanent sudo firewall-cmd --zone=sudo firewall-cmd --zone= public --add-port= 22 /tcpsudo firewall-cmd --zone= public --add-port= 80 /tcpsudo firewall-cmd --zone= public --add-port= 443 /tcpsudo firewall-cmd --reload

现在根据文档安装docker

 #remove previous versions if anysudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine#installsudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https: //download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.iosudo systemctl start docker#Verify that Docker Engine is installed correctly by running the hello-world image.sudo docker run hello-world

最后但并非最不重要的是安装docker-compose

 #curl is requireddnf install curl#Download the latest version of Docker Compose. Currenlty I am using version #Download the latest version of Docker Compose. Currenlty I am using version 1.25 #Download the latest version of Docker Compose. Currenlty I am using version . 4curl -L https: //github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose# Test the installation.docker-compose --version

现在到有趣的东西…

检出我使用Quarkus开发的示例应用程序,该应用程序通过执行git clone https://github.com/diakogiannis/pacecalculatorapi.git来计算跑步者的步伐

如果您忘记安装GIT(如果您执行sudo yum install git我不会告诉任何人)

现在让我们在Docker映像中构建它(是的,您甚至不必安装Java)…

docker run --name=pacecalculator -d -p 9090 : 8080 diakogiannis/pacecalculator:latest

瞧! 该应用程序已准备好运行!

实际上,我们告诉码头工人运行该容器,并给他起了步步计算器的名字,“-d”告诉我们处于“分离”模式,因此它将在后台运行,而“ -p 9090:8080”则告诉他公开运行系统中内部的8080端口到9090端口。

让我们测试一下它是否有效,并且由于我是一名糟糕的长跑运动员,因此我将尝试计算不到30分钟(1.700秒)的5公里跑步速度

curl " http://localhost:9090/api?distance=5&seconds=1700 "

这将导致{"pace":"5.67"}

让我们检查一下docker文件

 # Stage 1 : build with maven builder imageFROM maven: 3.6 . 0 -jdk- 11 -slim AS BUILDMAINTAINER Alexius DiakogiannisCOPY . /usr/app/RUN mvn -f /usr/app/ clean package# Stage 2 : copy from the previous container the jar file, put it in a java one and run itFROM adoptopenjdk: 11 -jdk-openj9WORKDIR /appCOPY --from=BUILD /usr/app/target/PaceCalculatorApp-runner.jar /app/ENTRYPOINT [ "java" , "-jar" , "/app/PaceCalculatorApp-runner.jar" ]
  1. 首先,我们将Maven容器与JDK-11一起使用,并使用COPY命令将其中的所有项目复制到其中。
  2. 之后,我们通过在mvn clean package指出pom.xml文件的位置,以与在常规开发环境中相同的方式构建它。 之后,我们使用另一个容器(因为毕竟可能需要一个不同的环境来运行该应用程序),在这种情况下,我们使用的是JDK-11,但使用的是OpenJ9 JVM(这动摇了它的来历,并且它起源于IBM的Java SDK / IBM J9,并且具有很大的内存)管理)
  3. 然后,我们将从前一个容器创建的jar文件复制到新容器
  4. 最后,我们告诉java -jar /app/PaceCalculatorApp-runner.jar在容器启动时执行java -jar /app/PaceCalculatorApp-runner.jar 。 请特别注意,使用ENTRYPOINT时,每个参数必须位于单独的部分。

现在让我们停止并删除容器docker stop pacecalculator && docker rm pacecalculator

准备文件系统

为了使NGinX SSL正常工作,我们需要将证书存储在某个地方。 另外,还需要一个用于NGinX日志的文件夹。 最好的做法是不在Docker映像内生成IO,因此在生产中还要外部化Java应用程序的控制台日志,但这只是PoC。

对于我的安装,我通常使用/ volumes / {docker映像名称} / {feature}模式,并且我不让docker决定将卷存储在何处。 所以在这种情况下,我创建了

  • / volumes / reverse / config
  • / volumes / reverse / certs
  • / volumes / reverse / logs

reverse将是NGinX将运行的docker容器的名称

我已经在自由权限下颁发了证书,并将其两个文件(pacecalculator.pem和speedcalculator.key)放在/ volumes / reverse / certs目录中

我用内容创建文件/volumes/reverse/config/nginx.conf

 user nginx;worker_processes 1 ;error_log /var/log/nginx/error.log warn;pid      /var/run/nginx.pid;events {worker_connections 1024 ;}http {default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"' ; access_log /var/log/nginx/access.log main;sendfile   on;tcp_nopush on;keepalive_timeout 65 ; gzip on;gzip_http_version 1.0 ;gzip_proxied any;gzip_min_length 500 ;gzip_disable "MSIE [1-6]\." ;gzip_typestext/plaintext/htmltext/xmltext/csstext/comma-separated-valuestext/javascriptapplication/x-javascriptapplication/javascriptapplication/atom+xmlapplication/vnd.ms-fontobjectimage/svg+xml;proxy_send_timeout 120 ;proxy_read_timeout 300 ;proxy_buffering   off;tcp_nodelay       on;server {listen  *: 80 ;server_name jee.gr;# allow large uploads of filesclient_max_body_size 80M;# optimize downloading files larger than 1G#proxy_max_temp_file_size 2G;location / {# Use IPv4 upstream address instead of DNS name to avoid attempts by nginx to use IPv6 DNS lookupproxy_pass http: //pacecalculator:80;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}server {listen 443 ssl;server_name nomisma.com.cy www.nomisma.com.cy app.nomisma.com.cy;ssl_certificate    /etc/ssl/ private /pacecalculator.pem;ssl_certificate_key /etc/ssl/ private /pacecalculator.key;ssl_protocols      TLSv1 TLSv1. 1 TLSv1. 2 ;ssl_ciphers        HIGH:!aNULL:!MD5;# allow large uploads of filesclient_max_body_size 80M;# optimize downloading files larger than 1G#proxy_max_temp_file_size 2G;location / {# Use IPv4 upstream address instead of DNS name to avoid attempts by nginx to use IPv6 DNS lookupproxy_pass http: //pacecalculator:80;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}}

我将不对配置进行详细介绍,但通常,它将对客户端和反向代理之间的通信进行gzip压缩,并将侦听主机名jee.gr。 80和443端口都将在微服务的端口80上反向代理,这意味着内部docker通信未加密(但是我们需要对其进行加密吗?)。 我们当然可以对其进行加密,但这不在本教程的讨论范围之内。 请注意,我们将内部主机名使用docker名称“ pacecalculator”。

让我们创建Orchestrator aka docker-compose.yml文件,它将以正确的顺序协调两个微服务的部署。

nano docker-compose.yml

和内贴

 version: '3'services:reverse:depends_on:- pacecalculatorcontainer_name: reversehostname: reverseimage: nginxports:- 80 : 80- 443 : 443restart: alwaysvolumes:- /volumes/reverse/config/:/etc/nginx/- /volumes/reverse/logs/:/var/log/nginx/- /volumes/reverse/certs/:/etc/ssl/ private /pacecalculator:container_name: reversehostname: reverseimage: diakogiannis/pacecalculator:latestrestart: alwaysnetworks:default :external:name: proxy-net

因此,我们在这里所做的是,我们启动了心律计算器服务,并且反向服务告诉它暴露端口80和443,但也要等待(depends_on),直到心律计算器成功启动。 另外,我们正在使用内部专用网络进行通讯,我们将其命名为proxy-net

时间到了!

我们通过发行来启动容器

docker-compose -f /{path to}/docker-compose.yml up --remove-orphans -d

这将清理剩余的容器并以分离模式(也称为背景)再次启动

如果我们想停止它,我们发出

docker-compose -f /{path to}/docker-compose.yml down

就像法国人所说的“难解之谜”? 没有最简单的方法!

翻译自: https://www.javacodegeeks.com/2020/11/deploying-a-quarkus-or-any-java-based-microservice-behind-an-nginx-reverse-proxy-with-ssl-using-docker.html

docker安装

docker安装_使用docker在带有SSL的Nginx反向代理后面部署Quarkus或任何基于Java的微服务...相关推荐

  1. Linux使用Docker安装Nacos并配置MySQL数据源,将Springboot的配置文件部署到Nacos

    Linux使用Docker安装Nacos并配置MySQL数据源,将Springboot的配置文件部署到Nacos 前言 一.Docker中安装配置Nacos 安装Docker 拉取Nacos镜像 启动 ...

  2. docker实现nginx反向代理、负载均衡

    docker实现nginx反向代理.负载均衡 启动docker服务 systemctl start docker.server 查看docker镜像 docker images 拉取tomcat.ng ...

  3. 如何通过svg代码还原图片_如何通过nginx反向代理来调试代码?

    现在公司项目都是前后端分离的方式开发,有些时候由于某些新需求开发或者 bug 修改,想要让前端直接连到我本地开发环境进行调试,而前端代码我并没有,只能通过前端部署的测试环境进行测试,最简单的办法就是直 ...

  4. 云服务器,Linux上安装xampp,搭建node服务,云服务器Firewalld、iptables,nginx反向代理

    目录 写在前面的 前期准备 下载xampp: xampp安装步骤 1.首先链接远程linux服务器 2.xshell终端执行安装命令 3.启动:xampp服务 4.访问数据库,修改数据库密码 安装守护 ...

  5. 使用nginx负载均衡的webservice wsdl访问不到_谁说前端不用懂,Nginx 反向代理与负载均衡(超实用)...

    谁说前端不需要懂-Nginx反向代理与负载均衡 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等.用一句别人开玩笑的话来说,java十年前的技术现在还能 ...

  6. Gerrit安装及使用Nginx反向代理

    Gerrit安装及使用Nginx反向代理 简介 Gerrit做为Google用来管理Android代码版本的工具,是一种免费.开放源代码的代码审查软件,使用网页界面.本文主要介绍它的安装步骤. 一.准 ...

  7. nginx请求转发被拒绝_解决nginx反向代理proxy不能转发header报头

    做了一个德国高防plesk卖虚拟主机,奈何地理位置太过于遥远,控制台使用上速度难以接受.用户站点可以使用cloudflare等等的加速手段,控制台能否也这么干呢?理论是完全可以的,那么时间上手看吧.安 ...

  8. MacOS开发必备工具brew,安装nginx反向代理,替代linux工具 apt-get和 yum...

    Mac os开发者必备工具 brew,替代Linux系统中的 apt-get和yum工具,本文介绍Mac电脑安装Homebrew,并下载安装软件nginx反向代理过程. 1.安装Homebrew 在苹 ...

  9. sql server代理无法启动_谁说前端不需要懂Nginx反向代理与负载均衡

    作者 | chenhongdong 链接 | https://juejin.im/post/5b01336af265da0b8a67e5c9 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入 ...

最新文章

  1. 转帖:那个神一样的大爷
  2. Transformer靠什么“基因“,得以闯入CV界秒杀CNN?
  3. 取得手机屏幕大小/style的应用技巧
  4. python闭包和函数调用区别_函数闭包与可调用类
  5. bootstrap-fileinput 添加打印按钮
  6. CUDA性能优化----线程配置
  7. WEB BUTTON IN DOTNET
  8. 如何在ASP.NET 5和XUnit.NET中进行LocalDB集成测试
  9. 一维数组模拟数据结构-------栈
  10. 宅在家里写数据库中联表查询
  11. ant copy 复制文件用法
  12. 程序、进程与线程的关系
  13. 《一》Android 数据库 SQlite SQLiteOpenHelper
  14. 用好IE9浏览器必须要知道的九件事
  15. 即时通讯WebSocket
  16. 51单片机智能小车——超声波
  17. 图像识别距离算法matlab
  18. 服务器重装系统之DELL
  19. 解决 SysFader:iexplore.exe应用程序错误
  20. linux 怎么看出io是瓶颈,IO瓶颈探测方法

热门文章

  1. Lotus Notes登录后无法进入邮件,一直处于“正在加载,请稍候” 解决办法!!!
  2. Adobe国际认证中文网站_Adobe认证专家考试费用
  3. sunlight的中文_sunlight中文翻譯
  4. 探索人机未来:人机融合智能
  5. Python对Excel文件进行多行求和并将结果排序输出前三
  6. C++ Primer(第四版)答案之第八章
  7. WinDBG详解进程初始化dll是如何加载的
  8. Java学习笔记8:多态性理解
  9. 软件著作权变更收费吗
  10. typora常用格式设置