当前位置: 首页 > 编程日记 > 正文

Docker 使用教程

概括
 Docker与传统虚拟机的区别 与传统虚拟机的区别
 Docker的安装 的安装
 Docker daemon , client , containerd
 镜像与容器操作
 容器运行配置
 Docker网络配置 网络配置
 Alpine Docker Image
 制作自己的 Docker Image
 Docker安全性问题 安全性问题
 Docker运行原理

Docker与传统虚拟机的区别

Docker 容器的隔离性
这里写图片描述
Linux 内核的 cgroup,namespace,以及 AUFS类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器.

与传统虚拟机相比的优点
Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等
等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便.

Docker的安装
• 系统要求
 Docker 目前只支持64位系统,支持Linux, Cloud, Windows, and macOS系统。
 添加Docker官方APT镜像源(Debian Linux)
由于Docker官方源使用的时HTTPS,要添加HTTPS传输的软件包和CA证书
操作如下:
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv –keyserver hkp://p80.pool.sks-keyservers.net:80 –recv-keys
58118E89F3A912897C070ADBF76221572C52609D
将源地址 https://apt.dockerproject.org/repo debian-Jessie 加入/etc/apt/sources.list文件
apt-get update
apt-get install docker-engine
 修改GRUB引导文件
当Docker 容器启动参数添加一些限制时(如内存,CPU),会有警告不支持,因为内核启动时没有这个参数的支持,可以修改grub启动配置文件/etc/default/grub 在GRUB_CMDLINE_LINUX 添加 内核引导参数cgroup_enable=memory swapaccount=1 运行update-grub 更新grub 重启即可。

Docker daemon,client,containerd
Docker daemon
Docker daemon是Docker最核心的后台进程,它负责响应来自Docker client的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个API Server,负责接收由Docker client发送的请求;接收到的请求将通过Docker
daemon内部的一个路由分发调度,再由具体的函数来执行请求;管理所有的 Docker containers 和 Docker images。可以通过service或systemctl管理docker服务。
Docker daemon监听三种不同的套接字 : unix,tcp,fd 来处理docker client的请求,其中的unix域套接字表示仅支持主机自身的client请求, tcp表示支持remote client,fd表示systemd socket一般情况下拥有systemd的都以此工作(Debian)。Docker deamon的配置文件可以指定配置哪种监听方式,这三种方式可以同时存在。
/etc/systemd/system/docker.service.d/docker.conf 在Debian 默认不存在要手动创建,可参考https://docs.docker.com/engine/admin/systemd/

Docker client
Docker client是一个泛称,用来向指定的Docker daemon发起请求,执行相应的容器管理操作.它既可以是Docker命令行工具,也可以是任何遵循了Docker API的客户端.目前, 社区中维护着的Docker client种类非常丰富,涵盖了包括C#(支持
Windows)、Java、Go、Ruby、JavaScript等常用语言,甚至还有使用Angular库编写的WebU格式的客户端,足以满足大多数用户的需求。即docker command 就是一个客户端,它可以连接本地Docker daemon操作镜像和容器,又可以管理远程
的。
Docker run ImageID command 运行本地的Docker Image
Docker –H IP:Port run ImageID command 运行远程的Docker Image

docker-containerd
Containerd是一个简单的守护进程,它可以使用runC管理容器,使用gRPC暴露容器的其他功能。相比较Docker引
擎,使用gRPC,containerd暴露出针对容器的增删改查的接口,然而Docker引擎只是使用full-blown HTTP API接口对Images、Volumes、network、builds等暴露出这些方法。

镜像与容器操作

• 镜像操作
a) 获取镜像: docker search , pull 代理配置http_proxy.conf
b) 列出镜像: docker images 悬浮镜像仓库名为 docker images -f dangling=true
c) 删除镜像: 要删除一个镜像 必须是没有此镜像的容器在运行 . docker rmi $(docker images -f dangling=true)删除悬浮镜像
d) Dockerfile定制镜像:docker build –t Image:ID https://yeasy.gitbooks.io/docker_practice/content/image/build.html
e) 保存镜像:docker save 保存镜像为一个tar文件
f) 加载镜像:docker load 加载一个保存的镜像
g) 镜像重命名:docker tag

• 容器操作
a) 启动容器: docker run image command 新建并启动容器 docker start 启动已终止的容器 –name 可以给容器起一个名字
b) 查看容器: docker ps -a 查看所有容器 docker ps –a –q 查看所有已退出的容器
c) 以守护态运行:docker run –d
d) 进入容器:docker attach 进入守护态的容器
e) 终止容器:docker stop containerID 终止指定容器
f) 查看容器的运行状态:docker stats 查看容器的状态 CPU 内存消耗等
g) 删除容器:docker rm 删除一个已退出的容器 docker rm $(docker ps –a -q)删除所有已退出的容器
h) 容器的导出与导入:docker import 和 docker export
i) https://yeasy.gitbooks.io/docker_practice/content/container/

 导入导出容器与镜像的区别
