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 上下文
copy 这类指令中的源文件的路径都是相对路径,这些路径超过了上下文的范围,Docker引擎无法获得这些位置的文件。
 
如果真的需要那些文件 应该将它们复制到上下文目录中去。一般来说,应该会将Dockerfile置于一个空目录下,或者项目根目录下。
 
入股该目录下没有所需文件,那么应该把所需文件复制一份过来
 
如果目录下有些东西确实不希望构建时传给Docker引擎,那么可以用.gitignore 一样的语法写一个,.dockerignore 该文件是用于提出不需要作为上下文传递给Docker引擎的
 
有人 误以为 . 是指定Dockerfile 的所在目录呢?这是因为在默认情况下,如果不指定Dockerfile 的话 会将上下文目录下的名为 Dockerfile的文件作为Dockerfile 。
 
般大家习惯性的会使用默认的文件名 Dockerfile 以及会将其置于镜像构建上下文目录中。
 
-t 让docker 分配一个伪终端并绑定到容器的标准输入上,
 
-i 让容器的标准输入保持打开 ,如果不加 docker 容器无法启动,因为没有衔接输入流
 
加了 就会为容器分配一个伪终端 ,支持交互操作 bash不会退出
 
RUN 命令是创建镜像的步骤,反映到创建的Docker镜像上
 
CMD 指令: 类似于RUN指令,用于运行程序,但两者时间点不同
 
CMD 在docker run 时运行,,为启动的容器指定默认运行的程序,程序运行结束,容器也就结束
 
如果 dockerfile 中如果存在多个CMD指令,仅最后一个生效,意味着只能有一个CMD
 
通过执行docker run $image $other_command启动镜像可以重载CMD命令。
 
 
 命令:

基础命令:

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文件中,

以后每次启动这一整个环境(含3个容器)的时候,你只要敲一个docker-composer up命令就ok了。

 

1 创建出需要的准备工作,比如项目的某个库,框架编写的源代码,写配置文件 约定好 端口,路由 之类的 

2 定义组成应用的服务,以便他们可以在隔离的环境中一起运行,连通各服务

3 运行和撰写启动并运行整个应用

 

dockerfile docker-compose 区别

dockerfile的作用是从无到有的构建镜像。它包含安装运行所需的环境、程序代码等。

这个创建过程就是使用 dockerfile 来完成的。

Dockerfile - 为 docker build 命令准备的,用于建立一个独立的 image。

 

在 docker-compose 里也可以用来实时 build docker-compose.yml - 为 docker-compose 准备的脚本,

可以同时管理多个 container ,包括他们之间的关系、用官方 image 还是自己 build 、各种网络端口定义、储存空间定义等。

 

一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。

在配置文件中,所有的容器通过services来定义,

然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。

 

更新容器

当服务的配置发生更改时,可使用 docker-compose up 命令更新配置

此时,Compose 会删除旧容器并创建新容器,新容器会以不同的 IP 地址加入网络

名称保持不变,任何指向旧容起的连接都会被关闭,重新找到新容器并连接上去

 

 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

 

 

 

镜像不包含任何动态数据,其内容在构建之后也不会被改变。

posted @ 2020-08-04 17:26  .未央  阅读(481)  评论(0编辑  收藏  举报