Docker吐血总结

Stella981
• 阅读 499

安装啥的我就不说了 自己百度就行,本人是mac一路傻瓜安装。

docker与vm相比的优势:

1 启动快,秒级别 vm为分钟级

2 需要资源少,是轻量级的,docker容器直接与内核进行交互 vm则是通过Hypervisor(VMM)与内核进行交互

docker是MB级别 vm为GB级别

3 能创建上千个容器,vm只能创建几十个

4 高可用性 --通过docker的快速部署实现高可用

5 节约时间 --开发、测试、部署的时间都大大减少

6 DockerFile中记录容器的构建过程,可在集群中实现快速分发和快速部署

一、docker运行机制包括的三个核心组件:docker CLI、REST API和docker daemon(守护进程)

二、docker的架构主要包括三部分:Client(客户端)、DOCKER_HOST(docker主机,主要指docker daemon守护进程)和Registry(注册中心,实质就是docker镜像仓库)

三、docker的底层技术(了解):Namespaces(名称空间,可以隔离容器)、Control groups(控制组,可以控制资源)、Union

file systems(联合文件系统)、Container format(容器格式)

四、Dockerfile:一般分为四个部分-基础镜像信息、维护者信息、镜像操作指令和容器启动时的执行指令

Dockerfile的常用指令:FROM、MAINTAINER、RUN、CMD、EXPOSE、EVN、ADD、COPY、ENTERPOINT、WORKDIR

COPY和ADD的区别:COPY不能复制远程URL路径文件,也不能解压文件,而ADD命令可以。EVN是设置环境变量的

五、Docker常用命令(包括客户端、网络管理、集群、节点、服务、数据卷 一些基本的ls啥的就不写了、太多):

docker images                 列出镜像

docker images -a                列出所有镜像,包括不使用的

docker search 镜像名               搜索镜像

docker pull 镜像名                拉取镜像

docker push 镜像名                向仓库推送镜像

docker build 镜像名                  构建镜像

docker rmi 镜像名                    删除镜像

docker run --name=容器名 镜像名           创建并启动容器

docker ps                   列出容器

docker ps -a                  列出所有容器,包括停止的

docker exec 容器名               执行容器

docker stop 容器名               停止容器

docker start 容器名                 启动容器

docker rm 容器名                    删除容器

docker tag 原镜像名 新镜像名           重命名镜像

docker login                   登录docker hub或本地镜像的指令 本地镜像加上本地的ip

docker logout                 退出docker hub或本地镜像连接的指令

docker run -d -p 5000:5000 --restart=always --name registry -v /mnt/registry:/var/lib/registry registry:2

                       启动Docker Registry 5000啥的都是不固定的

docker inspect                 查看详细信息的指令

ifconfig                    查看本地配置信息,可以查看例如本机IP地址

docker plugin                  用于管理插件

docker stack                   用于管理docker堆栈

docker system                 用于管理docker

docker secret                  用于管理docker机密

docker container                  操作容器的指令

docker network                  操作docker网络的指令

docker network create --driver 网络名...     创建自定义网络

docker run --network=网络名 ...         使用固定网络启动容器

docker network connect 网络名 容器名        为容器添加网络方式 //通过有相同的网络,使容器实现相互通信

docker network disconnect 网络名 容器名      断开指定的容器使用的网络

ping -w 4+IP                   测试容器通信 //先用docker attach 容器名 进入容器后 再使用此命令测试连接shi

docker network rm 网络名             移除网络

docker swarm                  操作swarm集群的指令

docker swarm init --advertise-addr ip地址      创建Docker Swarm集群 在该IP地址下创建 为管理节点

docker swarm join --token ... ip地址       把工作节点添加到管理节点下 -在工作节点所在的docker中操作 ...为创建管理节点后展示的token那部分

docker node                  操作集群节点指令

docker service                 操作节点服务的指令

docker service create --name 服务名 镜像名 指令        在节点上创建服务的指令

docker service inspect 服务名           查看指定服务的详情

docker service ps 服务名              查看指定服务在集群节点上的分配和运行情况

docker service scale 服务名=数量         更改服务副本数量的指令

docker service rm 服务名             删除服务

... + --publish 端口号 镜像名            访问服务要暴露端口号

docker volume                   操作数据卷指令

docker volume create 卷名            创建数据卷

docker volume ls                  查看数据卷 其他的查看也可以加ls

docker volume inspect 卷名           查看数据卷详情

docker volume rm 卷名               删除数据卷

docker run -itd --name 容器名 --mount source=卷名,target=挂在目录地址 镜像名

                         启动容器并挂在数据卷方式1 itd一起用就好了 分别为:保留界面 新开终端 后台执行的意思

docker run -itd --name 容器名 -v 卷名:挂载目录地址 镜像名

                         启动容器并挂在数据卷方式2

六、docker镜像管理工具(2个):Docker Hub、Docker Registry

七、将本地镜像推送到Docker Hub的注意点或步骤:

1 镜像名称必须符合DockerID/repository的形式规范

2 登录Docker Hub

3 推送镜像

4 设置Docker Hub为私有镜像 在Docker Hub的settings下设置make private

八、Docker Registry本地私有仓库搭建步骤

1 启动Docker Registry

2 重命名镜像 格式为:仓库IP:端口号/repository

3 推送镜像

九、Docker Registry本地私有仓库配置

1 查看Docker Registry私有仓库搭建地址

2 生成自签名证书

3 生成用户名和密码

4 启动Docker Registry本地镜像仓库服务

5 配置Docker Registry访问接口

十、验证Docker Registry本地私有仓库配置测试步骤

1 Docker Registry私有仓库使用登记

2 准备镜像文件

3 推送镜像

4 登录Docker Registry镜像仓库

5 再次推送镜像

6 结果验证

十一、docker三种网络:

1 bridge:可以实现与宿主机通信从而实现互联网通信功能

2 host:属于无网络,不能与外界网络通信

3 none:属于无网络,不能与外界网络通信

十二、自定义网络的种类:

1 桥接网络:保证容器的安全性,基于某种网络的驱动去创建新的这种网络,实现容器隔离

2 Swarm集群中的覆盖网络

3 定义网络插件

十三、使用bridge网络管理和使用自定义网络管理对于容器间通信的区别

1 使用默认的brigde网络万里的容器可以使用ip进行通信,但是不可以通过容器名称进行通信

2 使用自定义的网络管理的容器则同时可以使用ip和容器名称进行通信

十四、构建Docker Swarm集群的条件

1 多台机器切系统相同并且安装了docker

2 每个机器的ip地址固定

3 节点间使用相应的协议

十五、Docker数据管理

Docker镜像是通过读取Dockerfile文件中的指令构建的,Dockerfile中的每条指令都会创建一个镜像层,并且每层镜像都是只读的,这一系列的镜像层就构成了Docker镜像,镜像层是叠加的

十六、Docker容器与镜像的主要区别

Docker容器与镜像的主要区别是顶部的容器层,而所有对容器中数据的添加、修改等操作都会被存储在容器层中,当容器被删除时,容器层也会被删除,其中存储的

数据会被一并删除,而下面的镜像层却保持不变。但一般不会将数据写到容器层,会使用数据外部挂载机制

十七、Docker数据挂载机制的三种方式

1 数据卷(volumes)

2 bind mounts(绑定挂载)

3 tmpfs mounts(tmpfs挂载)

十八、说明

本文档是我从各个docker书籍,博客上总结的,作为自己复习用的,如果总结的不到位,望理解~

点赞
收藏
评论区
推荐文章
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 )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
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
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
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进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这