微服务—Docker(部署)

目录

1.初识docker

1.1docker简介

 1.2    docker与虚拟机的区别

 1.3 docker架构

 1.4 安装docker

2. docker基本操作

2.1 镜像操作

2.2 docker容器相关

 2.3 数据卷

3.自定义镜像

 3.1 镜像得结构

3.2 dockerfile 

​编辑 4.dockercompose

4.1 dockercompose是什么及下载

4.2 部署微服务集群 

 5 Docker镜像仓库


1.初识docker

1.1docker简介

大型项目中组件比较多,运行环境也较复杂,部署时会碰到一些问题。

nodejs redis mysql等都会部署到服务器linux等操作系统上 而这些应用都会有一些依赖,函数库等,这些依赖函数库都会有一些差异,调试好得开发环境还不适用于测试,生产等环境,所以通过docker来解决这些部署得问题。

通过docker将运行环境一起打包(函数库,依赖,配置等),仅限于同一操作系统。

系统得底层逻辑

 内核通过简单得指令调用计算机硬件 系统应用(ubungtu centos)它会将系统应用组装在封装行程一个函数组成函数库 程序员通过函数库调用指令 指令调用硬件。

所以系统不同函数库也不相同 无法跨系统运行。

 docker直接打包函数库 可以说只要是linux都可以。

总结一下 docker就是一个快速交付,运行应用的技术。

 1.2    docker与虚拟机的区别

hypervisor 可以模拟各种计算机的硬件,所以可以模拟各种系统从而实现虚拟机。

docker直接调用操作系统内核所以它的执行性能要比虚拟机好很多。

 1.3 docker架构

主要是镜像和容器

镜像(Image):docker将应用程序及其所需的依赖,函数库,环境,配置等文件打包,称为镜像

容器(container):镜像中的应用程序运行后形成的进程就是容器,只有docker会对容器隔离,对外部可见。

隔离的目的是不污染镜像文件 ,如写的数据,日志等之存在于自己的容器中

 

 

 mysql nginx这些其实去官方文档pull就可以 不用自己创建除非是私人的应用。

 1.4 安装docker

docker分为ce和ee 两个版本  ce为社区版(免费支持7个月),ee企业版,强调安全,付费使用支持24个月。

centos 上安装docker  docker ce支持64位版本的centos 7 ,并且要求内核版本不低于3.10,centos 7 满足地内核的要求,所以我们在centos 7安装docker。

卸载(如果有的情况下):

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

安装docker:

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

更新本地镜像源:

(因为默认下载是在国外的网站,速度较慢 所以通过yum工具配置安装仓库 在阿里云)

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

输入命令安装:

yum install -y docker-ce

docker应用需要用到各种端口,逐一去修改防火墙设置,很麻烦所以在此直接关闭防火墙。

启动docker前,一定要关闭防火墙!!!

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

通过命令启动docker;

systemctl start docker      #启动docker

systemctl stop docker       #停止docker

systemctl restart docker    #重启docker

systemctl status dockers    #查看docker状态

查看docker版本

docker -v

配置镜像

docker官方镜像仓库网速较差,我们需要设置国内镜像:

