微服务----Docker

本文深入探讨了Docker的概念,包括与传统虚拟化的区别、安装步骤、Docker镜像的原理及其创建与管理。详细介绍了如何使用Docker运行Python Flask web应用、MySQL数据库,并通过Docker Compose进行多服务部署。同时讲解了Dockerfile的编写以及数据卷的使用,强调了容器化在微服务架构中的重要性。
摘要由CSDN通过智能技术生成

数据卷 

参考文档

https://topsale.gitbooks.io/java-cloud-dubbo/content/

  

 单体应用:

项目的架构完完全全属于传统的 MVC 架构,所有的子系统都集成在一个很繁杂的 JVM 进程中。

优点:

这种单体架构的优点在于方便管理,所有代码在同一项目中,但是当需求越来越多,项目规模越来越大,其坏处也很明显。

缺点:

  1. 项目过于臃肿,部署效率低下
  2. 系统高可用性差,资源无法隔离
  3. 开发成本高
  4. 无法灵活拓展
  5. 牵一发而动全身,修改很麻烦

 微服务:

服务化:用通俗的语言来说,服务化就是把传统单体应用中通过 JAR 包依赖产生的本地方法调用,改造成 RPC 接口产生的远程方法调用。这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

目的:解决单体应用带来的缺点

如果部署:将单体应用拆分为多个服务,生成多个实例(部署在doctor之上),有负载均衡服务器访问

 

 Doctor:

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

传统的虚拟机技术,创建的操作体统,需要占用计算机资源,且各个系统资源不能共享(一个操作体统虚拟化的cpu不能给另一个操作提供使用),虚拟机之上操作系统不可以在装虚拟机

docker之上安装的操作系统占用的所有的资源都来自宿主机,资源共享。docker之上操作系统还可以装docker

 

 

 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。

 

 

 

Docker 镜像

我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系统的 root 文件系统。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

 

安装

  • 它仅适用于 64 位 Linux 安装
  • 它需要 Linux 内核版本 3.10 或更高版本。(可以升级内核)
uname --m   #查看系统64位还是32位
uname -r      #查看内核版本

使用脚本安装 Docker

curl -sSL https://get.daocloud.io/docker | sh

查看版本

docker version

 如果使用非root用户直接运行docker时  执行 sudo usermod -aG docker 用户名 命令,然后重新登陆(xShell和服务器断开连接,如果不行,试着重启一个docker),否则会报错,没有权限

sudo usermod -aG docker zy   //本机普通用户的用户名为zy

重启docker

service docker restart

启动docker

service docker start

停止docker服务

service docker stop

查看docker服务的运行状态

systemctl status docker.service

配置加速器 

1:

sudo vim  /lib/systemd/system/docker.service
添加 --registry-mirror=https://jxus37ac.mirror.aliyuncs.com 到 ExecStart:

  

配置加速器的另一种方式,适用Ubuntu 16.04+、Debian 8+、CentOS 7

请在/etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件),注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。如果使用了第二中,必须将第一种设置的给删除掉;

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"  //mirror地址,上面的地址也可以,我本人测试速度好像都差不多
  ]
}

2:保存配置

systemctl daemon-reload

3:重启服务

service docker restart

4.查看是否配置成功

  在命令行执行 docker info,出现下面的信息,则成功

  

 

  

 

 第一个Docker应用程序

用docker命令运行一个镜像,启动一个docker容器

docker run --name [mytomcat] -d tomcat:lastest  --name:自定义docker名字,-d:后台启动,tomcat:lastest:指定的镜像

启动docker容器,并执行docker容器中的程序

docker run ubuntu:18.04 /bin/echo "hellow"

解释这段代码:启动Ubuntu:18.04 这个镜像,生成一个docker容器(images启动才生成docker容器),由这个容器中的echo,来打印"hellow",所以第一次执行的时候,会去下载镜像,等下载完毕后才执行echo,第二次执行,速度就很快了,原因,镜像已经被下载了,直接使用即可,所有的镜像存放在:https://hub.docker.com/search?q=&type=image

在主线程中运行的(不是在容器中输入这些命令)

docker images                           //查看所有的镜像
docker ps -a                            //查看docker容器运行过的容器
docker ps                               //正在运行的docker容器(后台)
docker rm [9996c85163(CONTAINER ID)]   //删除由docker ps -a 中展示的信息
docker rm  ID[NAME] ID[NAME]            //删除多个容器,输入制定的容器ID或者NAME
docker rmi ID                           //删除镜像
docker logs -f  CONTAINER ID            //打印后台日志(可以加一个参数 -f,使它一直处于监听模式)

docker stop  CONTAINER ID               //停止后台一直运行的容器(服务)
docker restart CONTAINER ID             //重新启动一个容器
docker start CONTAINER ID               //启动一个停止的容器

docker exec -it CONTAINER ID /bin/bash  //进入正在运行的docker容器,此时会进入到容器之中,通过ps命令来查看该容器运行的程序
docker top CONTAINER ID(如果不行使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值