用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信
息。
 镜像和容器的存储
对于Debian docker image来讲,当前所有image 信息/var/lib/docker/image/aufs/repositories.json Image以分层的方式存放在/var/lib/docker/aufs中,容器启动过程中将这些内容以aufs挂载在同一个目录形成根文件系统。

容器运行配置
网络接入类型:–net
资源限制: -m 内存限制 docker run –help
端口映射: -p 将宿主机的端口或固定ip和端口映射到容器的某个端口
数据卷 : -v 实现宿主机和容器之间的目录映射
容器运行时内核参数配置:文件描述符–nofile
Daemon配置
[Service]
ExecStart=/usr/bin/dockerd -H fd:// -D –tls=true –tlscert=/var/docker/server.pem–tlskey=/var/docker/serverkey.pem-H
tcp://
配置完成后 运行 systemctl daemon-reload 执行 systemctl restart docker。

制作自己的 Docker Image
制作文件系统
a) 使用initramfs命令制作一个虚拟文件系统或者直接使用/boot 里面的initrd文件系统
b) 将文件系统打包为tar格式,docker load 并指定仓库名即可
添加binary到docker image简易方式
将docker image export,并解包
利用chroot来切换根文件系统 chroot . sh
将binary 拷贝到其目录就可以执行测试这种执行方式
以上和docker run执行没有很大差别。

Docker安全性问题 安全性问题
Docker run –privileged的危害

当docker image运行的时候, 有时我们需要修改网络,内核配置参数等,这些配置的修改都需要特权,因为docker 并不像传统虚拟机虚拟设备,也就是说与宿主机共用设备,拿硬盘来说,容器里也有/dev/sda这个设备,以特权运行的话,就可挂载这个设备,从而脱离docker image。

制作Docker Image细节

如若使用/boot/下的initrd文件系统, 要把里面的init或linuxrc删除,因为init的作用就是挂载真实的根文件系统,寻找并执行/sbin/init开启init进程。剔除权限过大的binary 如mkfs,mount,chroot,switch-root等

Docker运行原理 运行原理
Linux kernel namespace:
Docker 容器和chroot的差别在于Docker 容器提供了更多的资源的隔离性包括网络,主机名域名,用户和用户组。Linux Namespaces机制提供一种资源隔离方案。容器就是利用这个机制在创建子进程的时候,继承父进程的资源后,将PCB(进程控制块包含进程的所有信息)里面的ns结构体进行填充。利用strace工具可以追踪dockerd系统调用。
这里写图片描述

strace 追踪系统调用发现clone 创建新进程。

Cgroup:上述Linux namespace 只是实现的docker的环境上的隔离,要实现计算机资源上的隔离就要用到cgroup, 它可以实现CPU 内存磁盘I/O等的限制。

Aufs:所谓UnionFS就是把不同物理位置的目录合并mount到同一个目录中。
例如 mount-t aufs-o dirs=./g:./h none ./mnt就把g h俩个目录挂载到了mnt目录。

详情参考:
http://www.infoq.com/cn/articles/docker-kernel-knowledge-namespace-resource-isolation
http://blog.chinaunix.net/uid-20788636-id-4479145.html

转载于:https://www.cnblogs.com/MaAce/p/7755704.html

相关文章:

话说CSS滤镜

作者:http://www.swtv.com.cn/adjunct/nr/css/css.htmAlpha 透明层次:滤镜效果语法:STYLE"filter:filtername(parameter1,parameter2,parameter3...)"其中:filtername为滤镜的名称;parameter1,parameter2等为…

面向隐私AI的TensorFlow深度定制化实践

作者 | Rosetta团队出品 | AI科技大本营(ID:rgznai100)之前我们整体上介绍了基于深度学习框架开发隐私 AI 框架中的工程挑战和可行解决方案。在这一篇文章中,我们进一步结合 Rosetta 介绍如何定制化改造 TensorFlow 中前后端相关组件&#xf…

”拿来搞笑“的大学生活

”拿来搞笑“这词,是我舍友对我说过好几遍,我才觉得这词用来形容我大学的生活再恰当不过了,感谢他送给我这个词。 下面就列一下我大学期间”拿来搞笑“的事情: —:无偿捐血400毫升。当时认为是一件微不足道的事情&…

