时间:2022-11-08 17:37:01
简介:从零开始通过一个Docker部署9个微服务器和3个前端项目。 这些服务需要Nacos、MySQL、Nginx、ElasticSearch、Kibana、Redis、JDK和Minio文件存储服务器。 当然,在实际环境中,我们不会在一台服务器或一个Docker上安装和部署这么多东西。 因为本机只有一台虚拟机在运行,所以在同一台虚拟机上安装和部署。 去正式环境的话,存储一些数据的和执行项目的分别安装并部署到多台服务器上就可以了。
一、准备工作: 1、9个微服务器3个前端项目。
2、一台虚拟机,Linux和Ubuntu都可以。 这次选择了具有图形界面的Ubuntu系统。
二.简单理解Docker解决的问题。 由于不同机器的操作系统、库和组件不同,将一个APP应用程序部署到多台机器需要大量的环境配置操作。
Docker主要解决环境构成问题。 这是一种虚拟化技术,用于隔离进程,隔离进程独立于主机操作系统和其他隔离进程。 使用Docker,可以将现有的APP应用程序部署到其他计算机上,而无需更改APP应用程序代码,开发人员也无需了解特定环境的技术。
与虚拟机的比较虚拟机也是虚拟化技术,与Docker的最大区别在于通过模拟硬件和在硬件上安装操作系统来实现。
速度要启动虚拟机,必须先启动虚拟机操作系统,然后再启动APP应用程序。 这个过程会非常慢。
启动Docker相当于启动主机操作系统上的进程。
占用资源的虚拟机是一个完整的操作系统,占用大量磁盘、内存和CPU资源,并且一台机器只能开启几十台虚拟机。
Docker只是一个过程,它只是打包APP应用程序和相关的组件,在运行时需要的资源很少。 一台机器可以启动成千上万的Docker。
除了启动速度快、资源消耗少之外,Docker还具有以下优点:
1 .提供易于迁移和一致的操作环境。 打包的APP应用程序可以在不同的计算机上迁移,而不必担心环境发生变化而无法运行。
2 .分层技术方便了镜像的维护使用,APP应用方便了重复部分的重用。 复用度越高,维护工作也越容易。
3 .使用可以更容易扩展的基础镜像,可以进一步扩展以获得新的镜像。 此外,官方和开源社区提供了大量的镜像。 通过扩展这些镜像,可以非常容易地获得我们想要的镜像。
镜像和容器镜像是静态结构,可以视为面向对象的类。 容器是镜像的实例。
镜像包含运行容器所需的代码和其他组件,是分层结构,每一层都是只读的。 构建镜像时,将构建一个一个的层次,前一个层次是后一个层次的基础。 镜像的这种分层存储结构非常适合重用和定制镜像。
构建容器时,通过向镜像添加“可写层”( writable layer )来保存容器正在进行的更改。
三、安装和使用Docker时要准备虚拟机,Linux和Ubuntu的操作系统都可以。 虽然您的VMWare同时安装了两个操作系统,但由于Ubuntu的具有图形操作界面,使用起来更舒适,因此以下操作都基于Ubuntu系统。 但是,Linux和Ubuntu系统的区别不大,命令等也很多是共通的
安装
确认是否安装了docker :
docker version1,更新ubuntu的apt源索引:
sudo apt-get update2,将apt设置为可在Https上使用存储库
sdoapt-get install-yapt-transport-httpsca-certificatescurlsoftware-properties-common 3,添加文档官方GPG密钥
curl-fssl https://download.docker.com/Linux/Ubuntu/gpg|sudo apt-keyadd-4、Stable资料档案库安装,即docker稳定仓库
sudo add-apt-repository ' deb [ arch=amd64 ] https://download.docker.com/Linux/Ubuntu $ (
验证sudo apt-getupdatesudoapt-get install-y docker-ce6、docker是否已成功安装并启动服务
dockerversionsystemctlstatusdocker检查并启动了docker的执行情况:
如果没有开始检查,请执行
sudo systemctl start docker7,经典的Hello World
sudo Docker run hello-world使用1,在安装开始和停止完成后,默认情况下将启动Docker服务。 要手动控制docker服务的启动和停止,请运行以下命令:
启动文件库
停止sdoservicedockerstart #文档
重新启动sdoservicedockerstop#docker
sudo service docker重新开始docker安装完成。 一般用户没有启动docker服务的权限,只能通过sudo以root用户权限启动docker。 在这种情况下,普通用户必须运行docker ps或docker images命令以显示容器,或者镜像标题中显示的错误。
解决方案:
1、使用sudo docker ps或sudo docker images,但每次输入密码。
2、将普通用户加入docker组
这里的一般用户是tjt,组docker是在安装docker时添加的,因此只需执行两个操作。
1 sudo gpasswd-a $ user docker 23 newgrp docker将tjt用户加入docker组后,发现使用docker ps或docker images并不提示权限不足。
2、Docker镜像操作4、在Docker上安装和配置nacos1,找到nacos镜像,然后运行命令
拉出docker search nacos2、nacos镜像
dockerpullnacos/nacos-server:1.1.4我们没有安装最新版本,而是指定了版本号。
docker images将检查nacos镜像是否成功
3、启动nacos服务
命令:
docker run---- env mode=standalone---- name nacos-d-p 8848:8848 nacos/nacos-server:1.1.4检查启动是否成功: ddddd
4、打开浏览器测试访问nacos
http://localhost:8848/nacos/
初始帐户/密码为nacos/nacos
4、设置NACOS自动启动
命令: docker update---- restart=always 963217 d 51c 36 (最后一项为nacos容器的容器id ) )。
文档更新---重新开始=always 963217 d 51c 365,Nacos配置
将每个微服务器的bootstrap.yml配置文件的内容写入nacos。
连接到虚拟机服务器,将nacos配置文件上传到服务器,解压缩并导入到nacos列表。
解冻后单独参加,或者不需要解冻。 单击“导入配置”按钮以zip压缩包格式批量导入所有微服务的bootstrap.yml配置文件。
五. Docker安装mysql1,并在Docker Hub上查找MySQL镜像
docker search mysql2,拉动MySQL镜像latest此处拉动最新版本的官方镜像:
docker pull mysql:latest3,查看本地镜像要验证是否安装了mysql,请使用以下命令:
docker images4,容器安装完成后,可以使用以下命令运行mysql容器:
docker run-itd---name MySQL-test-p 3306:3306-e MySQL _ root _ password=123456 MySQL参数说明:
-p 3306:3306 :将容器服务的3306端口映射到宿主机的3306端口上,外部主机可以直接从宿主机ip:3306访问MySQL的服务。 MySQL _ root _ password=123456 :设置MySQL服务root用户的密码。 5、安装成功。 使用docker ps命令检查安装是否成功。
至此,使用docker的mysql安装完成。 要打开并运行名为mysqldb的容器,请使用以下命令:
1 sudodockerstartMySQLDB2sudodockerexec-itmysqldb/bin/bash使用以下命令关闭名为mysqldb的容器:
sudo Docker stop mysqldb6,在docker上进行mysql的简单交互
(1)输入命令连接到mysql :
本机可以通过root和密码123456访问MySQL服务。
如果使用-u root命令直接访问mysql输入,则会发生错误。 请安装mysql-server
sudo apt-get install mysql-server组合框会提示您输入mysql的根密码并确认密码
输入密码即可访问,但报告了mysql.socket中的错误
修改/etc/my.cnf
tjt @ tjt-virtual-machine:~将$ vim/etc/my.cn f以下添加到/etc/my.conf :
view代码
我使用的不是root用户编辑文件,无法保存,退出时强制保存: w! sudo tee %
操作一次后,我知道还是不行——报错了,浪费了。
本来,我们的mysql安装在docker上,系统中没有mysql,而是用docker命令启动,所以必须先进入docker容器,然后才能启动对应的mysql。
进入容器
docker exec -it容器ID /bin/bash进入mysql,启动容器时的初始密码设置为123456
mysql -u root -p很容易测试MySQL数据库是否可用
7、导入MySQL数据
为了运行后端项目,需要帐户和密码才能登录系统。 干脆现在将MySQL数据导入到Docker容器中的MySQL中。
1 .从本地数据库中导出SQL
2、进入mysql的文档容器
3、建立数据库
4、将sql文件复制到docker容器
进入容器,运行. sql文件,完成数据导入初始化。
六. docker安装redis1,获取redis镜像
这里拉官方最新版本的镜像:
docker pull redis2,显示本地镜像
docker images3,容器安装完成后,可以使用以下命令运行redis容器:
docker run-itd---name redis-test-p 6379:6379 redis参数说明:
-p 6379:6379 :从容器服务器的6379端口到宿主机的6379端口的映射。 可以从外部直接从宿主机ip:6379访问Redis的服务。 4、安装成功。 最后,可以通过docker ps命令检查容器的行为信息。
在redis-cli连接测试中使用redis服务。
首先进入redis容器
docker exec-it redis-test/bin/bash七、docker安装jdk1.81、jdk搜索
docker search jdk2,jdk下载
docker pull kdvolder/jdk83,确认下载是否成功
文档图像4,启动
docker run-- di-- name=JDK 1.8 kdvolder/j dk85,确认启动是否成功
查看文档ps6、JDK版本
首先进入jdk8容器
在docker exec -it jdk1.8 /bin/bash中验证jdk版本
八. Docker安装ElasticSearch1,拉es的Docker镜像
这里引出7.8.0版
docker pull elasticsearch:7.8.02、拉动后视镜后,docker images会看到后视镜
3、接下来直接启动docker的es镜像即可
# -d :后台运行
# -p :指定宿主机和docker启动容器的端口映射
#-- name :为elastic search容器指定单独的名称
# -e :指定为单节点群集模式
docker run-d-- nameelasticsearch-p 9200:9200-p 9300:9300-e ' discovery.type=single-node ' elastic search:7.
4、访问测试
浏览器输入: http://localhost:9200/,或终端输入: curl http://localhost:9200/
从虚拟机中的浏览器访问:
也可以在虚拟机以外的浏览器中使用IP进行访问。
终端接入:
curl XGET 'localhost:9200 '九、Docker安装KibanaKibana是面向es的数据可视化和管理工具,可以提供实时的直方图、线图、饼图、地图。
需要注意的是,kibana的版本应与elasticsearch匹配,以避免出现不必要的错误。
1、取Kinaba镜像
直接与es版本一致:
docker pull Kibana:7.8.0 2、验证kibana镜像是否被拉动到本地docker images
3、Docker启动Kibana
7.8.0版本的kibana包比较大,启动慢,要等半个小时
# -e :指定环境变量的配置,提供汉化
# --like建立两个容器之间的关联,kibana与es相关联
docker run-d---namekibana---linkelasticsearch:elastic search-e ' i18n _ locale=zh-cn '-p 5601:5601 kiba
docker run-d---namekibana---linkelasticsearch:elastic search-p 5601:5601 kiba na:7.8.0 docker PS是docker的
4、访问测试
虚拟机中的浏览器地址http://localhost:5601/
要在虚拟机以外的浏览器中打开,必须更改IP地址:
输入地址就可以访问了。 也请设定密码
5、修改ES配置
1、进入容器打开文件
文档执行- it容器ID bash
tjt @ tjt-virtual-machine:~ $ docker exec-it2ec6df4ed 409 bashcdconfigvielasticsearch.yml 2,编辑文档
http.CORS.enabled:true http.CORS.allow-origin:' * ' http.CORS.allow-headers:authorization xpack.security
请重新启动es后再执行
tjt @ tjt-virtual-machine:~ $ docker restart 2ec6df4ed 409 tjt @ tjt-virtual-machine:~ $ docker exec-it2 EC6df409 bad 409 bad 这个123456更容易记忆。
重新启动es访问:
tjt @ tjt-virtual-machine:~ $ docker restart2EC6df4ed 409访问虚拟机内部浏览器以访问es,http://localhost:9200/并输入密码
6、修改Kibana构型
1、进入容器打开文件
docker exec-itkibanabashcdconfigvikibana.yml添加以下三行:
elastic search.username:' elastic ' elastic search.password:' 123456 ' i18n.locale:' zh-cn重新启动Kibana访问:
因为es设置了密码,所以Kibana重新启动前的登录界面使用的是es :
重新启动后使用Kibana登录密码的接口样式:
十.安装DOCKER -MINIO文件存储服务器操作minio镜像
tjt @ tjt-virtual-machine:~ $ dockersearchminio2.镜像
如果docker pull minio/minio的minio安装错误,可以删除容器并重新安装。
3、再战Minio。 这次Minio的安装是官网发出的命令
3359 docs.min.io/docs/minio-docker-quick start-guide.html
docker run- p 9000:9000- p 9001:9001- e ' minio _ root _ user=akiaiosfodnn7example '-e ' minio _ rot
重新启动Minio,查看Minio容器日志获得访问地址: http://127.0.0.1:9000
已设置端口。 9000回调到9001
访问虚拟机中的Minio登录页:
我刚自己写了个登录账号:
1帐户: AKIAIOSFODNN7EXAMPLE2密码: wjalrxutnfemi/k7m Deng/bpxrficyexamplekey可以在Account下更改密码:
新用户:
minio/minio123
向minio用户授予策略权限,而在创建新用户后不授予相应的策略,也是如此。
十一. Docker安装Nginx1、docker search nginx命令,确认可用版本。
docker search Nginx 2,采取最新版的nginx镜像,这里拉官方的最新版镜像:
docker pull nginx:latest3,显示本地镜像
使用以下命令确定是否安装了nginx :
文档图像4,驾驶容器
安装完成后,可以使用以下命令运行nginx容器:
docker run---name nginx-test-p 8080:80-d nginx参数说明:
--name nginx-test :容器名称。
-p 8080:80 :映射端口并将本地8080端口映射到容器中的80端口。
-d nginx :安装容器一直在后台运行。
5、在成功安装的测试结束时,现在可以通过浏览器直接访问IP 8080端口的nginx服务。
虚拟机中的浏览器通过localhost访问报告错误:
修改如下。
ssl错误,请求是http,不用https
6 .如何在本地目录中装载配置文件
安装nginx后,您可以知道配置文件位于何处、日志文件目录位于何处,以及web项目是否位于该目录下。
docker run镜像会生成一个容器,其中包括需要修改的配置文件日志文件
进入集装箱bash
1 .进入容器bash
tjt @ tjt-virtual-machine:~ $ docker exec-it 06191 D8 F5 fab/bin/bash在docker容器中进行编辑,因此与外部隔离,需要在docker上安装vim
安装虚拟机后,请再次运行
root @ 06191 D8 F5 fab://vim/etc/nginx/nginx.conf根据需要修改ngnix配置文件
7、ngnix第二种安装方式-本地挂载配置文件等目录,便于以后修改,建议这样做
1 .首先准备本地挂载目录和配置文件
对于普通用户,请向普通用户授予root权限,以便于准备本地配置文件。 否则,将显示一条消息,指示权限不足。
授予用户tjt root权限
TJTALL=(all:all ) all
仍然发现没有root用户,su直接切换到root用户的操作,添加conf、conf.d、logs、html四个文件夹
创建目录后,必须修改两个配置文件
可以从以前安装的docker nginx镜像中复制名为nginx.confdefault.conf的两个配置文件,也可以从其他环境中复制配置。
创建配置文件后,请在html目录下创建新的index.html页以测试Nginx
html的内容请自由书写:
2 .然后,可以在运行时指定安装目录
要删除使用以前方法安装的ngnix镜像,请执行以下操作
装载日志目录
挂载配置目录
装载主配置文件
命令:
docker run-- name docker _ nginx-d-p 8080:80- v/home/docker/nginx/logs:/var/log/nginx-v/home/logs
--name为您启动的容器命名,以后可以使用此名称启动或停止容器
-p映射端口。 将docker宿主机上的80个端口绑定到容器上的80个端口
用于装载-v文件的第一个-v意味着复盖启动您的本地nginx.conf的容器的nginx.conf文件,第二个意味着装载日志文件。 将nginx服务器日志写入到您的docker主机的/home/docker-nginx/log/或以下
第三个-v和第一个-v的意思相同。
-d表示正在启动哪个镜像
确定在docker ps上是否成功安装了ngnix
3、访问测试
虚拟机中的浏览器测试: localhost:8080
十二.安装docker-compose安装docker-compose,使用docker-compose.yml组织微服务器启动。
0 .确认是否安装
访问docker-compose---version 1.https://github.com/docker/compose/releases查看最新版本。 现在的版本是1.23.1
sudo curl-l https://github.com/docker/compose/releases/download/1.23.1/docker-compose-` uname-s `-` uuuules
sudo curl-l ' https://get.Dao cloud.io/docker/compose/releases/download/1.25.4/docker-compose-$ (
sdochmodx/usr/local/bin/docker-compose4.检查安装是否成功
这样,所有的安装准备都做好了。 接下来是工程的导入。 安装了以下镜像。
十三.后端项目版本1、生成镜像并准备启动
在src/main/路径下创建新的docker文件夹,并创建新的docker文件,即docker-compose.yml文件。
2、项目打jar包
在Maven工具install中打开jar包,在相应项目的target目录中获得xxx.jar。
3、使用Docker文件创建Docker镜像
请注意这里的jar包的位置。 将target目录中生成的jar包复制到src/main/docker目录中。
按如下方式写入Dockerfile :
#在当前容器VOLUME /tmp#中装载本地文件夹,然后将文件放入容器add common-gateway-0.0.1-snapshot.jar/gateway.jar entry point [ dev/./urandom '、'-jar '、'/gateway.jar ' ] envtimezoneasia/Shanghai将上载到服务器上相应的目录中
在相应的目录中,执行命令。
docker build-tgateway-service:0.0.1 .此外,在docker images中,可以看到镜像已经存在。
你可以去写docker-compose.yml。
4、使用docker-compose.yml组织微服务器的启动
写入docker-compose.yml :
version:'3' services:gateway-service:image:gateway-service:0.0.1 ports:- 9999:9999 iamge :连接的相应镜像名称为
端口:端口映射溢出。 保持一贯性,不易混淆。 但是,请将前端包保持映射到Nginx端口。
的双曲正弦值
文档合并- d-d :保持后台运行
成功后查看文档PS :
访问nacos服务并查看服务列表,您会发现nacos服务列表中有微服务器。
然后将剩下的8个微服务器分别打包成第一个gateway微服务器并上传到Docker。 只打包build,不运行就启动。 打包后,通过编写docker-compose脚本一起启动所有微服务。
5、工程包装
common-oautp包上传:
mng-sys包上传:
mng-mall打包上传:
api-mall打包上传:
上传api-pay包:
上传api-customer包:
上传api-member包:
上传api-aiot包:
6、工序增加到容器中
上传后分别添加到容器中:
第一个网关服务: docker build-tgateway-service:0.0.1。
docker build-toa UTP-service:0.0.1.docker build-tapi-mall-service:0.0.1.docker build-tsys-service:0.
我看到这9个项目被添加到了docker容器中,但是没有启动,还需要编辑docker-compose.yml编排微服务器的启动。
运行docker-compose命令:
docker-compose up -d会多次运行此命令,以重新定位发生更改的项目。
要在docker ps -a中检查docker容器中的操作状态,请执行以下步骤:
要查看nacos服务列表中的运行状况,请执行以下操作:
因为10个微服务只跑了9个,所以担心电脑扛不住,以前在公司的电脑IDEA上启动5个以上的微服务的话每次都会闪烁着退出。
心力交瘁,终于打通了9项服务:
如果确定ES中是否存在索引,则在项目开始时会自动生成ES索引和字段。
后端服务的部署至此告一段落。 接下来是三个前端项目。
十四.前端工程版本1、创建VUE前端项目文档文件
from nginx:latest maintainer 302665496 @ QQ.comcopydist//usr/share/nginx/html /第一行是基础镜像设置,即我们刚才拉拽的nginx镜像此路径是nginx的常用项目地址路径。 你还记得nginx的测试页在哪里吗? 此路径下的index.html。
2、创建镜像
将dist目录中的静态文件、index.html文件和docker文件上载到虚拟机的相应目录
在Dockerfile的目录中执行
docker build-t admin-mall-vue:v1.admin-mall-vue:v1是您镜像的名称。 特别是注意后一页的这一点不能省略。
然后可以在docker images中看到自己制作的VUE镜像。
3、制作集装箱
执行命令:
# -d后台运行
# -p端口映射
docker run-d-p 9090:80 admin-mall-vue:v1
接下来,执行文档PS的显示。
4、访问测试
在内部浏览器中访问:
是否可以到虚拟机外部并使用ip访问成功登录:
交换一下照片,看看是否可以使用minio文件服务器。
还有两个前端项目的引入,一个IM客服聊天,一个手机APP商城。 部署方法与后台管理vue项目类似。 3个前端工程,9个微服务的发布到此为止。
在上一步中,您可以创建脚本,如build装载镜像。
另外两个前端项目的结构如下。
运行h5 APP前端项目的构建脚本:
运行im客户聊天系统的构建脚本:
在文档图像中查看构建结果
运行docker-compose以运行两个前端项目。
文档- compose up-d
查看docker ps -a版本状态:
使用虚拟机ip 172.16.114.135和端口号9091/9092访问呼叫IM页面和H5商城页面。
点赞后请转发关注! 大家的支持是我分享最大的动力!