《容器化开发竞赛培训》-2.镜像、容器_第1页
《容器化开发竞赛培训》-2.镜像、容器_第2页
《容器化开发竞赛培训》-2.镜像、容器_第3页
《容器化开发竞赛培训》-2.镜像、容器_第4页
《容器化开发竞赛培训》-2.镜像、容器_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

镜像、容器《Docker容器技术与应用》Docker掌握Docker镜像的基础知识,学会镜像的操作方法。熟悉容器技术,掌握容器的操作方法。0201学习目标梳理清楚镜像、容器和仓库的关系。掌握镜像的基础知识,学会镜像的操作方法。熟悉容器技术,掌握容器的操作方法。030201学习目标Docker的3个核心概念是镜像(image)、容器(container)和仓库(Repository),他们贯穿于Docker虚拟化应用的整个生命周期。本项目将实现Docker的基本应用,讲解镜像、容器的概念和使用、操作方法。描

述项目描述任

务分解tasks镜像、容器、仓库Docker镜像的概念镜像命令Docker容器的概念容器命令

03

04

050102

01

任务1:镜像、容器、仓库的关系

Docker架构

Docker架构Docker客户端:通过命令行使用Docker守护进程。Docker服务器:负责构建、运行和分发容器,

以后台服务的方式运行。Docker镜像:

只读的模板,可用于创建容器,每一个镜像由一系列的层组成。Docker容器:利用容器运行应用。容器是从镜像创建的运行实例,可以被启动、开始、终止、删除。Docker注册中心:用于存储和分发Docker镜像。

任务2:

Docker镜像的概念02

Docker镜像--任务说明简单了解Dockerfile文件了解镜像的基本信息了解镜像的分层结构理解镜像的概念镜像在IT领域通常是指一系列文件或一个磁盘驱动器的精确副本。Ghost镜像→虚拟机镜像→Docker镜像Docker镜像是按照Docker要求定制的应用程序,就像软件安装包一样。什么是镜像?一个Docker镜像可以包括一个应用程序以及能够运行它的基本操作系统环境。镜像是创建容器的基础,通过版本管理和增量的文件系统,Docker提供了一套十分简单的机

制来创建和更新现有的镜像。

什么是镜像?•镜像ID是镜像唯一标识,采用UUID形式表示,全长64个十六进制字符。实际上镜像ID是镜像的摘要值(Digest)

,是由哈希函数sha256对镜像配置文件计算而来的。•

标签用于标记同一仓库的不同镜像版本。•镜像可以通过镜像ID、镜像名称(包括标签)或者镜像摘要值(内容寻址标识符)

来标识或引用。REPOSITORYTAGIMAGE

IDCREATEDSIZEubuntulatesta2a15febcdf34weeks

ago64.2MBhello-worldlatestfce289e99eb98

monthsago1.84kB镜像的基本信息[root@host1

~]#docker

images•Docker所用的Dockerfile文件用来描述镜像

,定义了如何构建Docker镜像。•

Dockerfile是一个文本文件,包含了要构建镜像的所有命令。•

Docker通过读取Dockerfile中的指令自动构建镜像。•

hello-world镜像的Dockerfile内容FROM

scratchCOPY

hello/CMD

["/hello"]镜像描述文件Dockerfile•父镜像是指该镜像的Dockerfile文件中由FROM指定的镜像。所有后续的指令都应用到这个父镜像中。•基于未提供FROM指令,或提供有FROM

scratch指令的Dockerfile所构建的镜像被

称为基础镜像。

大多数镜像都是从一个父镜像开始扩展的,这个父镜像通常是一个基础镜像。基础镜像不依赖其他镜像,而是从“零”开始构建。•Docker官方提供的基础镜像通常都是各种Linux发行版的镜像。•

Debian基础镜像的Dockerfile的内容FROMscratchADD

rootfs.tar.xz/CMD

["bash"]基础镜像

镜像分层•