巧用CSS的Border属性

。作者:冯永曜 来源:黄山村夫 制作过网页的人都有为画线而烦恼的经历,本文介绍的小技巧也许对你有所帮助。我们先来认识一下“Border”(画边框),它是CSS的一个属性,用它可以给能确定范围的HTML标…

阿里资深算法专家:如何突围大厂算法面试?

2020 届秋招,算法岗灰飞烟灭。最聪明的应届生 / 程序员 ,都在极度竞争中,面临着前所未有的激烈 PK 。学生因“内卷”而迷茫;初级程序员遇职业发展瓶颈而困惑...面对重重压力,苦不堪言。to do list 上写满计划&#xff…

乡下人最嘲笑城里人的16件事,无语了!

一、出门「taxi」,乘电梯上七楼的健身房,然后在跑步机上挥汗如雨。 二、半夜上网,去歌厅、舞厅,困了不睡觉。之后失眠,再吃安眠药。 三、管儿子叫「小兔崽子」,管宠物狗叫儿子。 四、挑最有特色的饭店吃…

2017浅谈面试(一)

2017给自己一个目标,制定一份计划,新的开始,跟随创业团队风险无处不在,不过还是要选好Boss。 2016一个煎熬,悲剧,没发工资的日子,一等就等了5个月,零散的就拿到了一个半月工资&#…

乘风破浪的PTM:两年来预训练模型的技术进展

作者 | 张俊林来源 | 深度学习前沿笔记专栏Bert模型自18年10月推出,到目前为止快两年了。它卜一问世即引起轰动,之后,各种改进版本的预训练模型(Pre-Training Model, PTM)与应用如过江之鲫,层出不穷。Bert及…

DW中CSS属性详解

作者:未知 来源:5D多媒体 在Dreamweaver的CSS样式里包含了W3C规范定义的所有CSS1的属性,Dreamweaver把这些属性分为Type(类型)、Background(背景)、Block(块)、Box&a…

第十周项目5:贪心的富翁

上机内容:用循环语句完成累加 上机目的:学会循环语句的使用 /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者:孙锐 * 完成日期:2012 年 10 月 31 日 * 版 本 号&…

python requests返回的json对象用json.loads()时转为字典时编码变为了unicode

2019独角兽企业重金招聘Python工程师标准>>> 1.使用simplejson,loads的对象为str,否则还是会转码unicode import simplejson url "" payload {} headers {} r requests.post(url, datapayload, headersheaders)result simplej…

关于Dreamweaver乱码问题的解决方案

原作者&#xff1a;南宫彩虹出处&#xff1a;5D多媒体出现乱码&#xff0c;大致为两种情况&#xff1a; 一是没有标明主页制作所用的文字&#xff0c;这种情况下很简单就可以解决&#xff0c;在<HEAD>区加上<META http-equivContent-Type content"text/html; cha…

百度绝对控股,小度科技独立融资,投后估值200亿元

9月30日&#xff0c;百度宣布旗下智能生活事业群组业务&#xff08;以下简称“小度科技”&#xff09;完成了独立融资协议的签署&#xff0c;本轮融资由百度资本及CPE战略领投、IDG资本跟投&#xff0c;投后估值达约200亿元。作为百度的重要战略业务板块&#xff0c;百度公司对…

Android UI开发第二十五篇——分享一篇自定义的 Action Bar

Action Bar是android3.0以后才引入的&#xff0c;主要是替代3.0以前的menu和tittle bar。在3.0之前是不能使用Action Bar功能的。这里引入了自定义的Action Bar&#xff0c;自定义Action bar也不是完全实现了 Action bar功能&#xff0c;只是在外形上相似。自定义Action bar没有…

ADF12C 在线预览PDF文件 afinlineFrame

转载于:https://blog.51cto.com/feitai/1898433

批量消除虚线框

原作者&#xff1a;星之海洋出处&#xff1a;5D多媒体 各位想必都知道&#xff0c;οnfοcus”this.blur()”这条代码能消除链接时的虚线框&#xff0c;但你有没有想过&#xff0c;如果你的网页上有几个甚至上百个链接&#xff0c;而你又想要去掉上面那些讨厌的虚线框&#xf…

Python实战 | 送亲戚,送长辈,月饼可视化大屏来帮忙!

中秋节介绍中秋节&#xff0c;又称祭月节、月光诞、月夕、秋节、仲秋节、拜月节、月娘节、月亮节、团圆节等&#xff0c;是中国民间的传统节日。中秋节自古便有祭月、赏月、吃月饼、玩花灯、赏桂花、饮桂花酒等民俗&#xff0c;流传至今&#xff0c;经久不息。每年中秋节到&…

