docker-compose 容器编排

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文主要介绍docker-compose:1.配置文件详解;2.常用操作命令;3.容器编排实践;

前言

在上一篇《Dockerfile定制镜像》中,我们介绍了如何利用一个配置文件,提前添加好文件、安装好工具,并运行一些命令,构建自己的镜像,从而实现自定义功能。本篇主要介绍如何利用docker-compose实现容器编排。

一、Docker-Compose介绍

1.简介

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker多容器编排管理系统。使用 Docker-compose,可以用一个 YAML 文件定义一组要启动的容器,以及容器运行时的属性。 Docker-Compose的工程配置文件默认为docker-compose.yml

项目地址:https://github.com/docker/compose

2.Docker-Compose前世今生

Docker Compose 的前身是 Fig,现阶段 Docker Compose 是 Docker 官方的单机多容器管理系统(不能跨机器),它本质是一个Python 脚本,它通过解析用户编写的 yaml 文件,调用 Docker API 实现动态的创建和管理多个容器。

二、Docker-Compose安装

1.使用curl命令安装(推荐)

# 下载 Docker Compose 的安装包sudocurl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)"-o /usr/local/bin/docker-compose
# 修改 Docker Compose 执行权限sudochmod+x /usr/local/bin/docker-compose

2.使用PIP安装

需提前安装Python环境

pip install -U docker-compose

三、Docker-Compose常用指令组成

Docker Compose 文件主要分为三部分: services(服务)、networks(网络) 和 volumes(数据卷)

1.常用指令说明

指令

说明

image

镜像名称,基于哪个镜像,使用现有的镜像

build

使用自定义的镜像,若当前docker-compose.yml和Dockerfile在同一路径下,则build的键值用 . 也可以,若不在同一路径下,或Dockerfile文件不是用的默认名称Dockerfile,则需指定Dockerfile的路径

command

启动镜像时用的命令,类似于Dockerfile中的CMD指令

container_name

容器名称

depends_on

指定服务启动顺序,如存在多个服务nginx、db、Jenkins时,则在Jenkins服务下定义depends_on: db,会优先启动db服务

links

解决容器之间的链接,使用db可以链接到db服务,使用别名test_db也可以

ports

指定端口,端口映射时使用,类似于docker命令中的-p参数

volumes

数据挂载时使用,类似于docker命令中的-v参数

2.docker-compose.yml示例

支持四种命名格式:docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml

下面就以前面分享过的《开源云真机平台-Sonic应用实践》中的sonic服务的docker-compose.yml为例,一起来看看上述指令的用法:

version: '3'# 版本services:  # 服务,  sonic-server-eureka:  # 容器名(sonic微服务注册中心)    image: "registry.cn-hangzhou.aliyuncs.com/sonic-cloud/sonic-server-eureka:v1.5.0-release"    hostname: sonic-server-eureka
    environment:  # 环境,读取配置文件中eureka的用户名密码等- SONIC_EUREKA_USERNAME
- SONIC_EUREKA_PASSWORD
- SONIC_EUREKA_PORT
-SONIC_EUREKA_HOST=sonic-server-eureka
    volumes:  # 目录映射- ./logs/:/logs/
    networks:  # 网络名- sonic-network
    ports:  # 端口映射-"${SONIC_EUREKA_PORT}:${SONIC_EUREKA_PORT}"  sonic-server-gateway:  # 容器名(sonic微服务网关)    image: "registry.cn-hangzhou.aliyuncs.com/sonic-cloud/sonic-server-gateway:v1.5.0-release"    hostname: sonic-server-gateway
    environment:  # 同样也是一些环境配置,用于和eureka容器通信- SONIC_EUREKA_USERNAME
- SONIC_EUREKA_PASSWORD
- SONIC_EUREKA_PORT
-SONIC_EUREKA_HOST=sonic-server-eureka
- SECRET_KEY
- EXPIRE_DAY
    volumes:
- ./logs/:/logs/
    depends_on:  # 指定服务启动顺序,先启动sonic-server-eureka容器- sonic-server-eureka
    networks:  # 网络,各个容器必须处于同一网络下才能相互通信- sonic-network
restart: on-failure
  sonic-server-controller:  # 容器名    image: "registry.cn-hangzhou.aliyuncs.com/sonic-cloud/sonic-server-controller:v1.5.0-release"    environment:  # 环境配置,读取数据库、账号等配置- SONIC_EUREKA_USERNAME
- SONIC_EUREKA_PASSWORD
- SONIC_EUREKA_PORT
-SONIC_EUREKA_HOST=sonic-server-eureka
- MYSQL_HOST
- MYSQL_PORT
- MYSQL_DATABASE
- MYSQL_USERNAME
- MYSQL_PASSWORD
- SONIC_SERVER_HOST
- SONIC_SERVER_PORT
- SECRET_KEY
- EXPIRE_DAY
- REGISTER_ENABLE
- NORMAL_USER_ENABLE
- LDAP_USER_ENABLE
- LDAP_USER_ID
- LDAP_BASE_DN
- LDAP_BASE
- LDAP_USERNAME
- LDAP_PASSWORD
- LDAP_URL
    networks:
- sonic-network
    volumes:
- ./logs/:/logs/
    depends_on:
- sonic-server-eureka
restart: on-failure
  sonic-server-folder:
    image: "registry.cn-hangzhou.aliyuncs.com/sonic-cloud/sonic-server-folder:v1.5.0-release"    environment:
- SONIC_EUREKA_USERNAME

通过上述配置我们能够发现,docker-compose.yml这个配置文件,就是由前面我们介绍的一个个指令按照一定的格式、顺序、规则进行排列、相结合组成,从而实现不同容器的排编,相互通信,进而实现强大的功能。

四、Docker-Compose操作命令

用法:

Define and run multi-container applications with Docker.

Usage:

 docker-compose [-f <arg>...] [--profile <name>...] [options] [--] [COMMAND] [ARGS...]

 docker-compose -h|--help

1.docker-compose操作命令

官方所有指令

常用指令

指令

说明

up

启动容器编排(前提是当前目录存在docker-compose.yml文件)

down

删除容器编排,适用于docker-compose.yml文件发生变更、或安装出错时的卸载重装

ps

查看所有服务状态,类似于docker ps -a

start

启动服务

stop

指定服务启动顺序,如存在多个服务nginx、db、Jenkins时,则在Jenkins服务下定义depends_on: db,会优先启动db服务

logs

查看docker-compose操作日志

2.docker-compose操作参数

官方所有选项

常用选项

参数

说明

-f

指定yml文件启动,当前目录下不存在docker-compose.yml文件时使用

-d

后台运行

3.容器编排操作实践

启动容器编排-up

docker-compose up # 启动容器(前提是当前目录存在docker-compose.yml文件)docker-compose -f docker-compose.yml up -d# 指定yml文件启动并设置后台运行

启动容器编排会经历以下过程:创建网络>>创建并运行各个容器>>各个容器之间建立连接

在使用"docker-compose up"和"docker-compose down"命令时,若当前目录下不存在以下四种中的任一格式文件:docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml,或也未使用-f参数指定其他文件时,会报错提示:

删除容器编排

docker-compose down

删除容器编排:停止各个容器>>移除各个容器>>删除容器创建的网络

查看容器状态

docker-compose ps# 查看所有服务状态,类似于docker ps -a

启动服务

# docker-compose start  启动所有服务# docker-compose start [SERVICE...]    启动指定服务docker-compose start

停止服务

# docker-compose stop    停止所有服务# docker-compose stop [options] [SERVICE...]    停止指定服务docker-compose stop

与down命令不同,stop只会停止相关容器,但不会删除相关容器

查看日志

docker-compose logs

五、利用Docker Compose搭建wordpress博客系统

前面对一些常用指令作了说明,以及通过sonic前后台服务的docker-compose.yml案例对容器编排作了简单介绍,下面我们结合一个docker-compose搭建WordPress的案例来搭建我们自己的容器编排服务,官方配置文件内容如下:

1.配置docker-compose.yml

官网地址:https://docs.docker.com/compose/wordpress/
services:
  db:
# We use a mariadb image which supports both amd64 & arm64 architecture    image: mariadb:10.6.4-focal
# If you really want to use MySQL, uncomment the following line#image: mysql:8.0.27    command: '--default-authentication-plugin=mysql_native_password'    volumes:
- db_data:/var/lib/mysql
restart: always
    environment:
-MYSQL_ROOT_PASSWORD=somewordpress
-MYSQL_DATABASE=wordpress
-MYSQL_USER=wordpress
-MYSQL_PASSWORD=wordpress
    expose:
-3306-33060  wordpress:
    image: wordpress:latest
    volumes:
- wp_data:/var/www/html
    ports:
-88:80
restart: always
    environment:
-WORDPRESS_DB_HOST=db
-WORDPRESS_DB_USER=wordpress
-WORDPRESS_DB_PASSWORD=wordpress
-WORDPRESS_DB_NAME=wordpress
volumes:
  db_data:
  wp_data:

【注意】yml文件中冒号后面要带空格,严格规范格式

2.查看容器状态

docker-compose ps-a

3.前端访问

启动docker-compose,各个容器处于up状态,此时就可以访问前端页面,http://192.168.1.123:88/,会先进行安装配置,如:设置数据库、站点取名

个人博客主页如下:

因为我是内网服务器,只能在局域网内访问,公网无法访问。如果你有一台带有公网的云服务器,如阿里云,那么妥妥的就可以搭建自己的个人网站了,这种对服务器要求不高,入门级的就可以。现在的云服务器都挺便宜,一年才几十块钱,像阿里云服务器个人用户可以免费体验一个月。关于WordPress详细搭建方法可以参考我前面介绍的《用2核2G的入门级云服务器搭建WordPress博客系统

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
231 77
|
2天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
39 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
14天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
86 35
|
1天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
25 17
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
13天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
1天前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
37 12
|
19天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
95 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
31 10
|
16天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
86 19

相关产品

  • 容器服务Kubernetes版