基础教程

相关知识

我们要想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