容器技术与运维_第1页
容器技术与运维_第2页
容器技术与运维_第3页
容器技术与运维_第4页
容器技术与运维_第5页
已阅读5页,还剩346页未读 继续免费阅读

下载本文档

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

文档简介

Docker容器技术与运维教育部高等学校软件工程专业教学指导委员会

软件工程专业系列教材第1章Docker基础人民邮电出版社能力CAPACITY要求掌握Docker的概念。了解Docker应用场合和架构,以及所采用的底层技术。掌握Docker的安装和入门操作。Docker的应用Docker架构Docker底层技术安装Dockerdocker命令行的使用DockerAPIDocker配置文件格式Docker的概念1.1Docker的概念什么是DockerDocker借鉴集装箱装运货物的思想,让开发人员将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何运行Docker容器引擎的环境中,以容器方式来运行该应用程序。Docker为应用程序的开发、发布和运行提供一个基于容器的标准化平台。容器运行的是应用程序,Docker平台用来管理容器的整个生命周期。Docker可以将应用程序与基础设施分离开来,便于实现软件的快速交付。1.1Docker的概念镜像与容器容器通过运行镜像启动。镜像是一个可执行的软件包,其中包含运行应用程序时所需的一切资源——代码、运行时、库、环境变量和配置文件。构建镜像通常要创建一个Dockerfile文件来指定创建该镜像并运行它所需的全部步骤。容器是镜像可运行的实例,运行中的容器是位于内存中且有状态的镜像,本质上是一个用户进程。镜像是用于创建Docker容器的只读模板,容器是从镜像创建的运行时实例。从应用程序的角度看,镜像是应用程序生命周期的构建和打包阶段,而容器则是启动和运行阶段。1.1Docker的概念容器与虚拟机容器之间共享主机的操作系统,容器引擎将容器当作进程在主机上运行,其内核使用的是主机操作系统的内核。虚拟机有自己的操作系统,且独立于主机操作系统,其操作系统内核可以和主机不同。1.1Docker的概念Docker引擎1.1Docker的概念Docker生态系统核心技术:Runtime(运行时)为容器运行提供底层的运行环境,Docker引擎支持容器管理,DockerHub支持镜像的存储和发布。支持技术:包括Docker网络、存储、安全等技术。平台技术:DockerSwarm、Kubernetes等容器平台技术提供容器集群功能。Docker的应用Docker的概念Docker架构Docker底层技术安装Dockerdocker命令行的使用DockerAPIDocker配置文件格式1.2Docker的应用实现应用程序快速、一致的交付开发人员在本地编写应用程序代码,通过Docker容器与同事进行共享。通过Docker将应用程序推送到测试环境,并执行自动测试和手动测试。开发人员发现程序有错误,可以在开发环境中进行修复,然后重新部署到测试环境中进行测试和验证。应用程序测试完毕,向客户提供补丁程序时非常简单,只需将更新后的镜像推送到生产环境即可。1.2Docker的应用响应式部署和应用程序Docker的基于容器的平台高度支持可移植的工作负载。Docker的可移植性和轻量级特性也使得动态管理工作负载变得非常容易,可以近乎实时地根据业务需求扩展或缩减应用程序和服务。1.2Docker的应用运行更多的工作负载Docker针对虚拟机提供了切实可行且经济高效的替代解决方案。Docker是轻量级的应用,容器仅需要封装应用和应用需要的依赖。同一硬件环境中可运行的容器的数量比传统的虚拟机要多得多。1.2Docker的应用部署微服务应用每个微服务都对应有开发、测试和生产三套环境。Docker实现开发、测试和生产环境的统一化和标准化,大大简化了这些环境部署的步骤。在微服务架构中,有些服务负载压力大,需要以集群方式部署。使用虚拟机代价非常大,改用Docker容器部署,同样的物理机则能支持上千个容器。Docker的应用Docker的概念Docker架构Docker底层技术安装Dockerdocker命令行的使用DockerAPIDocker配置文件格式1.3Docker架构Docker的应用Docker的概念Docker架构Docker底层技术安装Dockerdocker命令行的使用DockerAPIDocker配置文件格式1.8Docker配置文件格式JSON格式名称空间的概念名称空间又称命名空间,是对全局系统资源的一种封装隔离技术。处于不同名称空间的进程拥有彼此独立的全局系统资源,改变一个名称空间中的系统资源只会影响当前名称空间中的进程,而不会影响其他名称空间中的进程。名称空间的类型Linux内核实现了7种不同类型的名称空间。Cgroup(控制组)IPC(进程间通信)Network(网络)Mount(挂载)PID(进程ID)User(用户)UTS(UNIXTime-sharingSystem)1.4Docker底层技术名称空间Docker使用名称空间PID名称空间——用于进程隔离网络名称空间——用于管理网络接口IPC名称空间——用于管理IPC资源的访问挂载名称空间——用于管理文件系统挂载点UTS名称空间——用于隔离内核和版本标识符用户名称空间——每个容器可以有不同的用户和组ID1.4Docker底层技术控制组控制组的概念

控制组是Linux内核提供的限制、审计、隔离进程组所使用的物理资源的一种机制。每个控制组就是一组按照某种标准划分的进程。控制组的功能资源限制

