Docker学习笔记

Stella981
• 阅读 638

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

一次构建,处处运行。

dev本地测试完毕后,打包递交docker镜像,而运维则只装一个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学习笔记

docker run hello-world

Docker学习笔记

底层原理

Docker学习笔记

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

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

Docker学习笔记

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

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

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

docker command set

Docker学习笔记 Docker学习笔记

docker集群管理swarm vs kubernetes(k8s)

Docker学习笔记

Dockerfile->docker image->docker container

Docker学习笔记

Docker调试常用命令

# docker ps
CONTAINER ID        IMAGE                                                                   COMMAND                  CREATED             STATUS              PORTS                                                NAMES
abe77778cd83        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
1abf721d7a4c        registry-internal.cn-shanghai.aliyuncs.com/xx/yyy:phpfpm71   "docker-php-entrypoi…"   12 months ago       Up About an hour    9000/tcp                                             phpapp
3d5f41aab2be        mysql:5.6                                                               "docker-entrypoint.s…"   12 months ago       Up About an hour    3306/tcp                                             mysql
3fb60c37f950        redis:5.0.4                                                             "docker-entrypoint.s…"   12 months ago       Up About an hour    6379/tcp                                             redis

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

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

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

docker inspect vehicle8
[
    {
        "Id": "a55228e756a8132b226308cfde0920e4b188af7e7e63503493523b6154598f5e",
        "Created": "2019-01-05T14:44:11.368198346Z",
        "Path": "npm",
        "Args": [
            "run",
            "start",
            "ethereum",
            "172.21.0.9:8545",
            "run-producer",
            "8",
            "100",
            "0x0f743640f4b8c2ba5be9dc3a792c0262584bfc3c"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 24420,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-01-05T14:47:42.050501448Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
...
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这