From Docker to Kubernetes(三)- Docker Volume&Compose

简介: From Docker to Kubernetes(三)- Docker Volume&Compose

一、Docker数据持久化

Container中的数据仅限在Contrainer中存储,对于MySQL这种容器应用,需要把数据保存在本地,这就需要用到容器的数据持久化

Docker数据持久化的方案有两种

  • 基于本地文件系统的Volume,可以在执docker create 或者docker run命令时,通过-v参数将主机的目录作为容器的数据卷。将容器产生的数据保存在宿主机的文件系统中
  • 基于plugin的Volume,支持第三方存储方案,如aws

image.png

Volume数据卷

Volume的类型有两种,一种是受管理的data volume,由docker创建;另外一种是绑定挂载的volume,即由用户指定文件系统中已存在的具体目录

首先安装一个vagrant插件 vagrant-scp,用于将宿主机的文件拷贝的vagrant管理的虚拟机上

vagrant plugin install vagrant-scp
复制代码

数据持久化DataVolume

创建mysql容器,验证数据持久化Data Volume

docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
docker ps
# 查看volume 列表
docker volume ls
# 查看volume详情,Mountpoint表示容器数据存储在本地的位置
docker volume inspect <VOLUME NAME>
docker run -d --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
docker volume ls
docker volume inpsect <VOLUME NAME>
# 停止并删除容器
docker stop mysql1
docker stop mys1l2
docker rm mysql1
docker rm mysql2
# 查看volume列表
docker volume ls
# 删除docker volume
# docker volume rm <VOLUME NAME>
# 创建容器时指定volume, -v指定volume名字 ,:后面是存储地址
docker run -d --name mysql1 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
# 进入容器,进入mysql,创建一个表docker
docker exec -it mysql1 /bin/bash
mysql -u root -p
create database docker
exit
exit
docker stop mysql1
docker rm mysql1
# 新建一个容器mysql2,使用之前的volume
docker run -d --name mysql2 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
docker exec -it mysql2 /bin/bash
mysql -u root -p
# 包含之前创建的docker表
show databases;
复制代码

数据持久化Bind Mounting

指定本地一个目录和容器中的一个目录一一对应,是同步的,做了映射,一个做了修改另外一个也会自动作相应的修改

Dockerfile文件内容

# this same shows how we can extend/change an existing official image from Docker Hub
FROM nginx:latest
# highly recommend you always pin versions for anything beyond dev/learn
WORKDIR /usr/share/nginx/html
# change working directory to root of nginx webhost
# using WORKDIR is prefered to using 'RUN cd /some/path'
COPY index.html index.html
# I don't have to specify EXPOSE or CMD because they're in my FROM
复制代码

index.html文件内容

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>hello</title>
</head>
<body>
  <h1>Hello Docker! </h1>
</body>
</html>
复制代码

启动一个nginx容器,将vloume挂载到一个宿主机中已存在的文件系统中,在本地修改这个文件或者增加文件,从docker中查看是否也出现相应的修改或者新增加的文件

docker build -t jingnanjia/my-nginx .
# -v 表示使用目录映射 $(pwd)表示当前(宿主机)地址,/usr/share/nginx/html是容器的地址
docker run -d --name web -p 80:80 -v $(pwd):/usr/share/nginx/html jingnanjia/my-nginx
docker exec -it web /bin/bash
# 查看文件中的文件,与对应宿主机当前目录下的文件一致
ls
# 创建新文件
touch test.txt
exit
# 查看宿主机当前文件夹下是否出现了容器中创建的test.txt文件
ll
复制代码

Docker+Bind Mount

Bind Mount 可以实时修改文件,实时在Docker容器中生效

docker build -t jingnanjia/flask-skeleton .
# 如果报错没有权限,要先把文件设置可执行权限,重新build镜像,在创建容器
docker run -d --name flask-skeleton -p 80:5000 jingnanjia/flask-skeleton
# 停止并删除容器
docker stop flask-skeleton
docker rm flask-skeleton
# 重新创建一个容器,使用BindMount
docker run -d --name flask -p 80:5000 -v $(pwd):/skeleton jingnanjia/flask-skeleton
# 修改宿主机下文件,docker容器中映射的文件也会自动改变
复制代码

