前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >From Docker to Kubernetes(三)- Docker Volume&Compose

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

作者头像
RiemannHypothesis
发布2022-08-19 16:33:30
3880
发布2022-08-19 16:33:30
举报
文章被收录于专栏:ElixirElixir

一、Docker数据持久化

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

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

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

Volume数据卷

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

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

代码语言:javascript
复制
vagrant plugin install vagrant-scp

数据持久化DataVolume

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

代码语言:javascript
复制
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文件内容

代码语言:javascript
复制
# 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文件内容

代码语言:javascript
复制
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">


  <title>hello</title>


</head>


<body>
  <h1>Hello Docker! </h1>
</body>
</html>

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

代码语言:javascript
复制
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容器中生效

代码语言:javascript
复制
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

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

就类似命令行

代码语言:javascript
复制
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

代码语言:javascript
复制
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,设置容器的数量,水平扩展

代码语言:javascript
复制
# 将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
本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Docker数据持久化
    • Volume数据卷
      • 数据持久化DataVolume
        • 数据持久化Bind Mounting
          • Docker+Bind Mount
          • 二、Docker Compose
            • Docker Compose是一个工具
              • Docker Compose的安装和基本使用
                • 水平扩展和负载均衡
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                http://www.vxiaotou.com