Docker学习笔记

docker通过带环境安装来解决开发和运维之间的鸿沟问题,属于云计算方面的技术。也就是说安装的时候把原始环境一模一样地复制过来,开发人员利用Docker来消除协作代码时,“在我的机器上可以正常工作啊"的问题。

一次构建,处处运行。

dev本地测试完毕后,打包递交docker镜像,而运维则只装一个docker作为鲸鱼,将各个镜像放到鲸鱼背上作为独立的集装箱

仓库,镜像和容器

docker解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的额容器虚拟化技术

集装箱就是一个容器,

由于docker相对资源消耗少,启动块,各容器隔离独立,这些特点,使得各大厂都在用docker做弹性伸缩

docker hub类似于github,专门用于host docker 镜像的仓库

docker的三要素

镜像就是模版,容器就是镜像的一个实例。

docker容器是一个剔除linux外设等不必要组件后的浓缩版的linux,包括root用户权限,进程空间,用户空间和网络空间以及运行在这个linux上的应用程序,基础docker镜像才170M,而linux虚拟机镜像则达到4G

仓库是集中存放镜像文件的场所。

仓库注册服务器(registry)上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像都有不同的标签tag

仓库又分为公开仓库和私有的仓库。最大的公开仓库为hub.docker.com而国内更多的使用阿里云和网易蜂巢

docker本身可以理解为一个容器运行载体或称为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器。Docker damon根据image文件生成容器的实例,同一个image文件可以生成多个同时运行的容器实例。

docker run hello-world

底层原理

客户端执行docker run命令后,由后台守护进程在docker host上加载image创建对应的容器并且run起来.

为什么docker能够比传统的虚拟机运行更快,加载更快?

1. docker不需要hypervisor来实现硬件资源的虚拟化,运行在docker容器上的程序直接使用的是实际物理机的硬件资源,因此在CPU,内存利用率和效率上都有明显的优势;

2.docker利用的是宿主机的内核,而不需要guest os这一层。因此,当新建一个容器时,docker并不需要和虚拟机一样加载整个guest os操作系统内核,因此启动非常块,只需要几秒钟。

Docker是基于linux容器的虚拟化技术(LXC:linux containers),linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需要的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一套操作系统,只需要软件工作所需的库资源和设置。系统因此变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

docker command set

docker集群管理swarm vs kubernetes(k8s)

Dockerfile->docker image->docker container

Docker调试常用命令

1# docker ps 2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3abe77778cd83 nginx:1.15.9 "nginx -g 'daemon of…" 12 months ago Up About an hour 80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:80->8000/tcp nginx 41abf721d7a4c registry-internal.cn-shanghai.aliyuncs.com/xx/yyy:phpfpm71 "docker-php-entrypoi…" 12 months ago Up About an hour 9000/tcp phpapp 53d5f41aab2be mysql:5.6 "docker-entrypoint.s…" 12 months ago Up About an hour 3306/tcp mysql 63fb60c37f950 redis:5.0.4 "docker-entrypoint.s…" 12 months ago Up About an hour 6379/tcp redis

docker ps可以直接列出正运行中的docker container,基本上等价于docker container ls

1# docker top mysql 2UID PID PPID C STIME TTY TIME CMD 3systemd+ 2071 2038 0 10:35 ? 00:00:03 mysqld

docker top contzhoainername 能够罗列出containername这个容器中正在运行中的进程名,hu如果发现状态不对的话,可以先这样检查一下是不是container中的进程已经crash掉了.

1docker inspect vehicle8 2[ 3 { 4 "Id": "a55228e756a8132b226308cfde0920e4b188af7e7e63503493523b6154598f5e", 5 "Created": "2019-01-05T14:44:11.368198346Z", 6 "Path": "npm", 7 "Args": [ 8 "run", 9 "start", 10 "ethereum", 11 "172.21.0.9:8545", 12 "run-producer", 13 "8", 14 "100", 15 "0x0f743640f4b8c2ba5be9dc3a792c0262584bfc3c" 16 ], 17 "State": { 18 "Status": "running", 19 "Running": true, 20 "Paused": false, 21 "Restarting": false, 22 "OOMKilled": false, 23 "Dead": false, 24 "Pid": 24420, 25 "ExitCode": 0, 26 "Error": "", 27 "StartedAt": "2019-01-05T14:47:42.050501448Z", 28 "FinishedAt": "0001-01-01T00:00:00Z" 29 }, 30...
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Docker学习笔记 - HelloWorld