小知识:docker compose快速开始超详细教程

docker compose快速开始

一、什么是docker compose

官方:https://docs.docker.com/compose/

docker-compose是基于docker的开源项目,托管于github上,由python实现,调用 docker服务的API负责实现对docker容器集群的快速编排,即通过一个单独的yaml文件,来定义一组相关的容器来为一个项目服务。

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。

快速编排:站在项目角度将一组相关联容器整合在一起,对这组容器按照指定顺序进行启动。

Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

这里涉及2个重要的概念: 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目由 Python编写,实现上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持 Docker APl,就可以在其上利用Compose来进行编排管理。

1. Compose 特性

在单独的主机上提供多个相互隔离的环境

Compose 用项目名称来隔离不同的环境,在没有设置项目名称的情况下,Compose 会用 docker-compose.yml 文件所在根目录名称做为项目名称。

每个项目有自己的 Docker network,不同项目的 Docker network 彼此不通。

在单个主机上建立多个隔离环境,Compose 使用项目名称将环境彼此隔离。您可以在多个不同的上下文中使用此项目名称。默认项目名称是项目目录的基本名称。您可以使用-p 命令行选项或 COMPOSE_PROJECT_NAME 环境变量设置自定义项目名称 。默认项目目录是 Compose 文件的基本目录。可以使用–project-directory 命令行选项自定义项目目录。

在创建容器时,自动保存 volume 数据

Compose 在启动容器时,会自动保存 volume。当我们用 docker-compose down 删掉容器后,再用 docker-compose up 启动时,之前 volume 会自动挂载到新建的容器中。

只重建有改动的容器

当 docker-compose.yml 中的某个容器有改动时,用 Compose 重启项目,改动的容器会重新生成,没有改动的容器则保持不变。

仅重新创建已更改的容器,当您重新启动未更改的服务时,Compose 会使用现有容器。

可以使用变量

变量在环境之间组合重复使用.

Compose 支持在 docker-compose.yml 中使用变量,可以通过设置变量来配合不同的使用环境。

2. 使用 Compose 步骤和思路

使用 Dockerfile 定义您的应用程序的环境 使用 docker-compose.yml 定义组成您的应用程序的服务 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 运行docker compose up启动并运行程序 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

二、docker-compose常用命令

docker-compose # 拉取镜像

docker-compose up -d nginx # 运行nginx容器

docker-compose up -d # 运行所有容器

docker-compose ps # 查看容器运行状态

docker-compose down # 停止容器和容器网络

docker-compose rm nginx # 删除nginx容器

docker-compose run yaml中定义的服务名 命令 #在指定服务上运行一个命令

默认情况下,docker-compose up启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。当通过Ctrl+c停止命令时,所有容器将会停止。

如果希望在后台启动并运行所有的容器,使用docker-compose up -d。

总结: 批量启动时, docker-compose up -d 比较常用!

三、docker compose 安装

只有 Linux 平台上在安装docker时没有安装docker-compose,windows、macos平台安装docker时会自动安装docker-compose。

?
1
2
apt install python3-pip
sudo pip install -U docker-compose

四、docker-compose.yml 基础

【推荐】详解docker-compose.yml文件常用模版命令

参考URL:http://www.tuohang.net/article/208231.html

Docker Compose配置文件docker-compose.yml是Docker Compose的核心,用于定义服务、网络和数据卷。格式为YAML,默认路径为./docker-compose.yml,可以使用.yml或.yaml扩展名,目前Compose配置文件格式的最新版本为V3。Compose配置文件中涉及的配置项也比较多,但大部分配置项的含义跟docker run命令相关选项是类似的。

services

一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地的Dockerfile build出来的image来创建。

service的启动类似docker run,我们可以给其指定network和volme,所以可以给service指定network和volume的引用 networks volumes

官方示例:https://docs.docker.com/compose/compose-file/

?
1
2
3
4
5
6
7
8
9
10
11
12
13
(External user) –> 443 [frontend network]
|
+——————–+
|  frontend service  |…ro…<HTTP configuration>
|      “webapp”      |…ro…<server certificate> #secured
+——————–+
|
[backend network]
|
+——————–+
|  backend service   |  r+w   ___________________
|     “database”     |=======( persistent volume )
+——————–+        \_________________/

