Docker基础入门实战

第1章 docker简介

1.1 what is Docker

Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,源代码部署在GitHub上。

Docker是通过内核虚拟技术来提供容器的资源隔离与安全保障,由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,从而提高资源的利用率。

Docker的目标是实现轻量级的操作系统虚拟化解决方案。

1.2 Docker的工作模式

Docker对于操作者来说是C/S架构,但是Docker后端是一个非常耦合的架构,模块各司其职,并有机组合,支撑Docker的运行。

用户通过使用Docker Client与Docker Daemon建立通信,并发送请求给后者。

CLI(命令行)交互模型

RemoteAPI交互模式

1.3  Docker可以干些什么

q 8种应用场景

q 【Simplifying Configuration】

简化配置:统一配置、通过镜像快速启动

q 【Code Pipeline Management】

代码流水线管理:

开发环境->测试环境->预生产环境->灰度发布->正式发布,docker在这里可以快速实现迁移

q 【Developer Productivity】

提高开发效率:对开发人员来说,有了镜像,直接启动容器即可

q 【App Isolation】

隔离应用:相对于虚拟机的完全隔离会占用资源,docker会比较节约资源

q 【Server Consolidation】

服务器整合:同一台服务器可以跑多个docker容器,提高服务器的利用率

q 【Debugging Capablities】

调试能力:Docker提供了很多的工具,提供了很多的功能,这些可以帮助调试bug

q 【Multi-tenancy】

多租户:一个租户多个用户,类似于阿里云的一个projiect下多个用户

q 【Rapid Deplovment】

快速部署:不需要启动操作系统,实现秒级部署

1.4 Docker的8大开发模式

q The Shared Base Container(s):共享基础容器

q The Shared Volume Dev Container:共享卷开发容器

q The Dev Tools Container:开发工具容器

q The Test In A Different Environment containers:不同环境下测试容器

q The Build Container:构建容器

q The Installation Container:安装容器

q The Default-Service-In-A-Box Containes:盒子中默认服务器容器

q The Infrastructure/Glue Containers:基础设施/粘合剂容器

1.1 Docker的9个基本事实

q 容器不同于虚拟机

q 容器不如虚拟机来的成熟

q 容器可以在几分之一秒内启动

q 容器已在大规模环境证明了自身的价值(比如在谷歌搜索中)

q IT人员称容器为轻量级

q 容器引发安全方面的问题

q Docker已成为容器的代名词,但他不是唯一的提供者

q 容器可以节省IT人力,加快更新

q 容器仍面临一些没有解决的问题

1.2 Why use Docker

q 更快速的交付和部署

q 更高效的虚拟化

q 更轻松的迁移和扩展

q 更简单的管理

1.1 Docker与OpenStack的对比

类别DockerOpenStack

部署难度极其简单组件多,部署复杂

启动速度秒级分钟级

执行性能和物理系统几乎一致Vm会占用一些资源

镜像体积镜像是MB级别虚拟机镜像是GB级别

管理效率管理简单组件相互依赖,管理复杂

隔离性隔离性高彻底隔离

可管理性能单进程、不建议启动ssh完整的系统隔离

网络连接比较弱借助Neutron可以灵活组件各种网络结构

特别提示:有些场景是不适合用docker的,像前段的web服务,若使用docker则当docker挂掉时,里面不会像数据库那样有数据写入,这时就需要在重新启动启动一个docker

1.1 Docker的3大核心概念

1.1.1 镜像(image)

Docker镜像就是一个只读的模板,例如一个镜像可以包含一个完整的操作系统环境,里面仅安装了Apache或用户需要的其他应用程序

镜像可以用来创建容器,Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,并且用户甚至可以直接从其他人哪里下载一个已经做好的镜像来直接使用

1.1.2 容器(container)

Docker利用容器来运行应用,容器是从镜像创建的运行实例,他可以启动、停止、开始、删除,每个容器都是相互隔离的,保证平台的安全

可以把容器看成一个简易版的linux系统和运行在其中的应用程序

镜像是只读的,容器在启动的时候会创建一层可写层作为最上层

1.1.3 仓库(repository)

仓库就是集中存放镜像的地方,有时候会把仓库和仓库注册器混成一块,并不严格区分,仓库注册器上往往存放着多个仓库,每个仓库又包含了多个镜像,每个镜像又有不同的tag

仓库分为公开仓库和私有仓库两种,最大的公开仓库是Docker Hub,提供了数量庞大的镜像供用户下载,国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定、更快的访问

