SpringCloud学习笔记(四)Docker

一、Docker如何解决依赖的兼容问题

  • 将应用的libs(函数库)、Deps(依赖)、配置与应用一起打包,形成可移植镜像
  • Docker应用运行在容器中,使用沙箱机制,相互隔离

二、Dokcer如何解决开发、测试、生产环境有差异的问题

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行
  • 依赖就是指在Java开发过程中引入的各种jar包和第三方库

三、Docker与虚拟机

  • Docker是一个系统进程,虚拟机是在操作系统中模拟硬件设备,然后运行另一个操作系统
  • Docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

四、镜像和容器

  • 镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像
  • 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会将容器做隔离,对外不可见
  • 镜像对于容器来说是只读的,不能修改镜像中的任何内容;一个镜像中可以包含多个容器

五、Docker架构

  • Docker是一个CS架构的程序,由两部分组成:
  • 服务端:Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端:通过命令或RestAPI,在本地或远程向Docker服务端发送指令
  • Registry指镜像托管的平台,例如DockerHub、阿里云镜像服务等

六、Docker的安装

  • docker安装过程:Docker的安装
  • 注意:如果发生报错信息yum-config-manager: command not found,是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,通过命令yum -y install yum-utils 安装就可以了

七、Docker的启动、关闭和查看

systemctl start docker #启动docker
systemctl stop docker #关闭docker
systemctl status docker #查看docker运行状态

八、Docker中镜像的基本操作

1、镜像名称

  • 镜像名称一般由两部分组成:[respository]:[tag],例如mysql:5.7
  • 在没有指定tag时,默认是latest,代表最新版本的镜像

2、镜像操作命令

  • docker build:构建镜像
  • docker push:推送镜像到服务
  • docker pull:从服务拉取镜像
  • docker save:保存镜像为一个压缩包
  • docker load:加载压缩包为镜像
  • docker images:查看镜像
  • docker rmi:删除镜像
  • docker --help:查看docker命令的详细说明
    SpringCloud学习笔记(四)Docker_第1张图片
    SpringCloud学习笔记(四)Docker_第2张图片

3、相关案例:去DockerHub搜索并拉取一个Redis镜像

  • 去DockerHub搜索Redis镜像
  • 查看Redis镜像的名称和版本
  • 利用docker pull命令拉取镜像
  • 利用docker save里面将redis:latest打包成一个redis.tar包(存放在当前目录下)
  • 利用docker rmi删除本地的redis:latest
  • 利用docker load重新加载redis.tar文件(可以通过ll查看当前目录下有哪些文件,然后再通过load加载成镜像)

九、Docker中容器的基本操作

1、容器操作命令

  • docker run:第一次创建并运行容器
  • docker exec:进入容器执行命令
    • 格式为:docker exec -it [ 容器名 ] /bin/bash 可以进入容器
    • exec命令可以进入容器修改文件,但这种方式并不推荐
    • exit命令可以退出容器
  • docker logs:查看容器运行日志
  • docker ps:默认查看所有运行的容器及状态
    • 添加-a参数查看所有状态的容器
  • docker pause:暂停容器中的所有进程
  • docker unpause:恢复容器中所有的进程
  • docker stop:容器内主进程会在指定时间内被杀死,默认为10s
  • docker start:重新启动容器
  • docker rm:删除指定容器
    • 不能删除正在运行的容器,除非添加参数-f

2、相关案例:创建运行一个Nginx容器

  • 去DockerHub查看Nginx的容器运行命令

  • docker run --name containerName -p 80:80 -d nginx

  • 命令解读:
    - docker run:创建并运行一个容器
    - --name containerName:给容器起一个名字,例如叫cn
    - -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
    - -d:后台运行容器
    - nginx:镜像名称,例如nginx

  • 注意:如果使用virtualBox且网络拒绝访问,看这个链接Virtualbox实现端口转发 记得在设置中也要设置端口转发,虽然我也不知道为什么SpringCloud学习笔记(四)Docker_第3张图片
    3、相关案例:创建并运行一个redis容器,并且支持数据持久化

  • 到DockerHub搜索Redis镜像

  • 查看Redis镜像文档中的帮助信息

  • 利用docker run命令运行一个Redis容器