优先级资源审计隔离控制1.4Docker底层技术控制组Docker使用控制组

控制组是Docker实现虚拟化所使用的资源管理手段。每个容器都是相互隔离的一个或一组进程,可以作为一个控制组。控制组可以对容器的内存、CPU、磁盘I/O等资源进行限制和审计管理。对容器使用的内存、CPU和I/O资源的限制具体是由控制组的相应子系统来实现的。1.4Docker底层技术联合文件系统联合文件系统是为Linux、FreeBSD和NetBSD操作系统设计的,将其他文件系统合并到一个联合挂载点的一种文件系统。联合文件系统通过创建层来操作。Docker引擎使用联合文件系统的多种变体:AUFS、OverlayFS、Btrfs、BFS和DeviceMapper等。联合文件系统是实现Docker镜像的技术基础。Docker镜像可以通过分层进行继承。1.4Docker底层技术容器格式Docker的应用Docker的概念Docker架构Docker底层技术安装Dockerdocker命令行的使用DockerAPIDocker配置文件格式1.5安装DockerDocker的版本Docker版本分类DockerEngine——DockerEngineCommunity(Docker引擎社区版),简称DockerCE。DockerEnterprise——Docker企业版,简称DockerEE。所支持的功能DockerCEDockerEE容器引擎和内置的编排、网络和安全功能支持支持经认证的基础设施、插件和独立软件开发商的容器不支持支持使用Docker可信注册中心安全扫描的镜像管理不支持支持使用统一控制平台的容器应用管理不支持支持使用DockerDesktopEnterprise不支持支持*Docker版本不断演进,类别已所有改变1.5安装DockerDocker的版本DockerCE的发布版本更新频道Nightly:提供下一个主要版本的最新进展的版本,即每日构建版。Test:提供稳定版之前准备测试的预发布版本,即测试版。Stable:提供最新的、可用的通用版本,即稳定版。采用基于时间的版本号方案,使用带点号的三元组表示YY.mm.<patch>对于特定的“年-月”版本,DockerCE和Docker企业版同步进行更新。1.5安装DockerDocker所支持的平台适合安装DockerCE的桌面操作系统有macOS和Windows10,前者对应版本为DockerDesktopforMac,后者对应版本为DockerDesktopforWindows。适合安装DockerCE的服务器操作系统是Linux,不同发行版本对硬件平台架构有特定的要求。平台x86_64/amd64ARMARM64/AARCH64IBMPower(ppc64le)IBMZ(s390x)CentOS支持不支持支持不支持不支持Debian支持支持支持不支持不支持Fedora支持不支持支持不支持不支持Raspbian不支持支持支持不支持不支持Ubuntu支持支持支持支持支持1.5安装Docker安装Docker的准备工作准备安装环境升级Linux内核(可选)选择Docker安装方式大多数用户通过Docker的软件仓库进行安装,以便安装和升级。有些用户选择下载软件包手动安装,完全手动管理升级。在测试和开发环境中,有的用户选择使用自动化便捷脚本安装Docker。1.5安装Docker使用软件仓库安装DockerCE设置Docker仓库①执行以下命令安装必要的包。yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2②执行以下命令设置DockerCE稳定版的仓库地址。yum-config-manager--add-repo\http:///docker-ce/linux/centos/docker-ce.repo*使用Docker官方的仓库源,则改用:yum-config-manager--add-repo\/linux/centos/docker-ce.repo1.5安装Docker使用软件仓库安装DockerCE安装DockerCE最简单的方法是执行以下命令安装最新版本的DockerCE和containerd。yuminstalldocker-cedocker-ce-clicontainerd.io在生产环境中一般要安装指定版本的Docker。执行命令列出可用的Docker版本yumlistdocker-ce--showduplicates|sort-r安装特定版本的Dockeryuminstalldocker-ce-<版本字符串>docker-ce-cli-<版本字符串>containerd.io执行以下命令安装与本书配套的Docker版本。yuminstall-ydocker-ce-18.09.3-3.el7docker-ce-cli-18.03.3-3.el7containerd.io1.5安装Docker使用软件仓库安装DockerCE启动Docker并进行测试执行以下命令启动Docker:systemctlstartdocker运行hello-world镜像来验证DockerCE是否已经正常安装:[root@host-a~]#dockerrunhello-worldUnabletofindimage'hello-world:latest'locallylatest:Pullingfromlibrary/hello-world1b930d010525:PullcompleteDigest:sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535Status:Downloadednewerimageforhello-world:latestHellofromDocker!1.5安装Docker通过便捷脚本安装DockerCE在Linux系统上安装最新版本的DockerCE:curl-fsSL-oget-docker.shsudoshget-docker.sh