lamp一键安装包

lamp一键安装包 http://58.83.226.93/ http://www.centos.bz/lamp/ http://www.centos.bz/ lamp一键安装包 http://58.83.226.93/ http://www.centos.bz/lamp/ http://www.centos.bz/

快节奏的多人游戏同步 - 示例代码和在线演示

这是一个实现我《快节奏的多人游戏同步》系列文章中主要概念的客户端——服务器架构演示示例&#xff08;不包括实例插值&#xff0c;那块我还没弄完&#xff09;建议在阅读完这系列文章后再看这部分。代码是纯JavaScript写的&#xff0c;一页就装下了。少于400行代码&#xff…

探索IE浏览器窗口

探索IE浏览器窗口点燃灵感   星之海洋不知大家是否见过浏览器窗口&#xff08;哎呦&#xff0c;不要打我&#xff01;&#xff09;&#xff0c;其实&#xff0c;不要小瞧了这普普通通的windows&#xff0c;除了常用的window.open()与window.resizeTo()方法来开启窗口外&…

新转机!2020年想裸辞的程序员们注意了

近期&#xff0c;脉脉发布了《2020职场人裸辞现状调研报道》&#xff0c;报道显示2020最让职场人想裸辞的三大原因为&#xff1a;不开心、工资低、没有盼头。报告数据中还显示&#xff0c;工资不满预期是最让人想要裸辞的主要原因&#xff0c;但有超过6成职场人表示&#xff0c…

《ORACLE PL/SQL编程详细》,游标 ,函数,触发器。。

http://www.cnblogs.com/huyong/archive/2012/07/30/2614563.html

【Spark Summit East 2017】Spark化数据引擎

更多精彩内容参见云栖社区大数据频道https://yq.aliyun.com/big-data&#xff1b;此外&#xff0c;通过Maxcompute及其配套产品&#xff0c;低廉的大数据分析仅需几步&#xff0c;详情访问https://www.aliyun.com/product/odps。 本讲义出自Rohan Sharma在Spark Summit East 20…

将文本随意插入网页表单的 textarea

原作者&#xff1a;我佛山人出处&#xff1a;5D多媒体在网页表单的<textarea>中&#xff0c;我们有时候需要将文本插入到光标所在的地方&#xff0c;或是替换掉选区内的文字。这时候&#xff0c;用普通的.value"text"就无能为力了。下面这段测试代码可以解决这…

sharepoint 备份还原

sharepoint 2010备份和还原 sharepoint 2010中只有两种备份和还原的方法: 第一种: 使用命令行Stsadm来进行备份与还原 一. 备份操作 1, 首先创建一个批处理文件backup.bat,内容如下. "%systemdrive%\program Files\Common Files\Microsoft Shared\web server extension…

FCOS:全卷积一阶段Anchor Free物体检测器,多种视觉任务的统一框架

作者 | ronghuaiyang来源 | AI公园导读&#xff1a;这是众多Anchor Free中比较有影响力的一篇文章&#xff0c;不光是效果好&#xff0c;而且思路清楚&#xff0c;简单&#xff0c;不需要任何trick&#xff0c;并将众多的视觉任务统一到了一个框架中&#xff0c;值得一看。介绍…

Learn Jenkins the hard way (0) - Jenkins的罪与罚

写在开头 Jenkins是非常流行的开源的持续交付平台&#xff0c;拥有丰富的插件、文档与良好的社区。是国内大多数公司私有持续集成方案CI/CD服务器的选型。开发者可以快速的通过Jenkins搭架符合自己业务场景的pipeline&#xff0c;结合大量的开源插件&#xff0c;可以轻松的满足…

python中的文档字符串(docString)

python中的文档字符串(docString) - 泥土 - 博客园python中的文档字符串(docString)Posted on 2009-02-19 15:27 泥土 阅读(2122) 评论(0) 编辑 收藏 Python有一个很奇妙的特性&#xff0c;称为 文档字符串 &#xff0c;它通常被简称为 docstrings 。DocStrings是一个重要的工…

关于层的挡隔问题的探讨

原作者&#xff1a;我佛山人出处&#xff1a;5D多媒体1.被Flash挡住 设置Flash的参数&#xff1a;<param name"wmode" value"opaque"><object classid"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase"http://download.mac…

不是我放弃AI,是AI放弃了我!!

为什么程序员都觉得AI很难&#xff1f;Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学AI时&#xff0c;都会遇到下面3个问题&#xff1a;“应用方向太多了&#xff01;不知从何学起&#xff0c;也不知道学完做什么”“Python语法、机器学习/深度学习基础都能看…