《容器化开发竞赛培训》-7.Compose容器编排_第1页
《容器化开发竞赛培训》-7.Compose容器编排_第2页
《容器化开发竞赛培训》-7.Compose容器编排_第3页
《容器化开发竞赛培训》-7.Compose容器编排_第4页
《容器化开发竞赛培训》-7.Compose容器编排_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

《Docker容器技术与应用》容器编排Docker

学习目标01

能够陈述DockerCompose容器编排的基本操作02

能够根据Compose文件格式和语法编写Compose文件。03

能够使用Compose部署和管理应用程序。对于复杂一点的应用程序,如一个Web网站,需要先启动数据库服务器容器,再启动web服务器容器。

引入容器编排可操作简单,统一管理。Docker

Compose是一个定义和运行复杂应用程序的工具,负责实现对容器的编排,通过配置文件管理多个容器,实现多容器的自动化管理。描

述项目描述任

务分解tasksDockerCompose入门编写Compose文件使用DockerCompose部署和管理应用程序030102

01

任务1:

DockerCompose入门

DockerCompose

的工

机制熟

使

用DockerCompose的基本步骤

DockerCompose入门--任务说明了解DockerCompose的特点

和应用场景了解DockerCompose的概念

为什么要使用DockerCompose部署容器•使用docker命令部署和管理多容器应用程序时,

使用的命令可能会变得冗长,包括

大量的选项和参数,配置过程比较复杂,而且容易发生差错。•Docker

Compose并不是通过脚本和各种docker命令将多个容器组织起来,而是通

过一个声明式的配置文件描述整个应用程序,从而让用户使用一条命令即可完成整个应用程序的部署。•

Docker

Compose将逻辑关联的多个容器编排为一个整体进行统一管理,提高了应

用程序部署效率。

DockerCompose的工作机制•

以项目为单位管理应用程序的部署,可以将它所管理的对象从上到下依次分为以下3个

层次:•项目:又称工程。表示需要实现的一个应用程序,

并涵盖了该应用程序所需的所有

资源,是由一组关联的容器组成的一个完整业务单元。•服务:表示需要实现的一个子应用程序,它以容器方式完成某项任务。服务具体定

义容器运行的镜像、参数和依赖关系。•容器:指的是服务的副本。每个服务又可以以多个容器实例的形式运行,可以更改

容器实例的数量来增减服务数量,从而为进程中的服务分配更多的计算资源。

DockerCompose的项目概念•

软件开发环境创建隔离的环境,在其中运行应用程序并与之进行交互。

Compose文件提供了记录和配置所有应用程序的服务依赖关系(数据库、队列、缓存和Web服务API等)的方式。通过DockerCompose命令行工具,可以使用单个命令为每个项目创建和启动一个或多个容器。•自动化测试环境这是持续部署或持续集成过程的一个重要部分,通过DockerCompose可以创建和销毁用于测试集合的隔离测试环境。通过在Compose文件中定义完整的环境,可以仅使用几条命

令就创建和销毁这些环境。•

单主机部署DockerCompose专注于开发和测试工作流,但在每个发行版本中都会增加更多面向生产的功能。可以使用DockerCompose将应用程序部署到远程Docker引擎中。DockerCompose的应用场景

使用DockerCompose的基本步骤①使用Dockerfile定义应用程序的镜像

以便可以在任何地方分发。②使用Compose文件定义组成应用程序的服务。③执行docker-compose

up命令启动整个应用程序。

1、正确安装DockerCompose。并使

实训内容

2、定义一个wordpress项目并编写compose文件。

3、构建运行应用程序,并测试。

安装

Docker

Compose用它部署WordPress。

项目实训实训目的部署wordpress应用--操作步骤构建项目01030405测试,浏览器

打开wordpress创建一个项目和

yml文件在yml文件中

定义服务安装docker-compose

02

(1)使用curl命令从GitHub上的DockerCompose仓库下载二进制文件。curl

-L

"<GitHub上的DockerCompose仓库网址>"

>/usr/local/bin/docker-compose(2)为该二进制文件添加可执行权限。chmoda+x/usr/local/bin/docker-compose(3)执行以下命令进行测试。[root@host1

~]#docker-compose

--versiondocker-composeversion

1.26.0,

build0a186604(4)

DockerCompose卸载命令rm/usr/local/bin/docker-compose安装DockerCompose

创建一个项目[root@host1/]#

mkdir

my_wordpress[root@host1/]#cd

my_wordpress[root@host1

my_wordpress]#touch

docker-compose.ymlversion:

'3.3'services:db:image:mysql:5.7volumes:-db_data:/var/lib/mysqlrestart:alwaysenvironment:MYSQL_ROOT_PASSWORD:somewordpress

MYSQL_DATABASE:wordpressMYSQL_USER:wordpressMYSQL_PASSWORD:wordpresswordpress:depends_on:-

dbimage:wordpress:latestports:-