基于联合文件系统的镜像分层•早期镜像的分层结构是通过联合文件系统实现的,联合文件系统将各层的文件系统

叠加在一起,向用户呈现一个完整的文件系统。

便于镜像的修改。

有助于共享资源。具有相同环境的应用程序的镜像共享同一个环境镜像,不需要每个镜像都创建一个底层环境,运行时也只需要加载同一个底层环境。•

不足

会导致镜像的层数越来越多,而联合文件系统所允许的层数是有限的。

当需要修改大文件时,以文件为粒度的写时拷贝需要复制整个大文件进行修改,会影响操作效率。

一些上层的镜像都基于相同的底层基础镜像,一旦基础镜像需要修改,而基于它的上层镜像如果是通过容器生成的,则维护工作量会变得相当大。

镜像的使用者无法对镜像进行审计,存在一定的安全隐患。•

基于联合文件系统的镜像分层•

优点镜像分层•

基于Dockerfile文件的镜像分层•

为克服镜像分层方式的不足,

Docker推荐选择Dockerfile文件逐层构建镜像。•大多数Docker镜像都是在其他镜像的基础上逐层建立起来的。•构建镜像时每一层都由镜像的Dockerfile指令所决定。除了最后一层,每层都是只

读的。镜像分层镜像操作命令如何使用?课后思考02任务3:镜像命令镜像命令--任务说明使用命令查找和获取镜像使用命令管理本地镜像dockerimage子命令docker子命令功能dockerimagebuilddockerbuild从Dockerfile构建镜像dockerimagehistorydockerhistory显示镜像的历史记录dockerimage

importdocker

import从tarball文件导入内容以创建文件系统镜像dockerimage

inspectdocker

inspect显示一个或多个镜像的详细信息dockerimage

loaddocker

load从tar档案文件或STDIN装载镜像docker

image

lsdocker

images输出镜像列表dockerimageprune无删除未使用的镜像dockerimagepulldockerpull从注册服务器拉取镜像或镜像仓库dockerimagepushdockerpush将镜像或镜像仓库推送到注册服务器docker

imagermdocker

rmi删除一个或多个镜像dockerimage

savedocker

save将一个或多个镜像保存到tar存档(默认情况下流式传

输到STDOUT)docker

image

tagdocker

tag为指向源镜像的目标镜像添加一个名称

镜像操作命令镜像常用命令镜像标签01030405查看镜像信息显示镜像列表

02

拉取镜像查找镜像

镜像常用命令06080910查看镜像历史

07

镜像导入镜像导出镜像删除ok1、查找镜像

—docker

search•

查找镜像Digest:sha256:2f7c79927b346e436cc14c92bd4e5bd778c3bd7037f35bc639ac1589a7acfa90Status:

Downloaded

newer

imageforubuntu:14.04docker.io/library/ubuntu:14.04•每层都是单独拉取的,并将镜像保存在Docker的本地存储区域。•

拉取镜像[root@host1

~]#docker

pull

ubuntu:14.0414.04:

Pullingfrom

library/ubuntua7344f52cb74:

Pullcomplete515c9bb51536:

Pullcompletee1eabe0537eb:

Pullcomplete4701f1215c13:

Pullcomplete2、拉取镜像

—dockerpull•

显示本地的镜像列表•

语法格式docker

images

[选项]

[仓库[:标签]]•

-f选项可以通过dangling的布尔值列出无标签的镜像:[root@host1

~]#docker

images-fdangling=trueREPOSITORYTAGIMAGE

IDCREATEDSIZE<none>

<none>38d15a9d054d

28

hours

ago<none>

<none>998509cd8d32

28

hoursago•通过shell命令替换docker

images命令可以解决镜像的批量操作。dockerrmi

$(docker

images

-fdangling=true

-q)3、显示镜像列表—dockerimages64.2MB64.2MB

4、镜像标签

—docker

tag•

设置镜像标签•