二、Docker Compose

Docker Compose是一个工具

  • 可以批量操作容器
  • 可以通过一个yml文件定义多个容器的docker应用
  • 可以通过一条命令使用指定的yml文件中的定义来创建或者管理多个容器

Docker Compose解决了多容器创建和管理的问题。

Docker Compose中三大概念 Services:Docker Compose中的service就是之一个容器,容器即服务,这个容器可以是从docker hub中拉取到的image创建的,也可以是本地Dockerfile创建的 Service的启动类似docker run,可以指定network和volume

如

services:
    db: 
       image: mysql:8.0.19
       volumes:
           - "db-data:/var/lib/mysql/data"
       networks:
           - back-tier
复制代码

就类似命令行

docker run -d --network back-tier -v db-data:/var/lib/mysql/data mysql:8.0.19
复制代码

Docker Compose的安装和基本使用

Linux环境docker-compose安装,Mac,Windows安装docker时就已经安装好了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
sudo chmod +x /usr/local/bin/docker-compose
# 也可使用docker compose
docker-compose --version
# 安装应用
cd wordpress
# 可以直接使用docker compose up,添加-d参数,不显示日志,后台启动
docker compose -f docker-compose.yml up
# 查看docker-compose.yml文件中容器的启动情况
docker compose ps
# 停止yml文件中容器
docker compose stop
# 停止,删除yml文件中的容器,存储,网络
docker compose down
docker compose start
# 查看yml文件的镜像
docker-compose images
# 进入yml文件中mysql service,以bash命令打开,即进入容器中
docker compose exec mysql bas
复制代码

水平扩展和负载均衡

scale 命令,Set number of containers for a service,设置容器的数量,水平扩展

# 将web容器扩展为3个,-d表示后台启动
docker compose up --scale web=3 -d
docker compose ps
cd ../lb-scale
docker compose up -d
curl 127.0.0.1:8080
docker compose up --scale web=3 -d
# 缩减容器数量
docker compose up --scale web=1 -d



相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1481 108
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
2708 10
|
人工智能 前端开发 Docker
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
在 AI 智能体开发中,开发者常面临本地调试与云端部署的矛盾。本文介绍如何通过 Docker Compose 与 Docker Offload 解决这一难题,实现从本地快速迭代到云端高效扩容的全流程。内容涵盖多服务协同、容器化配置、GPU 支持及实战案例,助你构建高效、一致的 AI 智能体开发环境。
1097 2
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
982 115
|
运维 数据可视化 开发者
2025年 三个 Docker Compose 可视化管理器测评
本文对比了三款主流的 Docker Compose 可视化管理工具。随着 Docker 的普及,Compose 已成为多容器应用部署的标准,但 YAML 配置复杂、协作困难等问题也日益突出。三款工具各有侧重:Docker Desktop 适合个人本地开发,Portainer 适合小团队运维管理,而 Websoft9 则通过 GitOps 实现了强大的版本控制与团队协作能力。文章从可视化编辑、部署便捷性、版本管理等方面进行评测,为不同使用场景提供了推荐方案,展望了未来 Compose 管理向 GitOps 深度融合的发展趋势。
1600 1
2025年 三个 Docker Compose 可视化管理器测评
|
存储 Kubernetes 监控
Docker与Kubernetes集成挑战及方案
面对这些挑战,并不存在一键解决方案。如同搭建灌溉系统需要考虑多种因素,集成Docker与Kubernetes也需要深思熟虑的规划、相当的技术知识和不断的调试。只有这样,才能建立起一个稳定、健康、高效的Docker-Kubernetes生态,让你的应用像花园中的植物一样繁荣生长。
520 63
|
数据可视化 开发工具 git
GitOps 驱动的 Docker Compose 可视工具化来了,图形化编辑器上玩转容器编排
Docker Compose 简化了多容器应用的部署,但随着应用复杂度上升,文本配置方式逐渐暴露出维护难、协作效率低等问题。基于 GitOps 的可视化 Docker Compose 工具应运而生,通过图形界面降低使用门槛,提升配置准确性和团队协作效率。结合 GitOps,实现配置变更的版本追踪、自动化部署与环境一致性,为多容器应用管理提供高效、安全的解决方案。
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
938 11