Docket 容器引擎
Docker 是世界领先的软件容器平台。是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,
然后发布到任何流行的Linux或Windows机器上,可以实现虚拟化(软件层面),并没有虚拟化“物理机“,
也不需要安装新系统,共用”宿主机“的操作系统,提供功能的同时提高性能。容器是完全使用沙箱机制,相互没有接口。
容器是一个应用层抽象,将代码和依赖资源打包在一起,多个容器可以在一台机器上运行,共享操作系统内核,但是各自作为独立的进程在运行,
和虚拟机相比,占用空间较少,瞬间就能完成启动。
docker 正如图标中扮演的角色一样,是个大鲸鱼,鲸鱼上的集装箱就是一个个容器,容器中是我们开发的应用程序
(不仅限于web应用), 每个容器都有自己的独立的环境(环境设置、网络、文件系统等),互不干扰。而每个箱子,又可以
打包成一个新的镜像,放到其他服务器中的docker环境中直接运行,不在需要重复安装程序运行环境。
通俗一点,镜像就类似于我们日常中的安装软件,甚至说是操作系统镜像更为形象点。
给电脑安装Windows系统需要有Windows镜像,因此给docker安装容器也是需要镜像的,
主要使用在搭建和配置开发环境上
Docker一共分为三部分 1仓库 2镜像 3容器.
1 仓库 :见名知意,它就好比是 存储 各种 app 的地方,从这里下载镜像,仓库分两种:共有和私有,最大的公开仓库是Docker Hub。
2 镜像 : 因为根据Dockers的特性,延申出一个名词,好比是程序的 安装包,不包含任何动态数据,其内容在构建之后不会被改变。
3 容器 :是镜像的实体, 有了镜像就可以创建容器,并且在创建的时候设置权限,就像一个运行的 app
一个镜像可以创建多个容器,之间是隔离的,在主从这点就很好的诠释了。
三者的关系:
1 .基于镜像创建容器,也可以基于容器创建镜像
2. 从仓库拉取镜像,也可以将本地镜像推送到仓库
优点 :速度更快 、更加轻量化,节省资源,弹性延伸,快速扩展,迁移方便,持续交付,部署,组建微服务架构
一致的运行环境:Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题。
更快速的启动时间:可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
弹性伸缩,快速扩展:善于处理集中爆发的服务器使用压力。
迁移方便:可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
持续交付和部署:使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。
组建微服务架构:通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
基础命令:
docker info (获取docker系统配置的信息);
docker version (获取docker版本);
docker help (获取docker帮助文档);
docker top (查看容器的进程信息)
docker search (镜像 从官方仓库(hub.docker.com))
docker logs 查看docker logs的日志
--details 显示日志详情;
-f 跟随日志输出显示;
--tail 从末尾开始显示指定行的数据;
-t 显示时间戳;
--since 开始时间;
--until 结束时间;
镜像命令:
docker images (查看已下载的镜像) -a 查看所有镜像; -q 查看容器id;
docker search 搜索容器信息 -filter=STARS=3000 关注度大于300以上的;
docker pull 镜像名称:标签名 标签名默认是 latest,代表最新版本。
docker rmi 镜像名称:标签名 删除已下载的镜像
容器命令:
docker run (创建容器)
docker ps 列出运行中的容器(运行中); -a 列出所有的容器(运行、未运行)
docker cp 容器Id 容器内路径 主机路径; (容器拷贝文件到主机上)
docker rm 容器名称 删除停止的容器; -f 容器名称 删除运行中的容器
docker start 容器名称 启动容器
docker stop 容器名称 停止容器
docker exit 容器停止并退出;
docker restart 容器名称 重启容器
docker kill 容器ID 强杀容器
docker exec 执行容器中的指令
进入正在运行的容器
docker exec -it 容器id;
docker attach 容器Id;
尽量不要使用docker commit
制作镜像。(因为是黑盒制作,除了制作人,谁都不知道内部封装了啥)
Docker 的工作流程
Docker是一个Client-Server结构,Docker守护进程运行在主机上,客户端与Docker通过Socket访问,
守护进程接受客户端的命令并且管理运行主机的容器,容器是一个运行环境,就是我们的集装箱。
Compose
Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,
每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例
Compose命令:
docker-compose up (用于部署一个Compose 应用)
默认情况下 该命令会读取名为docker-compose.yml 或 docker-compose.yaml 的文件
当然 用户也可以使用 -f 指定其他文件名,通常情况下,会使用 -d 参数 令 应用在后台运行
docker-compose stop 停用 Compose 应用相关的所有容器,但不会删除它们
被停止的应用可以很容易的通过 docker-compose restart 命令重新启动
docker-compose rm 用于删除已停止的 Compose 应用
它会删除容器和网络 但是不会删除卷和镜像
docker-compose restart 重启已经停止的 Compose 应用
如果用户在停止该应用后对其进行了变更,那么变更的内容不会反映在重启后的应用中,这时候需要重新部署应用使其变更生效
docker-compose ps 用于列出 Compose 应用中的各个容器
输出内容包括当前状态、容器运行的命令以及网络端口
docker-compose down 停止并删除运行中的 Compose 应用
它会删除容器和网络 ,但是不会删除卷和镜像
编排容器
当用到模拟或者演示项目的时候 会用到Compose 这个东西,它是负责实现对Docker容器集群的 快速编排
如果没有docker-compose,那么每次启动的时候,你需要敲各个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等一系列的操作,相当繁琐。
而用了docker-composer之后,你就可以把这些命令一次性写在docker-composer.yml文件中,
1 创建出需要的准备工作,比如项目的某个库,框架编写的源代码,写配置文件 约定好 端口,路由 之类的
2 定义组成应用的服务,以便他们可以在隔离的环境中一起运行,连通各服务
3 运行和撰写启动并运行整个应用
rebbitmq
docker run -it --name my-rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
elasticsearch-ik
docker run -it --rm --network=host -v /home/halon/桌面/elasticsearch-2.4.6/config:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0
tips :
docker的四种网络模式 : https://www.cnblogs.com/gispathfinder/p/5871043.html
为什么要用 docker :https://www.cnblogs.com/myprogramer/p/10288634.html
镜像不包含任何动态数据,其内容在构建之后也不会被改变。