"8000:80"restart:alwaysenvironment:WORDPRESS_DB_HOST:db:3306WORDPRESS_DB_USER:wordpressWORDPRESS_DB_PASSWORD:wordpress

WORDPRESS_DB_NAME:wordpressvolumes:db_data:

{}注释:两个服务:

db和wordpress.db服务镜像:

mysql:5.7数据卷db_datawordpress服务依赖于db镜像:

wordpress:latest暴露端口:

8000在yml中定义服务使用docker-compose命令构建镜像。[root@host1

my_wordpress]#docker-composeup

-dPullingdb

(mysql:5.7)

…5.7:

Pullingfrom

library/mysql……Digest:sha256:b82c292ca0e37e86bbe2a0d4469388ce78504da8332af171cdcff3f157c791e6Status:

Downloaded

newer

imageforwordpress:latestCreating

my_wordpress_db_1

…doneCreating

my_wordpress_wordpress_1

…done构建项目

测试•

在Web浏览器中输入宿主机的ip及暴露的端口号,

打开WordPress。•

关闭和清理[root@host1

my_wordpress]#docker-composedown

--volumesStopping

my_wordpress_wordpress_1

…doneStopping

my_wordpress_db_1

…doneRemoving

my_wordpress_wordpress_1

…doneRemoving

my_wordpress_db_1

…doneRemoving

network

my_wordpress_defaultRemovingvolume

my_wordpress_db_data关闭和清理环境《Docker容器技术与应用》下期见!部署并访问wordpress应用

实操练习

任务2:编写Compose文件02能说出Compose文件的结构和格式能叙述服务、网络和卷定义的基本语法编写Compose文件能够编写Compose文件

YAML文件格式YAML语法特点•大小写敏感。•

使用缩进表示层级关系。•缩进只能使用空格,不能使用TAB,不要求空格个数,但相同层级应当左对齐。•使用符号“#”表示注释,YAML中只有行注释。•

字符串可以不用引号标注。•每个冒号与它后面所跟的参数之间都需要有一个空格。•

Compose文件使用缩进结构表示层次关系。•

Compose文件可以包含4节:

version、

services、

networks和volumes。•version节是必须指定的,而且总是位于文件的第一行,没有任何下级节点。它定义

了Compose文件格式的版本。建议使用最新版本的格式。•

services、

networks和volumes节分别定义服务、网络和卷(存储)资源配置,都

由下级节点具体定义。Compose文件结构

服务定义在services节中定义若干服务,每个服务实际上是一个容器,需要基于镜像运行。每个Compose文件必须指定image或build键提供镜像,其他键是可选的。•imageimage键用于指定启动容器的镜像,可以是镜像名称或镜像ID。services:web:image:

nginx在services标签下的web为第二级标签,标签名可由用户自定义,它也是服务名称。image可以指定服务的镜像名称或镜像ID,如果镜像在本地不存在,则Compose会尝试获取这个镜像。

服务定义build标签用于指定Dockerfile所在文件夹的路径。该值可以是一个路径,也可以是一个对象。

Compose会利用它自动构建镜像,

并使用构建的镜像启动容器。build:

/path/to/build/dir可以设置上下文根目录,并以该目录指定Dockerfile。build:context:

../dockerfile:

path/of/Dockerfileargs:buildno:

1注:

arg标签可以在构建过程中指定环境变量,并在构建成功后取消。

服务定义container_name指定容器名称。默认将会使用`项目名称_服务名称_序号`这样的格式。container_name:docker-web-container注意:指定容器名称后,该服务将无法进行扩展(scale),

因为

Docker不允许多个容器具有相同的名称。

服务定义•depends_on该键定义服务之间的依赖,解决容器的依赖、启动先后的问题。version:

'3'services:web:build:

.depends_on:-

db-

redisredis:image:

redisdb:image:

postgres

服务定义•

environment设置环境变量。可以使用数组或字典两种格式。environment:RACK_ENV:developmentSESSION_SECRET:environment:-

RACK_ENV=development-SESSION_SECRET

服务定义•ports暴露端口信息。使用宿主端口:

容器端口`(HOST:CONTAINER)`格式,**或者仅仅指定容器的端口**(宿主将会随机选择端口)都可以。ports:-

"3000"-

"8000:8000"-

"49100:22"-

":8001:8001“注意:当使用`HOST:CONTAINER`格式来映射端口时,如果你使用的容器端口小于60并且没放到引号里,可能会得到错误结果,因为`YAML`会自动解析`xx:yy`这种数字格式为60进制。

为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。

服务定义•networks配置容器连接的网络。version:

"3"services:some-service:networks:-some-network-other-networknetworks:some-network:other-network:

服务定义•

volumes设置数据卷挂载路径。volumes:#只是指定一个路径,

Docker会自动在创建一个数据卷(这个路径是容器内部的)。-/var/lib/mysql#使用绝对路径挂载数据卷-/opt/data:/var/lib/mysql#以Compose配置文件为中心的相对路径作为数据卷挂载到容器。-./cache:/tmp/cache#使用用户的相对路径(~/表示的目录是/home/<用户目录>/或者/root/)。-