*在CentOS操作系统上,Docker安装完毕需要手动启动。安装最新的测试版本,将上述命令中的“”替换为“”。采用便捷脚本安装Docker之后,应当直接使用包管理器升级Docker。1.5安装Docker卸载Docker卸载Docker包:yumremovedocker-cedocker-ce-clicontainerd.io删除所有镜像、容器和卷:rm-rf/var/lib/docker手动删除任何已编辑的配置文件。1.5安装Docker安装Docker之后的配置配置Docker开机自动启动systemctlenabledocker配置镜像加速器在/etc/docker/daemon.json文件加入内容{"registry-mirrors":[""]}保存该文件之后重启Dockersystemctldaemon-reloadsystemctlrestartdocker1.5安装Docker安装Docker之后的配置以非root用户身份管理Docker①创建docker组。sudogroupadddocker②向docker组中添加用户。sudousermod-aGdocker用户名③注销并重新登录,以便对组成员资格进行重新评估。④如果在虚拟机上进行测试,可能需要重启此虚拟机才能使更改生效。⑤执行一个docker命令验证是否可以在不使用sudo的情况下执行docker命令。1.5安装Docker安装Docker之后的配置开启Docker远程访问①执行systemctleditdocker.service命令,添加以下内容。[Service]ExecStart=ExecStart=/usr/bin/dockerd-Hunix:///var/run/docker.sock-Htcp://:2375②保存该文件。③重新加载systemctl配置。systemctldaemon-reload④重新启动Docker。systemctlrestartdocker.service1.5安装Docker安装Docker之后的配置开启Docker远程访问⑤检查确认Docker守护进程是否在所配置的端口上侦听。[root@host-a~]#netstat-lntp|grepdockerdtcp600:::2375:::*LISTEN13327/dockerd可以在Docker客户端命令中通过-H选项指定要连接的远程主机:[root@host-a~]#docker-Htcp://1:2375infoContainers:1Running:01.5安装Docker安装Docker之后的配置卸载Docker旧版本yumremovedockerdocker-client\

docker-client-latestdocker-common\

docker-latestdocker-latest-logrotate\

docker-logrotatedocker-engineDocker的应用Docker的概念Docker架构Docker底层技术安装Dockerdocker命令行的使用DockerAPIDocker配置文件格式1.6docker命令行的使用Docker命令行接口类型引擎命令行接口(EngineCLI)容器编排命令行接口(ComposeCLI)机器命令行接口(MachineCLI)DTR命令行接口UCP命令行接口1.6docker命令行的使用docker命令列表[root@host-a~]#dockerUsage: docker[OPTIONS]COMMAND #基本语法格式Aself-sufficientruntimeforcontainersOptions: #选项列表

--configstring #客户端配置文件(默认为/root/.docker)

-c,--contextstring #用于连接到Docker守护进程的上下文名称(执行dockercontextuse命令

可以覆盖DOCKER_HOST环境变量和默认上下文设置)

-D,--debug #启用调试模式

-H,--hostlist #要连接到的守护进程套接字

-l,--log-levelstring #设置日志级别(包括debug、info、warn、error、fatal,默认值为info)

--tls #使用TLS(安全传输层协议),具体由--tlsverify选项实现

--tlscacertstring #签署可信证书的CA(默认为/root/.docker/ca.pem)

--tlscertstring #TLS证书文件的路径(默认为/root/.docker/cert.pem)

--tlskeystring #TLS密钥文件的路径(默认为/root/.docker/key.pem)

--tlsverify #使用TLS并验证远程主机

-v,--version #输出版本信息并退出1.6docker命令行的使用docker命令列表ManagementCommands: #管理命令列表

builder #管理构建

config #管理Docker配置数据

container #管理容器

context #管理上下文

engine #管理Docker引擎

image #管理镜像

network #管理网络

node #管理Swarm集群节点

plugin #管理插件

secret #管理Docker机密数据

service #管理服务

stack #管理Docker栈

swarm #管理Swarm集群

system #管理Dockertrust #管理Docker镜像上的信任

volume #管理卷1.6docker命令行的使用docker命令列表Commands: #操作命令列表

attach #连接到正在运行的容器上的本地标准输入、标准输出和错误流

build #从Dockerfile文件中构建镜像

commit #从一个变动的容器中创建新的镜像

cp #在容器与本地文件系统之间复制文件或文件夹

create #创建新的容器

diff #查看容器的文件系统上的文件或目录的变化

events #从服务器获取实时事件

exec #到正在运行的容器上执行命令

export #将容器的文件系统导出为归档文件

history #显示镜像的历史信息…………

stats #实时显示容器资源使用统计信息

stop #停止一个或多个正在运行的容器

tag #为指向源镜像的目标镜像添加一个标签

top #显示容器中正在运行的进程

unpause #恢复一个或多个容器中所有暂停的进程

update #更新一个或多个容器的配置

version #显示Docker版本信息