示例应用程序由以下部分组成:

2 个服务,由 Docker 镜像支持:webapp和database 1 个密钥(HTTPS 证书),注入前端 1个配置(HTTP),注入前端 1 个持久卷,附加到后端 2 个网络
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
services:
frontend:
image: awesome/webapp
ports:
– “443:8043”
networks:
– front-tier
– back-tier
configs:
– httpd-config
secrets:
– server-certificate
backend:
image: awesome/database
volumes:
– db-data:/etc/data
networks:
– back-tier
volumes:
db-data:
driver: flocker
driver_opts:
size: “10GiB”
configs:
httpd-config:
external: true
secrets:
server-certificate:
external: true
networks:
# The presence of these objects is sufficient to define them
front-tier: {}
back-tier: {}

此示例说明了volumes、configs和secrets之间的区别。虽然它们都作为挂载的文件或目录暴露给服务容器,但只有一个卷可以配置为读写访问。secrets和configs是只读的。volumes配置允许您选择卷驱动程序并传递驱动程序选项以根据实际基础架构调整卷管理。Configs 和 Secrets 依赖于平台服务,并且被声明external为它们不作为应用程序生命周期的一部分进行管理:Compose 实现将使用特定于平台的查找机制来检索运行时值。

五、工作常用技巧

docker-compose或docker run 启动容器后就退出

问题背景:

启动容器:docker-compose up -d

查看容器运行情况:docker-compose ps

结果容器并没有运行,运行 docker-compose ps -a 命令发现,容器在启动后短时间内又停止了

问题描述总结:docker-compose 启动容器后就退出,查看日志没有报错。

问题分析:

Docker容器后台运行,就必须有一个前台进程.容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

docker 容器的生命周期是同容器中的前台进程相关的,如果容器内没有前台进程,容器就会自动停止。

Docker Compose解决方案:

方案一:自己启动一个前台进程tail -F anything

Docker Compose保持容器运行

要使容器在启动时保持运行docker-compose,请使用以下命令

command: tail -F anything

?
1
2
3
4
5
version: “3.8”
services:
web:
image: “centos-test:v5”
command: bash -c “/etc/init.d/xxx start && tail -f /var/log/meesage.log”

容器解决方案:

tail -F anything 或

docker run 加上这个开机重启参数:–restart always -d

方案二:在 docker-compose 中添加 tty: true 关键字

?
1
2
3
4
5
6
7
8
9
10
11
version: 3
services:
web:
container_name: node_web
build:
context: .
volumes:
– ./:/home/node/app
ports:
– 8888:8080
tty: true

tty: true 的作用是为容器分配一个伪终端,就相当于 docke run -t, 我的理解是这样就是把 /bin/bash 当做前台进程

docker-compose一个应用启动多个节点

我们目前的docker-compose 中的service容器中各自只有一个,通过scale可以去扩展service。

例如将web服务的数量变为三个:
?
1
docker-compose up –scale web=3 -d

1.docker-compose.yml配置

version: “3”

services:

web:

image: nginx:1.19.9-alpine

restart: always

ports:

80-81:80

2.启动服务

?
1
docker-compose up -d –scale web=2

3.查看应用状态

?
1
docker-compose ps

使用Docker-Compose,如何执行多个命令

scale参数官方说明: https://docs.docker.com/compose/reference/scale/

实战demo:

?
1
2
3
4
5
6
version: “3.8”
services:
web:
image: “centos-test:v1”
command: bash -c “/etc/init.d/xxx start && tail -f /var/log/message.log”
init: true

到此这篇关于docker compose快速开始的文章就介绍到这了,更多相关docker compose开始内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/inthat/article/details/124838982

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:什么是视频存储服务器?视频存储服务器如何选择呢?

2023-3-6 17:07:50

建站知识

小知识:Docker容器实战之镜像与容器的工作原理

2023-3-6 17:14:17

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索