基本用法dockertag源镜像[:标签]

目标镜像[:标签]•

完整的镜像名称的结构[主机名:端口]/命名空间/仓库名称:[标签]•

示例——为由镜像ID标识的镜像加上标签dockertag0e5574283393fedora/httpd:version1.0•

示例——为由仓库名称标识的镜像加上标签

dockertag

httpdfedora/httpd:version1.0•示例——为由仓库名称和镜像ID组合标识的镜像加上标签。

dockertag

httpd:testfedora/httpd:version1.0.test•示例——指定一个注册服务器的主机名(可能包含端口)dockertag0e5574283393myregistryhost:5000/fedora/httpd:version1.0•

查看镜像详细信息•使用docker

inspect命令查看Docker对象(镜像、容器、任务)

的详细信息。•

示例——获取ubuntu镜像的体系结构[root@host1

~]#docker

inspect

--format='{{.Architecture}}'

ubuntuamd64•示例——通过JSON格式的RootFS子节获取镜像的根文件系统信息[root@host1

~]#dockerinspect--format='{{json.RootFS

}}'ubuntu{"Type":"layers","Layers":["sha256:6cebf3abed5fac58d2e792ce8461454e92c245d5312c42118f02e231a73b317f","sha256:f7eae43028b334123c3a1d778f7bdf9783bbe651c8b15371df0120fd13ec35c5","sha256:7beb13bce073c21c9ee608acb13c7e851845245dc76ce81b418fdf580c45076b","sha256:122be11ab4a29e554786b4a1ec4764dd55656b59d6228a0a3de78eaf5c1f226c"]}5、查看镜像信息—dockerinspectIMAGECREATEDCREATED

BYSIZEa2a15febcdf35weeks

ago/bin/sh

-c#(nop)

CMD

["/bin/bash"]0B<missing>5weeks

ago/bin/sh

-c

mkdir

-p/run/systemd

&&echo

'do

…7B<missing>5weeks

ago/bin/sh

-c

set

-xe

&&echo

'#!/bin/sh'

>/…745B<missing>5weeks

ago/bin/sh

-c

[

-z

"$(apt-get

indextargets)"]987kB<missing>5weeks

ago/bin/sh

-c#(nop)ADD

file:c477cb0e95c56b51e

…63.2MB•

查看镜像的构建历史•使用docker

history命令可以查看镜像的构建历史。•

示例——查看ubuntu镜像的历史信息

[root@host1

~]#docker

history

ubuntu•<missing>行表明相应的层在其他系统上构建,并且已经不可用了,可以忽略这些层。6、查看镜像历史—dockerhistory•

导出镜像①先从一个联网的Docker主机上拉取Docker镜像。②使用dockersave命令将镜像导出到归档文件中。[root@host1

~]#dockersave

--output

hello-world.tar

hello-world[root@host1

~]#

ls

-sh

hello-world.tar16K

hello-world.tar③准备一台离线的Docker主机。④将归档文件复制到离线的Docker主机上。7、镜像导出

—docker

save[==================================================>]3.584kB/3.584kBLoaded

image:

hello-world:latest⑥使用docker

images命令查看刚加载的镜像。[root@host2

~]#docker

imagesREPOSITORYTAGIMAGE

IDCREATEDSIZEhello-worldlatestfce289e99eb93

minutesago1.84kB⑦基于该镜像启动一个容器。[root@host2

~]#docker

run

hello-worldHellofrom

Docker!This

messageshowsthatyourinstallationappearsto

beworking

correctly.

8、镜像导入—dockerload•

导入镜像⑤使用docker

load命令从归档文件加载该镜像。[root@host2

~]#docker

load

--input

hello-world.taraf0b15c8625b:

Loading

layer……•

删除本地镜像•

使用docker

rmi命令删除本地的镜像。docker

rmi

[选项]镜像