wait #阻塞一个或多个容器的运行并输出其退出码1.6docker命令行的使用docker命令的基本用法docker命令的基本语法docker[选项]命令短格式的为一个连字符(-)加上单个字符,如-d。长格式为两个连字符加上字符串,如--daemon。多值选项(如-a=[])可以在单个命令行中多次定义:dockerrun-astdin-astdout-i-tubuntu/bin/bashdockerrun-astdin-astdout-astderrubuntu/bin/ls对于较长的单行命令通常使用续行符(\)进行换行:dockerrun--device=/dev/sdc:/dev/xvdc\--device=/dev/sdd--device=/dev/zero:/dev/nulo\-i-t\ubuntuls-l/dev/{xvdc,sdd,nulo}1.6docker命令行的使用docker命令示例[root@host-a~]#dockerrun-i-tubuntu/bin/bashUnabletofindimage'ubuntu:latest'locallylatest:Pullingfromlibrary/ubuntu898c46f3b1a1:Pullcomplete63366dfa0a50:Pullcomplete041d4cd74a92:Pullcomplete6e1bee0f8701:PullcompleteDigest:sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8Status:Downloadednewerimageforubuntu:latestroot@fedcaa37a16e:/#exitexit[root@host-a~]#Docker的应用Docker的概念Docker架构Docker底层技术安装Dockerdocker命令行的使用DockerAPIDocker配置文件格式1.7DockerAPIDockerAPI类型引擎(Engine)API——Docker最主要的API,提供对Docker守护进程的编程访问接口。注册中心(Registry)API——用于将镜像发布到Docker引擎。DTRAPI——提供对Docker可信注册中心(TrustedRegistry)部署的编程访问接口。UCPAPI——提供对通用控制面板(UniversalControlPlane)部署的编程访问接口。1.7DockerAPI使用DockerAPI拉取镜像[root@host-a~]#curl--unix-socket/var/run/docker.sock-XPOST"http:/v1.24/images/create?fromImage=alpine"{"status":"Pullingfromlibrary/alpine","id":"2.6"}{"status":"Pullingfslayer","progressDetail":{},"id":"2a3ebcb7fbcc"}(此处省略){"status":"Pullingfromlibrary/alpine","id":"latest"}{"status":"Digest:sha256:28ef97b8686a0b5399129e9b763d5b7e5ff03576aa5580d6f4182a49c5fe1913"}{"status":"Status:Downloadednewerimageforalpine"}查看镜像列表[root@host-a~]#curl--unix-socket/var/run/docker.sock1.7DockerAPI使用DockerAPI运行容器[root@host-a~]#curl--unix-socket/var/run/docker.sock-H"Content-Type:application/json"\>-d'{"Image":"alpine","Cmd":["echo","helloworld"]}'\>-XPOSThttp:/v1.24/containers/create{"Id":"ba847f744a7fcc12982bb6c2a994148917beaea450ce1a39fe7ac6e9cc432b58","Warnings":null}Docker的应用Docker的概念Docker架构Docker底层技术安装Dockerdocker命令行的使用DockerAPIDocker配置文件格式1.8Docker配置文件格式JSON格式JSON的数据表示对象表示为键值对{"firstName":"Bill","lastName":"Gates"}JSON数组位于方括号([])中["Google","Baidu","Taobao"]数组中可以包括对象{"employees":[{"firstName":"Bill","lastName":"Gates"},{"firstName":"George","lastName":"Bush"},]}1.8Docker配置文件格式JSON格式Docker中JSON格式的应用Docker主要使用JSON格式的配置文件来设置守护进程的配置选项。在Linux系统中,配置文件默认为/etc/docker/daemon.json。{"registry-mirrors":[""],"insecure-registries":["4:5000"],"max-concurrent-downloads":10}修改配置文件之后,重启Dockersystemctlrestartdocker1.8Docker配置文件格式YAML格式YAML语法的特点YAML大小写敏感。使用缩进表示层级关系。缩进只能使用空格,不能使用TAB,不要求空格个数,但相同层级应当左对齐。使用符号“#”表示注释,YAML中只有行注释。字符串可以不用引号标注。每个“:”与它后面所跟的参数之间都需要有一个空格。YAML文件可以由一或多个文档组成,并用“---”符号分隔。1.8Docker配置文件格式YAML格式YAML的数据表示标量序列-Google-Baidu映射firstName:BilllastName:Gates嵌套manager:firstName:BillastName:Gates1.8Docker配置文件格式YAML格式Docker中YAML格式

的应用Docker容器编排和Docker堆栈部署用到Compose文件。Compose文件是文本文件,采用YAML格式,可以使用.yml或.yaml扩展名。用于容器编排时,Compose文件定义整个应用程序。用于堆栈部署时,Compose文件定义应用程序所包含的服务、依赖的密码、卷等资源,以及它们之间的关系。THANKSDocker容器技术与运维教育部高等学校软件工程专业教学指导委员会