第2章 Docker入门实战

2.1 系统环境

[root@docker ~]# cat /etc/redhat-releaseCentOS Linux release 7.4.1708(Core)[root@docker ~]# uname -r3.10.0-693.11.6.el7.x86_64

2.2 安装及启动

[root@docker ~]# yum install -y docker  ==》安装[root@docker ~]# systemctl  start docker  ==》启动[root@docker ~]# systemctl  status docket  ==》查看状态信息[root@docker ~]# systemctl enable docker  ==》加入开机自启动[root@docker ~]# docker --version  ==》简略版本信息Docker version 1.13.1, build dded712/1.13.1[root@docker ~]# docker version    ==》详细版本信息Client:==》客户端信息 Version:        1.13.1 API version:    1.26 Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64 Go version:      go1.9.4 Git commit:      dded712/1.13.1 Built:          Tue Jul 17 18:34:48 2018 OS/Arch:        linux/amd64 Server:==》服务端信息 Version:        1.13.1 API version:    1.26(minimum version 1.12)Package version: docker-1.13.1-68.gitdded712.el7.centos.x86_64 Go version:      go1.9.4 Git commit:      dded712/1.13.1 Built:          Tue Jul 17 18:34:48 2018 OS/Arch:        linux/amd64 Experimental:false

2.3 docker镜像管理

2.3.1 search镜像

[root@docker ~]# docker search centos:6

2.3.2 push镜像

[root@docker ~]# docker pull centos:6

2.3.3 查看镜像

[root@docker ~]# docker images

2.3.4 导入/导出镜像

[root@docker ~]# docker save centos:6 >/opt/centos.tar.gz  ==》导出镜像[root@docker ~]# docker load  </opt/centos.tar.gz  ==》导入镜像

2.3.5 删除镜像

[root@docker ~]# docker rmi $ IMAGE ID/$TAG

2.3.6 利用镜像创建容器

[root@docker ~]# docker run -it centos:6 /bin/bash

2.4 容器管理

2.4.1 新建容器

[root@docker ~]# docker run centos:6 /bin/echo "hehe" =》与在本地执行/bin/echo "hehe"一样[root@docker ~]# docker run --name mydocker -it centos:6 /bin/bash =》启动一个bash终端,允许用户进行交互--name:给容器定义名称-i:让容器的标准输入保持打开-t:Docker分配一个伪终端并绑定到容器的标准输入上

2.4.2 启动/停止容器

[root@docker ~]# docker start $NAMES/$CONTAINER ID[root@docker ~]# docker stop $NAMES/$CONTAINER ID[root@docker ~]# docker ps  ==》列出已经启动的容器[root@docker ~]# docker ps –a  ==》列出所有容器,包括未启动的

2.4.3 删除容器

[root@docker ~]# docker rm $CONTAINER ID  ==》删除已经停止的容器[root@docker ~]# docker rm -f  $CONTAINER ID  ==》删除正在运行的容器

2.4.4 进入容器

2.4.4.1 attach命令进入

[root@docker ~]# docker attach $CONTAINER ID注意:该命令是系统自带的,并且启用attach命令有时候并不是特别的方便,当多个窗口同时attach到一个容器的时候,多有的窗口都会同步显示,当某个窗口因某个命令堵塞时,其他窗口也就无法再执行命令了,在退出容器时,该容器会自动停止

2.4.4.2 nsenter命令进入

[root@docker ~]# yum install -y util-linux  ==》安装nsenter[root@docker ~]# docker inspect --format "{{.State.Pid}}" test ==》找到容器进程ID[root@docker ~]# nsenter -t 19245 -u -i -m –p  ==》进入容器-t, --target<pid>target process to get namespaces from指定容器的进程ID-m, --mount[=<file>]entermountnamespace进入到mount namespace空间中-u, --uts[=<file>]enter UTS namespace(hostname etc)进入到UTS namespace空间中-i, --ipc[=<file>]enter System V IPC namespace进入到System V IPC namespace空间中-n, --net[=<file>]enter network namespace进入到network namespace空间中-p, --pid[=<file>]enter pid namespace进入到pid namespace空间

2.4.4.3 编写脚本快速进入容器

[root@docker scripts]# vim docker_in.sh#/bin/bashPID=$(docker inspect -f"{{.State.Pid}}"$1)nsenter -t$PID-m -u -i -n -p

(该文章参考CTO博客作者文章,仅供参考)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容