[镜像…]•可以使用镜像的ID、标签或镜像摘要标识符来指定要删除的镜像。•如果一个镜像对应了多个标签,则只有当最后一个标签被删除时,镜像才被真正删

除。•

--no-prune选项表示不删除没有标签的父镜像。9、镜像删除

—dockerrmi镜像命令的操作演示请参考下一个任务视频。

操作视频2、查看该镜像的详细信息3、查看该镜像的构建历史实训内容4、删除该镜像1、拉取最新的CentOS官方镜像

项目实训一掌握Docker镜像的基本操作实训目的如何将镜像转换成容器?课后思考

任务4:

Docker容器的概念03

Docker容器的概念-任务说明了解容器的基本信息了解可写的容器层理解写时复制策略理解容器的概念容器是指从镜像创建的应用程序运行实例。镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体,基于同一镜像可以创建若干不

同的容器。什么是容器?可以将容器看作将一个应用程序及其依赖环境打包而成的集装箱。容器的实质是进程,但与直接在主机上执行的进程不同,容器进程在属于自己的独立的命名空

间内运行。这种特性使得容器封装的应用程序比直接在主机上运行的应用程序更加安全。什么是容器?•使用docker

ps

-a命令可以输出本地主机上的全部容器列表。•容器的唯一标识容器ID与镜像ID一样采用UUID形式表示,是由64个十六进制字符组成的字符串。通常采用前12个字符的缩略形式,这在同一主机上足以区分各个容器。容器

数量少的时候,还可以使用更短的格式,只取前面几个字符即可。•容器ID能保证唯一性,但难于记忆,因此可以通过容器名称来代替容器ID引用容器。容

器名称默认由Docker自动生成,也可在执行docker

run命令时通过--name选项自行指定。•可以使用docker

rename命令为现有的容器重新命名,以便于后续的容器操作。

容器的基本信息•

每个容器都有自己的可写容器层,所有的改变都存储在这个容器层中,

因而多个容器可以共享访问同一个

底层镜像,并且仍然拥有自己的数

据状态。•

Docker使用存储驱动来管理镜像层和容器层的内容。每个存储驱动的

实现都是不同的,但所有驱动都使用可堆叠的镜像层和写时复制策略。可写的容器层•写时复制是一个高效率的文件共享和复制策略,最大限度地减少了每个后续层的I/O

和空间大小。•

共享有助于减少镜像大小。•

复制使容器效率更高。•修改容器中已有的文件时,存储驱动执行写时复制策略,具体步骤取决于特定的存

储驱动。对于aufs、

overlay和overlay2驱动来说,执行写时复制策略的大致步骤:①从镜像各层中搜索要修改的文件。从最新的层开始直到最底层,一次一层。被找到的文件将被添加到缓存中以加速后续操作。②对找到的文件的第1个副本执行copy_up操作,将其复制到容器的可写层中。③任何修改只针对该文件的这个副本,容器不能看见该文件位于低层的只读副本。写时复制策略•

示例——查看该容器的大小[root@host1

~]#docker

ps

-sCONTAINER

IDIMAGECOMMAND……PORTS

NAMESSIZEd4681ed98491httpd"httpd-foreground"

……80/tcp

youthful_maxwell

2B

(virtual

154MB)•

SIZE列第1个值表示每个容器的可写层当前所用的数据大小。第2个值是虚拟大小,

位于括号中并标注virtual,

表示该容器所用只读镜像的数据量加上容器可写层大小

的和。•磁盘上正在运行的容器所用的磁盘空间是每个容器大小和虚拟大小值的总和。磁盘上的容器大小容器操作命令如何使用?课后思考04任务。:容器操作

Docker容器操作-任务说明掌握容器运维的操作命令掌握容器的生命周期操作命令[root@host1

~]#docker

run

-it

ubuntu/bin/bashroot@df2dc9805ae4:/#[root@df2dc9805ae4:/#

lsbindev

homelib64

mnt

proc

run

srv

tmp