软件工程专业系列教材第2章Docker镜像人民邮电出版社能力CAPACITY要求进一步理解镜像的概念,了解镜像的基础知识。掌握Docker镜像的基本操作。理解Docker注册中心与仓库的概念,掌握Docker注册中心的使用。Docker镜像的基本操作Docker注册中心Docker镜像基础2.1Docker镜像基础进一步理解镜像的概念在IT领域,镜像指一系列文件或一个磁盘驱动器的精确副本。在云计算环境下,镜像是一个虚拟机模板,预先安装基本的操作系统和其他软件。与虚拟机镜像非常类似,Docker镜像是用于创建Docker容器的只读模板,是按照Docker要求定制的应用程序,就像软件安装包一样。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了为运行时准备的一些配置参数。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像是创建容器的基础。2.1Docker镜像基础镜像的基本信息与标识查看镜像列表[root@host-a~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEubuntulatest94e814e2efa88daysago88.9MBalpine3.643773d1dba7612daysago4.03MBalpine3.95cb3aa00f89912daysago5.53MBalpine3.9.25cb3aa00f89912daysago5.53MBalpinelatest5cb3aa00f89912daysago5.53MBhello-worldlatestfce289e99eb92monthsago1.84kB2.1Docker镜像基础镜像的基本信息与标识镜像ID镜像ID是镜像的唯一标识,采用UUID的形式表示。实际上镜像ID取自镜像基于sha256哈希算法的摘要值。在镜像操作过程中,通常采用前12个字符的缩略形式。镜像的名称标签(TAG)用于标注同一仓库(REPOSITORY)的不同镜像版本。实际上完整的镜像名称包括Docker注册中心。镜像的摘要值镜像可以使用IMAGE[@DIGEST]格式标识,其中IMAGE表示镜像仓库名称。使用v2或更高版本格式的镜像拥有一个称为digest(摘要)的内容寻址标识符。2.1Docker镜像基础镜像描述文件DockerfileLinux应用程序开发使用Makefile文件描述整个项目所有文件的编译顺序和编译规则。执行make命令即可编译并构建应用程序。Docker使用Dockerfile文件描述镜像,定义了如何构建Docker镜像。执行build命令即可构建镜像。hello-world镜像的Dockerfile文件内容FROMscratchCOPYhello/CMD["/hello"]2.1Docker镜像基础父镜像与基础镜像父镜像(parentimage)是指镜像的Dockerfile文件中由FROM所指定的镜像。所有后续的指令都应用到这个父镜像。基础镜像(baseimage)是指基于没有提供FROM指令,或者FROM指令的参数为“scratch”(空白镜像)的Dockerfile所构建的镜像。大多数镜像都是从一个父镜像开始扩展的,父镜像往往是一个基础镜像。基础镜像不依赖其他镜像,而是从“零”开始构建。Docker官方提供的基础镜像通常是各种Linux发行版的镜像。Debian镜像的Dockerfile的内容:FROMscratchADDrootfs.tar.xz/CMD["bash"]2.1Docker镜像基础镜像的分层结构传统镜像分层结构2.1Docker镜像基础镜像的分层结构传统镜像分层结构优点便于修改。一旦某层出了问题,不需要修改整个镜像,只需要修改该层的镜像。共享资源。有着相同环境的应用程序的镜像共享同一个底层镜像。缺点镜像的层数越来越多,而联合文件系统所允许的层数是有限的。需要修改大文件时,以文件为粒度的“写时拷贝”会影响操作效率。底层基础镜像要修改,则维护工作量会变得相当大。存在一定的安全隐患。2.1Docker镜像基础镜像的分层结构基于Dockerfile的镜像分层结构2.1Docker镜像基础镜像操作命令Docker镜像的基本操作Docker注册中心Docker镜像基础2.2Docker镜像的基本操作拉取镜像dockerpull命令语法格式dockerpull[OPTIONS]NAME[:TAG|@DIGEST]--all-tags(-a):表示下载该仓库的所有标签(版本)的镜像。--disable-content-trust:默认值true,表示忽略镜像验证。--platform:如果服务器支持多平台,则可以指定平台。2.2Docker镜像的基本操作拉取镜像(1)从DockerHub拉取镜像dockerpulldebian(2)通过摘要值拉取镜像dockerpulldebian@sha256:72e996751fe42b2a0c1e6355730dc2751ccda50564fec929f76804a6365ef5ef(3)从不同的Docker注册中心拉取镜像dockerpullmyregistry.local:5000/testing/test-image(4)拉取带有多个镜像的仓库dockerpull--all-tagsfedora(5)取消拉取镜像的操作按组合键Ctrl+C即可取消拉取镜像的操作。dockerpull命令示例2.2Docker镜像的基本操作显示镜像列表默认的dockerimages命令不带任何选项和参数的dockerimages命令将显示所有顶层的镜像。dockerimages命令语法格式dockerimages[OPTIONS][REPOSITORY[:TAG]]--显示所有的镜像使用选项-a(--all)列出本地所有的镜像(含中间镜像层)。调整显示的镜像信息选项--no-trunc表示显示完整的镜像信息。选项-q(--quiet)表示只显示镜像ID。使用--digests选项将镜像的摘要值显示出来。2.2Docker镜像的基本操作显示镜像列表基于镜像仓库名称和标签显示镜像dockerimages命令接受[REPOSITORY[:TAG]]参数来列出符合参数的镜像。如果REPOSITORY和TAG两个参数同时提供,则只列出同时匹配镜像仓库名称和标签的镜像。如果没有匹配REPOSITORY[:TAG]的镜像,则列表为空。2.2Docker镜像的基本操作显示镜像列表过滤要显示的镜像选项-f(--filter)用于过滤要显示(即符合指定条件)的镜像。超过一个过滤条件,使用多个-f选项。(1)列出无标签的镜像通过dangling的布尔值(true或false)列出无标签(TAG)的镜像(2)通过指定的标记(label键值对)过滤镜像(3)按镜像的创建时间过滤选项-f使用before或since过滤出指定镜像之前或之后创建的镜像:-fbefore=(<镜像仓库名>[:标签]|<镜像ID>|<镜像摘要值>)-fsince=(<镜像仓库名>[:标签]|<镜像ID>|<镜像摘要值>)2.2Docker镜像的基本操作显示镜像列表按指定的格式列出镜像选项--format通过Go模板输出指定格式的列表。可用的Go模板占位符.ID:镜像ID。.Repository:镜像仓库名称。.Tag:镜像标签。.Digest:镜像摘要。.CreatedSince:镜像创建以来的时长。.CreatedAt:镜像创建的具体时间。.Size:镜像硬盘占用空间。2.2Docker镜像的基本操作显示镜像列表通过Shell命令替换实现镜像的批量操作通过Shell命令替换使用dockerimages命令可以解决镜像的批量操作。示例:删除所有无标签的镜像dockerrmi$(dockerimages-fdangling=true-q)2.2Docker镜像的基本操作设置镜像标签dockertag命令基本用法dockertagSOURCE_IMAGE[:TAG]TARGET_IMAGE[:TAG]完整镜像名称的结构Registry主机名:端口/名称空间/仓库名称:[标签]Registry主机名是提供镜像仓库的Docker注册中心的域名或IP地址。名称组件通常包括名称空间和仓库名称,它们之间用“/”分隔。标签可以包含小写字符和大写字符、数字、下画线、句号和破折号。一个镜像可以有镜像名称,相当于有多个别名。无论采用何种方式保存和分发镜像,首先都得给镜像设置标签(重命名)。2.2Docker镜像的基本操作查看镜像详细信息使用dockerinspect命令查看Docker对象(镜像、容器、任务)的详细信息。默认以JSON数组格式输出所有结果。如果只需要其中的特定内容时,可以使用-f(--format)指定格式。示例:获取JSON格式的子节RootFS以显示根文件系统的详细信息dockerinspect--format='{{json.RootFS}}'ubuntu2.2Docker镜像的基本操作查看镜像的构建历史以验证镜像分层使用dockerhistory命令查看镜像的构建历史。示例:查看ubuntu镜像历史信息[root@host-a~]#dockerhistoryubuntuIMAGECREATEDCREATEDBYSIZECOMMENT94e814e2efa82weeksago/bin/sh–c#(nop)CMD["/bin/bash"]0B<missing>2weeksago/bin/sh-cmkdir-p/run/systemd&&echo'do...7B<missing>2weeksago/bin/sh-crm-rf/var/lib/apt/lists/*0B<missing>2weeksago/bin/sh-cset-xe&&echo'#!/bin/sh'>/...745B<missing>2weeksago/bin/sh-c#(nop)ADDfile:1d7cb45c4e196a6a8...88.9MB镜像的构建历史信息反映了其层次2.2Docker镜像的基本操作查找镜像通过Web浏览器从DockerHub网站搜索镜像。在命令行中使用dockersearch命令搜索DockerHub中的镜像。示例:查找httpd镜像[root@host-a~]#dockersearchhttpdNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDhttpdTheApacheHTTPServerProject2391[OK]hypriot/rpi-busyboxhttpdRaspberryPicompatibleDockerImagewitha...46NAME列显示镜像仓库(源)名称OFFICIAL列指明是否Docker官方发布,“OK”表示是官方发布AUTOMATED列指明是否自动创建,“OK”表示是自动创建。2.2Docker镜像的基本操作删除本地镜像使用dockerrmi命令删除指定的镜像dockerrmi命令用法dockerrmi[OPTIONS]IMAGE[IMAGE...]一个镜像对应了多个标签,只有当最后一个标签被删除时,镜像才被真正删除。--force(-f)选项表示强制删除镜像。--no-prune选项表示不删除没有标签的父镜像。2.2Docker镜像的基本操作删除本地镜像使用dockerimageprune命令清理未使用过的镜像使用dockerimageprune命令清理未使用过的镜像。默认只会清理虚悬(dangling)镜像。虚悬镜像是没被打标签且没被其他任何镜像引用的镜像。执行以下操作删除全部虚悬镜像:dockerimageprune删除没有被现有容器使用的所有镜像:dockerimageprune-a2.2Docker镜像的基本操作Docker镜像的导入和导出使用dockersave命令将镜像导出到归档文件dockersave命令语法dockersave[OPTIONS]IMAGE[IMAGE...]选项--output(-o)用于指定镜像归档的文件。使用dockerload命令从归档文件加载镜像dockerload命令语法dockerload[OPTIONS]相当于从备份文件恢复镜像,恢复的内容包括镜像及其标签。选项--input(-i)用于指定要读取的归档文件。Docker镜像的基本操作Docker注册中心Docker镜像基础2.3Docker注册中心Docker注册中心与仓库注册中心(Registry)即注册服务器,是存放镜像仓库的地方。仓库(Repository)集中存放某一类镜像,往往包括多个镜像文件。公有仓库(PublicRepositories)私有仓库(PrivateRepositories)一个Docker注册中心往往包括多个仓库,每个仓库可以包含多个标签,每个标签对应一个特定的镜像。2.3Docker注册中心DockerHubDockerHub的主要功能镜像仓库团队和组织官方镜像发布者镜像构建Webhooks2.3Docker注册中心DockerHubDockerHub的镜像仓库公有仓库与私有仓库顶级镜像仓库次级镜像仓库2.3Docker注册中心DockerHubDockerHub的官方仓库提供必要的基础操作系统镜像仓库。为流行的编程语言运行时、数据存储和其他服务提供类似于平台即服务(PAAS)所提供的即用式解决方案。学习Dockerfile的最佳实践。确保及时的安全更新。2.3Docker注册中心DockerHub创建DockerHub账户匿名访问(不用注册账户,不用登录)可以从DockerHub上搜索并获取所需的镜像。可以创建一个账户,然后免费使用Hub的一个私有仓库。如果需要更多的私有仓库,可以付费来升级账户。通过浏览器访问DockerHub官方网站创建一个免费账户。如果使用Google浏览器,则人机身份验证受国内网络环境限制不能顺利注册,解决的办法是在Google浏览器中安装谷歌访问助手插件。另改用FireFox浏览器进行注册则不受此限制。2.3Docker注册中心DockerHubDockerHub工具Windows和MacOS操作系统需要下载Docker桌面工具。Linux操作系统只需安装DockerCE。可以通过dockersearch、dockerpull、dockerlogin和dockerpush等命令对DockerHub服务访问。2.3Docker注册中心DockerHub浏览和搜索镜像2.3Docker注册中心DockerHub查看镜像仓库镜像仓库详细信息2.3Docker注册中心DockerHub查看镜像仓库镜像的评价镜像的标签2.3Docker注册中心DockerHub创建镜像仓库2.3Docker注册中心DockerHub将镜像推送到DockerHub将仓库推送到DockerHub,需使用DockerHub用户名和仓库名称为本地镜像命名。在构建镜像的同时命名镜像:dockerbuild-t<hub-user>/<repo-name>[:<tag>]为已存在的镜像重新设置标签:dockertag<existing-image><hub-user>/<repo-name>[:<tag>]将容器提交生成镜像:dockercommit<exiting-container><hub-user>/<repo-name>[:<tag>]将镜像推送到由其名称或标签指定的仓库:dockerpush<hub-user>/<repo-name>:<tag>2.3Docker注册中心DockerHub将镜像推送到DockerHub示例:[root@host-anginx]#dockerloginLoginwithyourDockerIDtopushandpullimagesfromDockerHub.Ifyoudon'thaveaDockerID,headovertotocreateone.Username:zhongxpdockerPassword:WARNING!Yourpasswordwillbestoredunencryptedin/root/.docker/config.json.LoginSucceeded[root@host-a]#dockertaghello-worldzhongxpdocker/hello-world[root@host-a]#dockerpushzhongxpdocker/hello-world2.3Docker注册中心DockerHub管理自己的镜像仓库镜像仓库列表2.3Docker注册中心DockerHub管理自己的镜像仓库查看镜像仓库详细信息2.3Docker注册中心DockerHub管理自己的镜像仓库镜像仓库设置页面2.3Docker注册中心DockerHub管理自己的镜像仓库镜像仓库协作者2.3Docker注册中心DockerHubDockerHub的镜像加速器Docker官方提供在中国的加速器,不用注册,直接使用加速器地址即可。基本配置方法是修改/etc/docker/daemon.json文件,在其中加上以下语句:"registry-mirrors":[""]保存该文件之后重启Docker,以使Docker的配置文件生效。2.3Docker注册中心阿里云的容器镜像服务设置Registry登录密码访问阿里云主页,单击左上角菜单按钮“”,选择“产品”→“云计算基础”→“容器镜像服务”,再单击“管理控制台”按钮即可进入容器镜像服务管理界面。在阿里云的容器镜像服务的开通流程中,需要设置独立于阿里云账号密码的Registry登录密码,如图2-16所示,便于镜像的推送和拉取。

图2-16设置Registry登录密码接下来简单介绍一下阿里云的Docker镜像仓库的基本使用。2.3Docker注册中心阿里云的容器镜像服务设置Registry登录密码2.3Docker注册中心阿里云的容器镜像服务浏览和搜索镜像2.3Docker注册中心阿里云的容器镜像服务使用命名空间2.3Docker注册中心阿里云的容器镜像服务从命令行登录阿里云Registry

[root@host-a~]#dockerloginUsername:zhongxpalyPassword:WARNING!Yourpasswordwillbestoredunencryptedin/root/.docker/config.json.Configureacredentialhelpertoremovethiswarning.See/engine/reference/commandline/login/#credentials-storedockerlogin--username=LoginSucceeded*用户名是阿里云账号,登录密码是在镜像仓库管理控制台设置的Registry登录密码。2.3Docker注册中心阿里云的容器镜像服务将镜像推送到阿里云Registry

确认登录的用户对指定的命名空间有写入权限。为镜像设置针对阿里云Registry的标签,标签格式为:Registry域名/命名空间/仓库名称:[标签]示例:[root@host-a~]#dockertaghello-world/dockerabc/hello-world[root@host-a~]#dockerpush/dockerabc/hello-worldThepushreferstorepository[/dockerabc/hello-world]af0b15c8625b:Pushedlatest:digest:sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899asize:5242.3Docker注册中心阿里云的容器镜像服务从阿里云Registry拉取镜像[root@host-a~]#dockerpull/dockerabc/hello-worldUsingdefaulttag:latestlatest:Pullingfromdockerabc/hello-worldDigest:sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899aStatus:Imageisuptodatefor/dockerabc/hello-world:latest2.3Docker注册中心私有Docker注册中心自建Docker注册中心创建并启动Registry容器:dockerrun-d-p5000:5000--restart=always--nameregistry-v/opt/data/registry:/var/lib/registryregistry获取所有的镜像仓库来测试Registry服务:[root@host-a~]#curl:5000/v2/_catalog{"repositories":[]}2.3Docker注册中心私有Docker注册中心将镜像推送到自建的Docker注册中心针对自建注册中心设置相应的标签,其标签格式为:注册中心域名:端口/仓库名称:[标签]示例:[root@host-a~]#dockertaghello-world:5000/hello-world:v1[root@host-a~]#dockerpush:5000/hello-world:v1Thepushreferstorepository[:5000/hello-world]af0b15c8625b:Pushedv1:digest:sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899asize:524[root@host-a~]#curl:5000/v2/_catalog{"repositories":["hello-world"]}2.3Docker注册中心私有Docker注册中心从自建Docker注册中心拉取镜像[root@host-a~]#dockerpull:5000/hello-world:v1v1:Pullingfromhello-worldDigest:sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899aStatus:Imageisuptodatefor:5000/hello-world:v12.3Docker注册中心私有Docker注册中心配置注册中心服务地址修改/etc/docker/daemon.json文件,添加要使用的注册中心域名或IP地址:{"insecure-registries":["1:5000"]}重启docker服务:systemctlrestartdocker测试推送或拉取:[root@host-a~]#dockerpull1:5000/hello-world:v1v1:Pullingfromhello-worldDigest:sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812Status:Downloadednewerimagefor1:5000/hello-world:v1THANKSDocker容器技术与运维教育部高等学校软件工程专业教学指导委员会

软件工程专业系列教材第3章Docker容器人民邮电出版社能力CAPACITY要求进一步理解容器的概念,了解容器的基础知识。掌握Docker容器的基本操作。掌握容器的运维管理,包括资源限制、监控和日志管理。Docker容器的基本操作限制容器运行的资源Docker容器基础容器监控容器的日志管理3.1Docker容器基础进一步理解容器的概念容器是指从镜像创建的应用程序运行实例。可以将容器看作是将一个应用程序及其依赖环境打包而成的集装箱。容器实质上就是进程,但与直接在主机上执行的进程不同,容器进程运行在属于自己的独立的名称空间内。容器内的进程是运行在一个隔离的环境里,通常容器之间是彼此隔离、互不可见的。Docker镜像——静态的定义容器——镜像运行时的实体面向对象程序设计类实例3.1Docker容器基础容器的基本信息与标识容器ID容器的唯一标识是容器ID,采用UUID的形式表示。在容器操作过程中,通常采用前12个字符的缩略形式。。容器名称可以使用容器名称来代替容器ID对容器进行操作。在默认的桥接网络中,必须使用容器名称连接网络。容器名称默认是Docker自动生成的一个随机名称。可以使用dockerrename命令为现有的容器重命名。3.1Docker容器基础可写的容器层容器与镜像的主要不同之处是容器顶层的可写层。每个容器都有自己的可写容器层,而且所有的变动都存储在这个可写层中,多个容器可以共享访问同一个底层镜像,并且仍然拥有自己的数据状态。Docker使用存储驱动来管理镜像层和容器层的内容。3.1Docker容器基础磁盘上的容器大小查看一个运行中的容器的大小,可以使用dockerps-s命令[root@host-a~]#dockerps-sCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESSIZE7e9a96fb1f83httpd"httpd-forearound"7secondsagoUp6seconds80/tcpecstaticgangulv2B(virtual132MB)第1个值表示每个容器的可写层当前所用的数据大小。第2个值是虚拟大小值,位于括号内并标注virtual,表示该容器所用只读镜像的数据大小加上容器可写层大小的和。正在运行的容器所用的磁盘空间是每个容器大小和虚拟大小值的组合。3.1Docker容器基础“写时拷贝”策略共享有助于减少镜像大小从镜像源获取镜像时,每个层都是独立拉取的,并保存在Docker主机本地存储区域中各自的目录中。这些镜像之间如果存在公共的镜像层,则可以彼此共享,从而避免重复存储,减少镜像大小。第1个镜像的分层第2个镜像的分层3.1Docker容器基础“写时拷贝”策略复制使容器效率更高容器中不修改的任何文件都不会复制到可写层,可写层占用尽可能小的空间。修改容器中已有的文件时,存储驱动执行“写时拷贝”操作。对于aufs、overlay和overlay2等存储驱动来说,“写时拷贝”操作的大致顺序如下。(1)从镜像各层中搜索要修改的文件。从最新的顶层开始直到最底层,一次一层。找到的文件将被添加到缓存中以加速后续操作。(2)对找到的文件的第一个副本执行copy_up操作,复制到容器的可写层中。(3)任何修改只针对该文件的这个副本,该文件位于低层的只读副本对容器来说是不可见的。3.1Docker容器基础容器操作命令容器生命周期管理操作命令:如dockerrun、dockerstart容器运维操作命令:如dockerps、dockerinspect。操作的容器可以使用容器ID或容器名称进行标识。Docker较新版本提供了一个统一的容器管理命令dockercontainer。dockercontainer子命令dockercontainer子命令执行容器的各类管理操作功能,大多与传统的容器操作docker子命令相对应。Docker容器的基本操作限制容器运行的资源Docker容器基础容器监控容器的日志

温馨提示

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

评论

0/150

提交评论