docker学习笔记(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: docker学习笔记(二)

1.容器数据卷

什么是容器数据卷?

  • ·docker的理念回顾:

将应用和环境打包一个镜像!

数据?如果数据都在容器里,那么我们删除容器后,数据就会丢失! 需求:数据可以持久化

MYSQL,容器删除了,删库跑路! 需求:Mysql数据可以存储在本地!

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们的容器内的目录,挂载到linux上面!


  • 总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷

  • 方式1:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录 
#启动挂载
[root@iZ2zefiis08efdip3nlhu2Z home]# docker run -it -v /home/ceshi:/home centos /bin/bash
# 查看是否启动成功
[root@iZ2zefiis08efdip3nlhu2Z ceshi]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS             PORTS                    NAMES
53e9c84aff7b   centos                "/bin/bash"              3 minutes ago   Up 3 minutes                                vibrant_jepsen
421ea9e0d6df   portainer/portainer   "/portainer"             2 hours ago     Up About an hour   0.0.0.0:8088->9000/tcp   eloquent_pascal
016c9b95a02d   tomcat                "catalina.sh run"        2 weeks ago     Up 2 weeks         0.0.0.0:3355->8080/tcp   tomcat01
1442a7fbd27f   nginx                 "/docker-entrypoint.…"   2 weeks ago     Up 2 weeks         0.0.0.0:3344->80/tcp     nginx01
[root@iZ2zefiis08efdip3nlhu2Z ceshi]# docker inspect 53e9c84aff7b

注:出现以下,则挂载成功

  • 挂载测试1:主机和centos中,其中一个改变,另一个直接同步,即就是双向绑定
  • 挂载测试2:
    1.停止容器
    2.宿主机上修改文件
    3.启动容器
    4.容器内的数据依旧是同步的
  • 好处:我们以后修改只需要在本地修改即可,容器内会自动同步。

2.实战:MYSQL同步数据

思考:MYSQL的数据持久化的问题!

# 获取镜像
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete 
93619dbc5b36: Pull complete 
99da31dd6142: Pull complete 
626033c43d70: Pull complete 
37d5d7efb64e: Pull complete 
ac563158d721: Pull complete 
d2ba16033dad: Pull complete 
0ceb82207cd7: Pull complete 
37f2405cae96: Pull complete 
e2482e017e53: Pull complete 
70deed891d42: Pull complete 
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
# 运行容器,需要做数据挂载!  #安装启动mysql,需要配置密码,这是注意点!
#官方测试:docker run --name some-mysql -e MYSQL_
ROOT_PASSWORD=my-secret-pw -d mysql:tag
#启动我们自己的
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
[root@iZ2zefiis08efdip3nlhu2Z ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
fd3057d7ebb70b982ad9cd83058ebd90e5ac6c0036a28a5c844f96530a577fd0
#启动成功后,我们在本地使用nvicat 来测试一下
#nvicat - 连接到服务器的3310 -----3310和容器内的3306端口映射,这个时候我们就可以连接上了
#在本地测试创建一个数据库,查看一下我们映射的路径是否ok

假如我们将容器删除

发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化的功能!

3.具名挂载和匿名挂载(了解)

3.1匿名挂载

#匿名挂载:我们在-v 只写了容器内的路径,没有写主机的路径
-v 容器内路径!  #不指定主机路径
docker run -d -P --name nginx01 -v /etc/nginx  nginx
#查看所有的volume的情况
docker volume ls 

3.2具名挂载(推荐)

#具名挂载:
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx  nginx

3.3保存的路径

#上面两个默认都是在/var/lib/docker路径下,区别有没有具体的名字

3.4总结👀

4.初始Dockerfile

  • 挂载方式2:在生成镜像的同时,镜像脚本命令挂载
    Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下
    通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
[root@iZ2zefiis08efdip3nlhu2Z home]# mkdir docker-test-volume
[root@iZ2zefiis08efdip3nlhu2Z docker-test-volume]# pwd
/home/docker-test-volume
[root@iZ2zefiis08efdip3nlhu2Z docker-test-volume]# vim dockerfile1
#1.创建一个dockerfile文件,名字可以随机,但是最好是Dockerfile
#1.文件中的内容: 指令(大写) 参数
#1.这里的每个命令,就是镜像的一层
[root@iZ2zefiis08efdip3nlhu2Z docker-test-volume]# cat dockerfile1 
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-----end----"
CMD /bin/bash
#2.创建自己的镜像-命令如下,并实现挂载(挂载方式2)
[root@iZ2zefiis08efdip3nlhu2Z docker-test-volume]# docker build -f dockerfile1 -t swz/centos .

# 3.启动自己生成的容器
[root@iZ2zefiis08efdip3nlhu2Z docker-test-volume]# docker run -it e1e7359dcbfa /bin/bash

这个卷和外部一定是有一个同步的目录!

查一下卷挂载的路径:

测试一下是否同步:同步成功

这种方式我们未来使用的十分多,因为我们通常会构建自己的镜像!

假设构建镜像的时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!

5.数据卷容器

多个mysql同步数据!

  • 启动三个容器,通过刚才我们自己写的镜像启动
  • 启动docker01

  • 启动docker02并实现同步挂载
    注意:–volume-from 后面是docker01容器的 名字 和 镜像id

  • 启动docker03并实现同步挂载
[root@iZ2zefiis08efdip3nlhu2Z docker-test-volume]# docker run -it --name docker03  --volumes-from docker01 e1e7359dcbfa
[root@b8cc35577dbe /]# ls 
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01  volume02
[root@b8cc35577dbe /]# cd volume01
[root@b8cc35577dbe volume01]# ls
docker01
[root@b8cc35577dbe volume01]# touch docker03

  • 测试:可以删除docker01,查看docker02和docker03是否还可以访问这个文件?
    答:依旧可以访问

  • 多个mysql实现数据共享

  • 结论
    容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止!
    但是一旦你持久化到本地,这个时候,本地的数据是不会删除的!
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
Kubernetes Ubuntu Linux
docker学习笔记
docker学习笔记
52 0
|
1月前
|
安全 网络安全 开发者
Docker学习笔记(一):Docker命令总结
本文介绍了Docker的基本概念、优点以及常用命令。Docker是一个开源的应用容器引擎,它通过容器打包应用程序及其依赖项,实现快速部署和迁移。主要优点包括轻量级、可移植性、易于管理、安全性和开源性。文章还区分了镜像和容器的概念,并提供了构建镜像、查看容器、运行容器、停止和删除容器等常用Docker命令的示例。
127 0
|
2月前
|
Docker Windows Python
Windows-Docker学习笔记(一)
本文介绍了Windows环境下Docker的安装与使用方法。首先通过链接下载Windows版本的Docker,然后按步骤配置:启用Windows功能、设置默认WSL版本为2,并检查Docker及其组件是否正常工作。接着详细列出了Docker的基础命令及其用法,包括搜索、下载镜像、管理容器等。同时介绍了Dockerfile的编写方法及其构建过程,以及docker-compose.yml文件的用途。最后提供了运行和管理容器的具体示例。
Windows-Docker学习笔记(一)
|
3月前
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
3月前
|
jenkins Java 持续交付
jenkins学习笔记之十九:Docker安装jenkins master及动、静态配置slave
jenkins学习笔记之十九:Docker安装jenkins master及动、静态配置slave
|
6月前
|
安全 Linux Docker
Ubantu docker学习笔记(六)容器数据卷
Ubantu docker学习笔记(六)容器数据卷
Ubantu docker学习笔记(六)容器数据卷
|
6月前
|
Kubernetes 调度 Docker
Ubantu docker学习笔记(十一)k8s基本操作
Ubantu docker学习笔记(十一)k8s基本操作
|
6月前
|
Prometheus 监控 Cloud Native
Ubantu docker学习笔记(九)容器监控 自带的监控+sysdig+scope+cAdvisor+prometheus
Ubantu docker学习笔记(九)容器监控 自带的监控+sysdig+scope+cAdvisor+prometheus
|
6月前
|
存储 应用服务中间件 nginx
Ubantu docker学习笔记(八)私有仓库
Ubantu docker学习笔记(八)私有仓库
|
6月前
|
网络协议 Docker 容器
Ubantu docker学习笔记(七)容器网络
Ubantu docker学习笔记(七)容器网络