1. 为什么要引入docker:
    a. 微服务虽然有各种各种的优势 ,但是微服务的拆分部署还是带来很大的麻烦,
    b. 分布式系统系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突
    c. 在数百上千台的服务中重复 部署,环境不一定一致,会遇到各种问题
    d. 开发 生产环境也有差异 依赖关系复杂, docker可以解决依赖兼容问题

  2. docker 解决依赖兼容问题2个手段

    1. 将程序的libs(函数库),依赖,环境,和配置与程序一起打包
    2. 将每个应用程序放到一个隔离的容器去运行,避免互相干扰
  1. docker解决操作系统环境差异
    a. docker镜像中包含完整的运行环境,包含所需要调用的系统函数库
    b. 运行到不同的操作系统时,直接基于打包的函数库,借助于操作系统的lunix内核来完成运行

  2. docker与虚拟机的区别:
    a. 虚拟机是在操作系统中模拟一台硬件设备,然后运行另一个操作系统,
    b. docker仅仅是封装函数库,并没有模拟完整的操作系统
    c. docker是一个系统进程,虚拟机是操作系统中的操作系统
    d. docker体积小.启动速度快,性能好

  3. docker结构:镜像与容器
    a. 镜像(image) :docker将程序以及程序所需要的依赖,函数库,配置文件,运行环境等文件打包在一起,称为镜像
    b. 容器(container)镜像中应用程序运行后形成的进程就是容器,只是docker会对外做隔离,对外不可见

  4. **docker是cs结构:client和server 客户端和服务端 客户端发送指令 服务端处理指令和管理镜像和容器

**

  1. 镜像命令:
    镜像名称组成: 2个部分 名字与版本号 例:mysql:5.3.4 没有指定版本号 默认为最新版本
    指令1: docker pull 镜像名 拉取镜像 如果,没有配置自己的镜像库 默认在官网镜像库拉取
    指令2: docker load -i 镜像压缩包名 解压加载镜像
    指令3: docker save -o 镜像压缩包名 镜像名 打包镜像
    指令4: docker rmi 镜像名 删除镜像
    指令5: docker images 查看所有镜像
    指令6: docker build 构建自定义的镜像 需要搭配 Dockerfile文件使用

  2. 容器命令:
    指令1: docker run —name 指定容器名字 -p 880:8080指定端口映射 -d 后台运行 镜像名 (创建并运行一个容器,处于运行状态)
    指令2: docker pause 容器名 暂停容器
    指令3: docker unpause 让一个暂停的容器恢复
    指令4: docker start:让一个停止的容器再次运行
    指令5: docker rm 容器名 删除指定容器
    指令6: docker exec -it 容器名 bash ( docker exec进入指定容器内部 操作命令)
    指令7:docker ps 查看正在运行的容器 加-a 表查看所有的容器

  3. 数据卷 文件挂载:
    数据卷volume是一个虚拟目录,指向宿主机文件中的某个目录
    基本语法:docker volume create 创建一个数据卷
    inspect 查看一个数据的信息
    ls 列出所有的数据卷
    prune 删除未使用的volume
    rm 删除一个或者多个指定的数据卷
    可以将容器与数据解耦合 方便操作
    docker run —name 名字 -p 端口映射 -v 指定文件:要映射的文件 -d 镜像名

  4. Dockerfile语法
    image.png
    # 指定基础镜像

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