var[root@host1

~]#docker

run

-d

-p80:80

--nametestweb

httpd03048fad7ba3f53f0092869e7dfc48e76eea81f813de11ce5d361cb9a5135b18docker

run

[选项]镜像

[命令]

[参数…][root@host1

~]#docker

run

ubuntu/bin/echo

"这是一个自动终止的容器"•示例——启动容器并让其以守护进程的形式在后台运行•

示例——启动容器执行命令后自动终止容器•

示例——启动容器并允许用户交互创建并启动容器•

基本用法[root@host1

~]#docker

create

-i

-t

busyboxUnabletofind

image

'busybox:latest'

locallylatest:

Pullingfrom

library/busybox7c9d20b9b6cd:

Pull

completeDigest:sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51eStatus:

Downloaded

newer

imagefor

busybox:latest64ea1e69ec00ddf6ead403a6582810dd3d5fda110a9585277d72d076e62e93e3•该容器处于已创建(Created)但未启动的状态。•

示例——基于busybox镜像创建一个容器•

基本用法dockercreate

[选项]镜像

[命令]

[参数…]创建容器•

启动容器•

基本用法dockerstart

[选项]容器

[容器…]•

停止容器•

基本用法dockerstop

[选项]容器

[容器…]docker

kill

[选项]容器

[容器…]•

重命名容器•

基本用法docker

rename容器容器名称容器操作•

显示容器列表•

使用docker

ps命令显示容器列表。•不带任何选项执行该命令会列出所有正在运行的容器信息。•

使用-a选项列出所有的容器。•-f选项可以通过多种条件过滤容器。•通过shell命令替换docker

ps命令可以解决容器的批量操作。•

示例——暂停正在运行的所有容器。dockerpause

$(docker

ps

-fstatus=running

-q)显示容器列表[root@host1

~]#docker

inspect

--format='{{json.State}}'

myweb{"Status":"running","Running":true,"Paused":false,"Restarting":false,"OOMKilled":false,"Dead":false,"Pid":21545,"ExitCode":0,"Error":"","StartedAt":"2020-01-11T20:33:54.133559551Z","FinishedAt":"0001-01-01T00:00:00Z"}[root@host1

~]#docker

inspect

--format='{{.Name}}'

5ecbaf9d164f/myweb•

查看容器详细信息•

使用docker

inspect命令来查看容器的详细信息。•

示例——获取容器5ecbaf9d164f的名称。•示例——通过JSON格式的State子节获取容器的状态元数据。查看容器详细信息•

使用docker

attach命令连接到正在运行的容器dockerattach

[选项]容器

示例——连接到一个运行中的容器并从中退出:

[root@host1

~]#docker

run

-d

--nametopdemo

ubuntu/usr/bin/top

-b2350cfa9849b595cc1bcf3aa502c86190a920738c633657493bc1ed8df518b33[root@host1

~]#dockerattachtopdemotop

-

15:17:52

up1:17,0

users,

loadaverage:

0.00,

0.03,

0.05Tasks:1total,1

running,0sleeping,0

stopped,

0zombie%Cpu(s):5.9

us,1.3

sy,

0.0

ni,

92.8

id,

0.0

wa,

0.0

hi,

0.0

si,

0.0

stKiB

Mem:3861512total,988128free,

1096144

used,

1777240

buff/cacheKiBSwap:4063228total,4063228free,0

used.

2455108avail

Mem进入容器1•使用docker

exec命令在正在运行的容器中执行命令dockerexec

[选项]容器命令

[参数…]

示例——进入一个运行中的容器交互执行命令并从容器中退出:[root@host1

~]#dockerstarttopdemotopdemo[root@host1

~]#dockerexec

-ittopdemo/bin/bashroot@2350cfa9849b:/#

psPIDTTY

TIME

CMD6

pts/0

00:00:00

bash15

pts/0

00:00:00

psroot@2350cfa9849b:/#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论