~/configs:/etc/configs/:ro

#

已经存在的命名的数据卷。-datavolume:/var/lib/mysql

卷定义卷定义是要单独创建命名卷,这些卷能在多个服务之间重用,可以通过Docker命令行或API查找和查看。version:“3.7”services:db:image:

dbvolumes:-data-volume:/var/lib/dbbackup:image:

backup-servicevolumes:-data-volume:/var/lib/backup/datavolumes:data-volume3、测试登录数据库。2、构建并运行应用程序。

项目实训1、创建项目目录并构建Compose文件定义服务。部署MYSQL8.0服务器。实训内容实训目的version:

'3.7'services:mysql:image:mysql:8container_name:mysql8ports:-

3306:3306environment:-MYSQL_ROOT_PASSWORD=rootvolumes:-/etc/localtime:/etc/localtime:ro-volumes.mysql8-data:/var/lib/mysqlvolumes:volumes.mysql8-data:null单个服务(容器)的部署如果涉及的选项和参数比较多,则采用

Compose文件定义更为方便。编写单个服务的Compose文件[root@host1

mysql8]#docker-compose

up

-dCreating

network

"mysql8_default"withthedefaultdriverCreatingvolume

"mysql8_mysql8-data"withdefaultdriver

Creating

mysql8

…done进入容器后既可登录mysql数据库。[root@docker-zq

mysql]#docker

exec

-it

mysql8

bashroot@dcd086f54c86:/#

mysql

-u

root

-p编写好Compose文件之后,可以执行docker-compose

config命令验证和查看。•

执行命令启动该服务。编写单个服务的Compose文件#创建网络#创建卷•

执行以下操作关闭并清理服务。[root@host1

mysql8]#docker-composedown

--volumes

Stopping

mysql8

…doneRemoving

mysql8…

doneRemoving

network

mysql8_defaultRemovingvolume

mysql8_mysql8-data编写单个服务的Compose文件编写一个docker-compose.yml文件,使用DockerCompose部署和

web服务。案例编写多个服务的Compose文件—操作步骤[root@docker1web-db]#vimdocker-compose.ymlversion:

'3'services:db:image:

mysql:8.0volumes:-/var/lib/docker/disk01:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD:

passwordMYSQL_USER:zhangMYSQL_PASSWORD:

passwordMYSQL_DATABASE:zhang_dbports:-

"3306:3306"web:image:

httpd:latestports:-

"8080:80"

volumes:-/var/lib/docker/disk02:/usr/local/apache2/htdocs《Docker容器技术与应用》下期见!部署MySQL数据库

实操练习

03

任务3:使用DockerCompose部署和管理应用程序了解DockerCompose的常用命令掌握DockerCompose构建、部署和管理应用程

序的全套流程使用DockerCompose部署和管理应用程序--任务说明主要选项--compress:使用gzip压缩构建上下文。--force-rm

:删除构建过程中的临时容器。--no-cache:构建镜像的过程中不使用缓存,这会延长构建过程。--pull:总是尝试拉取最新版本的镜像。--build-arg

key=val:为服务设置构建时变量。语法格式docker-compose

build

[选项]

[--build-arg键

=值…]

[服务…]docker-composebuild•

语法格式docker-compose

up

[选项]

[--scale服务

=数值…]

[服务…]•

主要选项

-d(

--detach)

:表示分离模式,即在后台运行服务容器,会输出新容器的名称。该选项与--abort-on-container-exit选项不兼容。

--quiet-pull:拉取镜像时不会输出进程信息。

--no-deps:不启动所连接的服务。

--force-recreate:强制重新创建容器,即使其配置和镜像没有改变。

--no-recreate:如果容器已经存在,则不重新创建,与--force-recreate和-V选项不兼容。docker-composeup•

主要选项

--always-recreate-deps:总是重新创建所依赖的容器,与--no-recreate选项不兼容。

--no-build:不构建缺失的镜像。

--no-start:在创建服务后不启动它们。

--build:在启动容器之前构建镜像。

--abort-on-container-exit:只要有容器停止就停止所有的容器。它与-d选项不兼容。

-t(

--timeout):设置停止连接的容器或已经运行的容器所等待的超时时间,单位是秒。

--remove-orphans:移除Compose文件中未定义的服务容器。

.

--exit-code-from服务:为指定服务的容器返回退出码。

--scale服务

=数值:设置服务的实例(副本)数。docker-composeup用于停止容器并删除由docker-compose

up命令启动的容器、网络、卷和镜像。•

默认情况下,只有以下对象会被同时删除。

Compose文件中定义的服务的容器。

Compose文件中networks节所定义的网络。

所使用的默认网络。•默认外部定义的网络和卷不会被删除,使用

--volumes选项可以删除。•使用--remove-orphans选项可删除未在Compose文件中定义的服务容器。

温馨提示

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

最新文档

评论

0/150

提交评论