基础教程
相关知识
我们要想docker容器像操作系统一样,永久的保留数据就必须把数据持久化,否则在容器损坏或更新的情况下无法加载之前数据,导致容器系统启动失败,若想持续保留数据,我们就要知道数据卷(data volumes)持久化。
数据卷(Data Volumes)是宿主机中的一个目录或文件,数据卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。当容器目录和数据卷目录绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。
数据卷特性
- 数据卷可以在容器之间共享和重用,本地与容器间传递数据更高效
- 对数据卷的修改会立马有效,在容器内部与本地目录均可对数据卷进行修改
- 对数据卷的更新,不会影响镜像,对数据与应用进行了解耦操作
- 卷会一直存在,直到没有容器使用
当然,以上纯属概念性存在,我们在今后的学习中,逐渐的明白这个东西是个啥,接下来我们进行实际演练
案例讲解
我们今天来新建2个容器,一个为之前的nginx,另一个准备新增一个mysql的容器。并可以随意更改配置文件,下面进入正题
1. 挂载主机目录
$ docker run --restart always --name nginx -d -v /opt:/opt -v /var/log:/var/log nginx:v1
docker run-- docker 运行容器命令
-p 8080:80 -- 宿主机和容器的映射端口
--restart always -- 出错或重启物理机器后总是自动重启
-d nginx:v1 -- 使用的镜像及版本
-v /opt:/opt -- 宿主机的路径和该路径在容器中的映射
通过以上操作,我们就可以在宿主机的/opt 中持续保持nginx 的所有文件,当然这个仅限于在容器的/opt中的文件,除这个路径之外的其他文件,仍旧无法永久保存。到这里我想大家应该基本明白这个所谓的卷是个啥东西了吧。
2. 挂载mysql目录
下面我们通过对常规数据库mysql,进行容器化部署,具体命令如下:
$ docker run -d -p 3306:3306 --name mysql -v /opt/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=test mysql:5.7
docker run -- docker 运行容器命令
-p 3306:3306 -- 宿主机和容器的映射端口
--restart always -- 出错或重启物理机器后总是自动重启
-d mysql:5.7 -- 使用的镜像及版本
-v /opt/mysql:/var/lib/mysql -- 宿主机的路径和该路径在容器中的映射
-e 参数映射,比如上面设置root账号的密码及数据库为test(固定写法)
在网内的其他机器上面可以telnet ip 3306 看是否正常,如果不正常,首先检查防火墙是否开启该端口,如果有其他问题可以私信我解决!
以上,就是我们今天所学习的内容,请多多练习。
使用volumes卷的基本命令
$ docker volume ls # 查看当前卷
$ docker volume create my-vol # 创建名为my-vol的卷
$ docker run --name nginx -d -v my-vol:/opt/my-vol nginx:v1
$ docker exec -ti nginx touch /opt/my-vol/a.txt # 在容器内创建a文件
验证数据共享
新建容器,同时挂载该卷,可实现数据共享
$ docker run --name -nginx2 -d -v my-vol:/opt/my-vol nginx:v1
------------------------------------------------------------------------------------------------------
课程链接
docker基础操作
【云原生kubernetes从入门到实践 ] 一.docker安装
【云原生kubernetes从入门到实践 ] 二.docker操作
【云原生kubernetes从入门到实践 ] 三.docker私有镜像源
【云原生kubernetes从入门到实践 ] 四.docker volumes 持久化
【云原生kubernetes从入门到实践 ] 五.docker网络介绍
【云原生kubernetes从入门到实践 ] 六.docker应用容器实践
k8s 基础操作
【云原生kubernetes从入门到实践 ] 一.k8s 集群介绍
【云原生kubernetes从入门到实践 ] 二.k8s 集群理解
【云原生kubernetes从入门到实践 ] 三.k8s yaml编写即开发
【云原生kubernetes从入门到实践 ] 四.k8s deploy介绍
【云原生kubernetes从入门到实践 ] 五.k8s service访问
【云原生kubernetes从入门到实践 ] 六.k8s etcd数据库操作
【云原生kubernetes从入门到实践 ] 七.k8s 网络配置
【云原生kubernetes从入门到实践 ] 八.k8s 认证授权
k8s 运维监控
【云原生kubernetes从入门到实践 ] 一.k8s Rancher部署
【云原生kubernetes从入门到实践 ] 二.Prometheus监控
【云原生kubernetes从入门到实践 ] 三.k8s Grafana展示
【云原生kubernetes从入门到实践 ] 四.k8s Alertmanager告警
k8s Devops自动化部署
【云原生kubernetes从入门到实践 ] 一.k8s DevOps平台实践
【云原生kubernetes从入门到实践 ] 二.k8s Pipline流水线
【云原生kubernetes从入门到实践 ] 三.k8s 多分支流水线
【云原生kubernetes从入门到实践 ] 四.k8s Jenkins容器集成
【云原生kubernetes从入门到实践 ] 五.k8s SonarQube代码扫描
【云原生kubernetes从入门到实践 ] 六.k8s RobotFramework集成
【云原生kubernetes从入门到实践 ] 七.k8s SharedLibrary进行CICD
【云原生kubernetes从入门到实践 ] 八.k8s sharedLibrary集成K8S服务部署
【云原生kubernetes从入门到实践 ] 九.k8s 多环境部署
k8s 项目交付
【云原生kubernetes从入门到实践 ] 一.k8s Python Flask项目交付
【云原生kubernetes从入门到实践 ] 二.k8s Vue项目交付
【云原生kubernetes从入门到实践 ] 三.k8s Springcloud项目交付