当前位置:首页 > 技术分析 > 正文内容

docker从入门到实战系列6-docker-compose容器编排

ruisui881周前 (04-15)技术分析16

一、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 的安装包
sudo curl -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 执行权限
sudo chmod +x /usr/local/bin/docker-compose

2.使用PIP安装

需提前安装Python环境

pip install -U docker-compose

三、Docker-Compose常用指令组成

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

1.常用指令说明

指令

说明

image

镜像名称,基于哪个镜像,使用现有的镜像,如果本地不存在该镜像,会自动拉去镜像。还有一种情况是指定了build,这种情况下会使用指定选项构建镜像并给镜像打上指定标签。

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参数

expose

暴露指定端口,但不映射到宿主机,只被连接的服务访问,只能指定内部端口。

2.docker-compose.yml示例

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

sonic私有云真机平台:
http://192.168.1.20:3000/Index/Devices

下面就以前面分享过的《开源云真机平台-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 ...] [--profile ...] [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.容器编排操作实践

以docker私有化镜像仓库harbor为示例(关于“harbor”后续章节中重点介绍,本次主要演示容器编排的实践过程),harbor压缩包解压后如下:

启动容器编排

# 启动容器编排
# 前提是当前目录存在docker-compose.yml、docker-compose.yaml、compose.yml、compose.yaml四种名称文件之一
docker-compose up
# 指定yml文件启动并设置后台运行
docker-compose -f docker-compose.yml up -d

启动容器编排:创建网络>>创建并运行各个容器>>各个容器之间建立连接

在使用"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/

version: "3.3"
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
    # 指定使用本地已有的MySQL镜像
    #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文件中冒号后面要带空格,严格规范格式
  • 上述配置内容是可以自由修改的,并不一定要严格按照官方配置的来,比如我本地已有MySQL镜像,那就直接通过image指令指定MySQL镜像即可,这样在创建容器过程中就会使用本地镜像、省得再去重新下载;
  • 另外如果本地已有MySQL数据库容器,也可以在配置文件中进行指定(不过这个操作起来还是有一定难度,涉及到docker network相关知识,后续会介绍);

2.启动容器编排

启动容器编排:

docker-compose up -d

查看容器状态:

docker-compose ps -a

3.前端访问

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

个人博客主页如下:

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

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3494.html

分享给朋友:

“docker从入门到实战系列6-docker-compose容器编排” 的相关文章

Beta版Linux Mint“Xia”发行版22.1发布

IT之家 12 月 13 日消息,Beta 版 Linux Mint“Xia” 22.1 昨日(12 月 12 日)发布,新版本基于 Ubuntu 24.04,内核版本为 Linux 6.8,长期支持将持续到 2029 年,为用户提供可靠稳定的使用体验。新版本在软件包管理方面,主要弃用了传统的 ap...

Vue.js 组件通信的 3 大妙招

在 Vue.js 中,组件化是其核心概念之一,允许你将复杂的界面拆分成多个独立的、可复用的组件。在构建大型应用时,如何高效地在组件之间传递数据和触发事件是非常重要的。Vue.js 提供了多种方式来处理组件间的通信,下面是最常用的 3 种方式:1.父子组件通信:通过 Props 和 Events在 V...

理解virt、res、shr之间的关系(linux系统篇)

前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过top命令查看进程占用了多少内存。这里我们可以看到VIRT、RES和SHR三个重要的指标,他们分别代表什么意思呢?这是本文需要跟大家一起探讨的问题。...

摄影后期必看 | PS插件camera raw 16.4教程 | 范围蒙版

范围蒙版Camera Raw 【蒙版】模块中提供了三个范围蒙版工具,可以通过特定的范围来创建蒙版。此次新增的【范围蒙版】大大加强了acr插件对局部调整的能力。点击下拉小箭头可以看到【颜色范围】,可用于快速选择想要编辑的颜色。快捷键:Shift + C【明亮度范围】,可用于快速选择想要调整的明亮度。快...

多项修正 尼康D4s发布最新1.10版固件

尼康公司与2014年8月27日发布了D4s的最新固件,固件版本号为C:1.10。这次固件升级,主要解决了一些BUG,并且对拍摄菜单与相机操作做了一定调整。下面是本次新固件的具体信息:尼康发布D4s最新C固件 1.10版对C固件升级到1.10版所作的修改:当选定运动VR模式并换上 AF-S 尼克尔 4...

USB电池充电基础:应急指南

USB为便携设备供电与其串行通信功能一样,已经成为一种标准应用。如今,USB 供电已经扩展到电池充电、交流适配器及其它供电形式的应用。应用的普及带来的一个显著效果是便携设备的充电和供电可以互换插头和适配器。因此,相对于过去每种装置都采用专用适配器的架构相比,目前的解决方案允许采用多种电源进行充电。毋...