十、数据卷

1、数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录,映射如下

  • 其作用在于将容器和数据分离,解耦合,方便操作容器内数据,保证数据安全
    SpringCloud学习笔记(四)Docker_第4张图片

2、数据卷操作的基本语法:docker volume [COMMAND]

  • create:创建一个volume
  • inspect:显示一个或多个volume的信息
  • ls:列出所有的volume
  • prune:删除未使用的volume
  • rm:删除一个或多个指定的volume

3、基础案例:创建一个数据卷,并查看详细信息

#创建数据卷
docker volume create html
#查看所有数据
docker volume ls
#查看数据卷详细信息
docker volume inspect html

4、挂载数据卷

  • 我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录
#-v后面的参数就是指定数据卷和挂载的目录
docker run --name mn -v html:/root/html -p 80:80 nginx
#具体格式如下
#数据卷挂载,耦合度低
-v volume:容器内目录
#目录挂载,耦合度高
-v 宿主机文件:容器内文件
-v 宿主机目录:容器内目录
  • 如果容器运行时volume不存在,会自动被创建处理,例如上例中的html

5、进阶案例:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

  • 从DockerHub中拉取MySQL镜像,并在DokcerHub中查阅资料,创建并运行MySQL容器
  • 创建目录/tmp/mysql/data
  • 创建目录/tmp/mysql/conf,将hmy.cnf文件上传到这个目录下
  • 挂载/tmp/mysql/data到mysql容器内数据存储目录
  • 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件
  • 设置mysql密码

6、数据卷挂载的方式对比
SpringCloud学习笔记(四)Docker_第5张图片

十一、自定义镜像

1、镜像结构

  • 镜像是分层结构,每一层都称为一个Layer

  • BaseImage层:包含基本的系统函数库、环境变量、文件系统

  • Entrypoint:入口,是镜像中应用启动的命令

  • Layer:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装与配置
    SpringCloud学习笔记(四)Docker_第6张图片
    2、Dockerfile

  • Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像,每一个指令都会形成一个Layer

  • Dockerfile的第一行必须是FROM,从一个基础镜像来构建

  • 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine
    SpringCloud学习笔记(四)Docker_第7张图片

3、案例:基于Ubuntu镜像构建一个新镜像,运行一个java项目

  • 新建一个空文件夹docker-demo
  • 拷贝jar包、jdk8.tar.gz、Dokcerfile文件到docker-demo目录
  • 进入docker-demo
  • 运行命令:docker build -t javaweb:1.0 .

十二、DockerCompose

  • Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器
  • Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行

十三、Docker镜像仓库(DockerRegistry)

1、镜像仓库有公共的和私有的两种形式

  • 公共仓库:例如Docker官方的DockerHub,国内的比如阿里云镜像服务
  • 私有仓库:企业可以在本地搭建私有DockerRegistry,企业自己的镜像最好是采用私有DockerRegistry来实现

2、在私有镜像仓库推送或拉取镜像

  • 推送本地镜像到仓库前都必须重命名(docker tag)镜像,以镜像仓库地址为前缀
  • 镜像仓库推送前需要把仓库地址配置到docker服务的daemon.json文件中,被docker信任

十四、centos下文件执行权限不够,然后找不到目录

  • 先赋予权限:chmod +x *.sh
  • 然后进入vim模式:vi *.sh
  • 接着修改格式::set ff=unix
  • 查看格式::set ff 如果显示等于unix即为成功
  • 最后退出vim模式: :wq
  • 重新执行脚本:./*.sh

你可能感兴趣的:(SpringCloud学习笔记,docker,spring,cloud,学习)