参考阿里云的镜像加速文档:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon. json <<-'EOF'
{
"registry-mirrors":[" https://d6g8dchp.mirror.aliyuncs.com "]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

 创建一个文件 将网址写入daemon.json     重新加载 重启docker

2. docker基本操作

2.1 镜像操作

 

 本地有的话 用 docker build  从服务器拉取的话用pull 大多数都是pull  

U盘copy的话用 docker save  加载的话 用docker load

docker --help  就是关于docker的所有命令

详细的 镜像命令的话为 docker images --help

 下载镜像的话 去dockerhub 官网搜索相关的镜像即可 如nginx:

docker pull nginx 为拉取最新的版本  

打包:(应用--help)

 

docker save -o nginx.tar nginx:latest  #打包
    
docker rmi nginx                       #删除 

docker images                          #查看

docker load -i nginx.tar               #加载

2.2 docker容器相关

 停止是直接杀死进程  暂停暂时挂起还可以使用

因为每个容器都是相对隔离的 外界无法访问 只有通过映射的方式

 53cb是每个运行的容器id 都是唯一的 

通过docker ps 可以看到

容器id   容器   命令  创建时间  状态  端口

 需要用到sed修改到其中几项(后面基本用不到,也不方便)主要的命令是:

docker exec -it 名字 bash

 2.3 数据卷

针对于2.2修改内容麻烦的问题 还有数据不可复用,升级维护困难等所以这里需要数据卷。

数据卷(volume):是一个虚拟目录,指向主机文件系统中的某个目录。

(个人理解就是 数据卷搭桥 把宿主中的文件和容器中的相关联,直接改宿主机文件即可 使得可以便于修改升级) 

 会 dockers volume --help 就行

 2.3.1 挂载数据卷

 通过 -v volume:容器内的地址     即可修改  修改文件时可以用文件编译器直接修改不用vim

  

通过宿主文件挂载

 去 hub.docker.com 官方文档搜索mysql 就会有如下的各种文档 使用方法 文件位置等:

两种挂载对比:

通过volume挂载:

优点:使用数据卷时 docker会帮我们创建目标目录,docker挂载只需要挂载到卷上即可。不需要关心目录的位置。属于全权交给docker处理不用我们操心。

缺点:目录不是我们创建在哪里也不知道,去找比较麻烦。

通过目录挂载:

自己创建文件 位置清楚,将来定位文件一目了然。 偏麻烦一点。


3.自定义镜像

        之前使用得都是dockerhub官方制作得镜像 mysql nginx redis等 但是自己私人得java -jar项目只有自己制作与推送所以以下是关于自定义镜像得内容。

 

 3.1 镜像得结构

镜像:镜像是将应用程序,还有应用所需要得系统函数库,配置,环境,依赖打包而成。

拿mysql举例:

 

3.2 dockerfile 

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

一目了然步骤很清晰 从 from得基础镜像 环境变量得目录  到最后启动。

修改只需更改第八行得包名即可。

systemctl start docker            #启动docker
docker build -t javaweb:1.0 .     #-t表示版本  后面得" ."代表当前目录。
docker images                     #查看当前得镜像
docker run --name javaweb -p 8090:8090 -d javaweb:1.0       #启动
docker ps                         #查看当前得进程(容器)

       去浏览器访问即可。

也可以通过alpine来操作

 4.dockercompose

4.1 dockercompose是什么及下载

 DockerCompose就是把Docker run得各种指令转换成指令去定义

 

 上图左右可以一一对应 也可以去官网文档查看。

下载方式:

可以去官方文档下载

x是文件控制权  

绿色代表可以执行。

 自动补全,可以有提示。

 

4.2 部署微服务集群 

 

通过docker-compose up -d 后台运行  stop  restart  down等命令

docker-compose logs -f 查看日志

docker-compose ps   看运行

主要是docker compose得编写(图二) 

 5 Docker镜像仓库

管理镜像得仓库。无论是官方得镜像还是我们私有得java镜像。

搭建

推送

拉取

 私有仓库主要注重得是隐私和安全。

图形化是依赖于官方registry得基础上个人编写得,是一个额外得服务 ,所以我们通过docker compose 将两者组合部署

 然后将ui命令复制到mkdir docker-ui  touch docker-compose.yml 中

docker-compose up -d   #启动

docker-compose logs -f  #查看日志

  

向私有仓库推送 必须先tag 改成带有私有仓库地址/名称:版本号的形式。

私有仓库的样子:

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于springboot和docker部署微服务架构.zip j360系列之spring-boot微服务架构和docker部署 ##介绍## j360-order底层服务提供接口 使用restAPI提供服务 j360-deliver提供UI操作界面,调用底层j360-order提供服务 构建 Java 1.7+(官方建议1.8) Maven 3.2+ Spring 4.1.3 Spring-boot 1.3.0.BUILD-SNAPSHOT j360 1.0.0.BUILD-SNAPSHOT ##j360-order## 直接使用Spring data jpa,省点力气写dao :) ###两种rest风格### @RepositoryRestResource(collectionResourceRel = "expresss", path = "expresses") +spring.data.rest.base-path=/api http://localhost:8080/api/expresses/1 通过dao层接口映射到api接口,类似于ws,可以查看所有的接口列表及类型 @RestController+@RequestMapping("/expresses") http://localhost:8080/expresses/1 常规rest,推荐 也可以使用hateoas来实现超媒体的rest效果 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-hateoas</artifactId> </dependency> ##j360-deliver## RestTemplate作为restAPI调用工具,需要定义@Bean ExpressApiService使用netflix.hystrix确保分布式系统的持久性 ###测试## 单元测试 ExperssServiceTest 测试api接口调用实现 测试Hystrix在远程调用中的封装 使用restapi或许order的map属性 1、expressServiceTest 直接或许 2、expressApiTest 封装hystrix进行读取 3、通过aop-hystrix无侵入式读取 MockMvc测试 测试用户界面调用接口 ##j360-profile## hateoas演示案例 hateoas restful

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值