赞
踩
- 用途
docker基于容器化,将一系列应用看作一个个容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个Docker,而MySQL运行在另外一个Docker,另外还可将该容器背后支持的镜像发布仓库储存,例如以后扩展其它业务或新增服务器部署环境只需用docker下载镜像直接发布项目无痛使用。
- 原理(摘抄)
Docker利用Linux中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(名字空间)来创建独立的容器。一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。Docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核是共享宿主机OS,所以说Docker是轻量级的虚拟化技术。
准备
实现
使用docker容器化技术部署后台服务
注:如果没有的,下面地址下载即可
链接:https://pan.baidu.com/s/13QLACLI64X3lxGvvuM8hcg 提取码:l9p3
注:里面jdk就是我的压缩包文件
#指定当前镜像在于centos虚拟服务器里面存在的(相当于linux服务器一样,虚拟化了) FROM centos:7 #2、指明该镜像的作者和电子邮箱 MAINTAINER xwl "250964....@@.com" #3、在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录 WORKDIR /usr/local/docker #4、一个复制命令,把jdk安装文件复制到镜像中,语法 ADD SRC DEST ,ADD命令具有自动解压功能 ADD jdk /usr/local/docker #5、配置环境变量,此处目录为tar.gz包解压后的名称,需提前解压知晓: ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_91 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$JAVA_HOME/bin:$PATH
执行命令
注:后面的.不能省略,必须存在
docker build -t myjdk:1.0 .
执行命令查看创建的镜像
docker images
执行命令
docker run -itd --name testjdk myjdk:1.0 /bin/bash
执行命令查看是否启动成功
docker ps
执行命令查看该容器的唯一id标识
docker ps -aq
docker exec -it testjdk /bin/bash
java -version
jdk镜像就OK了,关闭容器即可
注:eureka工程我就不说了,默认你存在工程环境,如果你没有,这里有我的一篇文章供参考~
这里的From是引用的意思,因为jar的运行是需要jdk的环境支持,所以这里直接引用之前创建的jdk镜像就OK了
说明:jdk镜像内置有了jdk,引过来之后就相当于我当前的镜像也有了jdk,理所当然就可以运行jar包了~
From myjdk:1.0
RUN mkdir /jars
ADD eureka-server-0.0.1-SNAPSHOT.jar /jars/eureka.jar
ENTRYPOINT ["java","-jar","/jars/eureka.jar"]
docker build -t myeureka:1.0 .
docker images
运行容器
–name:起一个容器名称
-p:对外开放的端口号为8761,对应容器内部的eureka端口号8761
docker run -d --name eurekas -p:8761:8761 myeureka:1.0
docker ps
查看运行日志
docker logs -f eurekas
浏览器访问ip+端口
OK,eureka注册中心就运行成功了
注:网关zuul我的文章供你参考搭建如下
SpringCloud Zuul网关搭建及运行
注意:网关是要注册到eureka上面去的,那么配置文件注册的时候实际注册到eureka的地址就不能写localhost了,因为docker里面宿主机每个容器的IP地址不同,这里注册的时候就要写成eureka容器的名称或者容器的地址,以下是我的配置文件供参考
server: port: 5555 spring: application: name: zuul-server #mysql基础配置 datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: root url: jdbc:mysql://localhost:3306/myxue?characterEncoding=utf-8 eureka: instance: hostname: localhost #指定访问本机IP prefer-ip-address: true client: #被注册中心eureka发现并注册 fetch-registry: true register-with-eureka: true service-url: #eurekas就是注册中心刚才容器的名称 defaultZone: http://eurekas:8761/eureka zuul: prefix: /api #转发服务 routes: other: path: /other-server/** serviceId: other-server show: path: /show-server/** serviceId: show-server #配置mybatis-plus打印sql语句于控制台 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启驼峰命名转换 map-underscore-to-camel-case: true #错误响应配置时间 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 6000 #熔断响应时间 #ribbon超时配置 读取和等待时间都设置6秒 ribbon: #熔断读取时间 ReadTimeout: 60000 #连接等待时间 ConnectTimeout: 60000
From myjdk:1.0
RUN mkdir /jars
ADD zuul-server-0.0.1-SNAPSHOT.jar /jars/zuul.jar
ENTRYPOINT ["java","-jar","/jars/zuul.jar"]
docker build -t myzuul:1.0 .
查看网关zuul镜像
docker images
基于镜像运行容器并注册到eureka上
–link:打通与eureka注册中心的互连
说明:docker是容器化部署,那它的每个容器运行都是在虚拟化环境中运行,那么就是在不同的主机运行,ip肯定不一致,所以docker提供了一个link参数桥接容器与容器之间的连接,以达到高可用的效果
docker run -d --name zuuls -p:5555:5555 --link eurekas:eurekas myzuul:1.0
可以看到目前已经启动了两个容器分别是eureka和网关zuul
测试网络是否互通
进入网关容器
docker exec -it zuuls /bin/bash
查看eureka是否和它互连
cat /etc/hosts
在网关容器内部我去pingeureka的ip
ping eureka的ip
上图所示,可以ping通,OK~~
查看效果
微服务业务服务很多,我这里就举例一个了~其它的大同小异,和我这个类似,自行发挥就行
From myjdk:1.0
RUN mkdir /jars
ADD other-server-1.0-SNAPSHOT.jar /jars/other.jar
ENTRYPOINT ["java","-jar","/jars/other.jar"]
注意:其它服务是通过网关进行转发的,那么其它服务就不能默认localhost了,就要给它分发一个ip,让网关根据我们设置的ip去找容器,这样就可以转发成功,必须设置我设置的为172.18.0.4,这个是根据刚才的网关和eureka的ip自己随便弄一个就行,至于为了是172.18.0.4因为这是我服务器上这几个容器运行的网段,~~
#端口 server: port: 8111 spring: application: name: other-server datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: root url: jdbc:mysql://localhost:3306/myxue?characterEncoding=utf-8 jpa: show-sql: true hibernate: ddl-auto: update cloud: inetutils: default-ip-address: 172.18.0.4 eureka: instance: hostname: localhost prefer-ip-address: true instance-id: ${spring.cloud.inetutils.default-ip-address}:${spring.application.name}:${server.port} client: fetch-registry: true register-with-eureka: true service-url: defaultZone: http://eurekas:8761/eureka #配置mybatis-plus打印sql语句于控制台 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启驼峰命名转换 map-underscore-to-camel-case: true
docker build -t myother:1.0 .
docker images
运行容器
–link:这里互通两个,一个是eureka,一个是网关zuul
说明:普通服务要注册到eureka上,并且也要和zuul互通,因为网关的转发都是基于其它服务的所以这是必然的~
docker run -d --name other-server -p:8111:8111 --link eurekas:eurekas --link zuuls:zuuls myother:1.0
docker ps
查看注册中心服务列表,成功!
自此,docker就算入门了,还有其它更优秀的知识能够更简洁的部署服务,这里是我学到docker的入门阶段自己实践成功之后发布的文章,供大家参考学习~,循序渐进,完事儿。
如果你没有实践成功,或者文章有不理想的地方,欢迎一起交流
微信:x331191249
QQ:2509647976
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。