- 回归历史部署服务的三个时代
- 物理机时代
- 安装环境复杂
- 可移植性差
- 硬件资源浪费
- 虚拟机时代
- 资源利用率要高于物理机时代
- 移植性差(虚拟机占用内存大)
- 容器化时代
- 移植性高
- 运行速度快
- 资源利用率高
- 轻量级(容器也不会捆绑应用环境所依赖的操作系统,轻量级不言而喻)
- 容器化将应用程序所需要的代码,配置文件,以及库依赖,环境等打包成一个整体
- 物理机时代
- 虚拟化技术主要是依托于Hypervisor (虚拟机监控程序)。
- 他处于计算机的物理层和虚拟机之间,能够有效管理将计算机的物理资源设备分配给不同的虚拟环境
- # Docker服务的基本概念
- 镜像
- 一个特殊的文件系统,提供了运行程序完整的软硬件资源。可以说是应用程序的集装箱。是一个只读的文件
- 容器
-
- 基于镜像去创建
- 是镜像的实例,由Docker进行创建
- 容器和容器之间互相隔离
- docker exec -it 容器id /bin/bash 进入到容器的内部
- 默认存储在宿主机的/var/lib/docker
Docker容器的生命周期
- docker create 容器名称 ----- 创建一个容器
- docker start 容器名称 ------启动一个容器
- docker run 容器名称 == docker create + docker start
- docker stop 容器名称 -----暂停一个容器
- docker kill 杀掉一个容器
- docker rm -rf 容器id ---移除一个容器
- docker pause 容器名称 ---暂停一个容器
- docker unpause 容器名称 --------恢复一个容器
DOCKERFILE
- 概述
-
- 是一个脚本,是构建镜像的配置文件
- Docker会读取dockerfile根据命令生成镜像
容器之间的单向通信
- 每个容器生成的时候都会生成容器内部自己的ip,ip随着容器的移除而移除,是随时变化的。集群的docker容器之间ip互通,外部不可通过内部容器ip访问。
- docker inspect 容器ID 可以查看容器的内部ip
- 容器之间单向通信可以通过容器名字进行服务之间调用,但是docker 启动命令上需要配置 --link 其他容器名称。 这段配置来启动容器。
基于bridge容器间进行双向通信
- bridge网桥是容器和宿主机建立连接,之后才能通信的
- 2个容器绑定到一个网桥上,2个容器就可以通过容器名称进行互联互通了
- 创建一个新的网桥
- docker network create -d bridge 自定义网桥名称
- 查看机器的网桥
- docker network ls
- 将容器绑定的自定的网桥上
- docker network connect 自定义网桥名称 容器名称
说明:新建一个网桥等于在宿主机上安装一个虚拟网卡,容器之间的互联互通都是通过虚拟网卡来通信的。如果需要和外部网络通信需要,虚拟网卡将信息转为宿主机的物理网卡,由物理网卡才能和外网通信。
容器之间数据共享
- 一些易变动的配置文件,或者是多个容器共享的数据,期望挂在到宿主机上。否则因为容器多了修改配置文件,就会是灾难性的重建。
- 第一种方式:
-
- 通过docker run -v 宿主机/容器内部
- 第二种方式:
-
- 创建共享容器,此容器不运行,只是存在
- docker create -- name 容器名称 -v 宿主机文件路径/容器文件路径 包名 /bin/true
- 共享容器挂载点
- docker run -volumes-from 共享容器名称 -- name -d 包名
docker compose 容器编排工具
设置java环境
openjdk是开源的jdk环境,可以使用openjdk:8u222-jre
- 什么是容器编排
- 如果安装一个应用需要2个基础的容器来支持的话,如果不用容器编排就需要运行三遍,创建镜像,创建容器的命令。生产部署也相对来说比较麻烦。 容器编排,可以用一个yml脚本书写命令完成多个容器的部署。一键启动。
- docker compose的特点
- 只能在单机上进行容器编排和部署 配置文件用yml脚本的格式 mac和win电脑安装docker自带docker compose。linux则需要对docker compose进行安装。
- 操作步骤
-
- 新建docker-compose.yml
- docker-compose up -d 运行这个配置文件
- docker-compose logs 容器名称。 查看某个容器日志
- docker-compose down 停止容器,移除容器。
- yml格式
-
- 按照依赖关系进行编写yml。
- 可以设置容器死掉自动重启 restart:always
docker目前容器编码只能实现于单机,不能集群部署,管理。所以企业集群部署大多数用k8s来做部署。 以上是对docker的理解,如有错误欢迎指正。