docke两种方式实现挂载

挂载方式一、容器数据卷挂载

  1. 什么是容器数据卷
    数据如果放在容器中,删除容器后,数据就会丢失
    我们希望数据库等数据可以存放在本地,容器之间可以有一个数据共享技术,在docker容器中产生的数据同步到本地容器删除后数据不会丢失,这就是数据卷技术,即目录的挂载,将我们容器内的目录挂载到linux上。
    总结:容器的持久化和同步操作,容器间也可以数据共享

使用数据卷挂载

docker run -it -v 主机目录:容器目录  容器 /bin/bash
docker run -it -v /home/ceshi:/home centos /bin/bash
查看是否挂载成功:
docker inspect 65f90fb9fda6

在这里插入图片描述
测试:

启动并挂载:
1. docker run -it -v /home/zhen:/home centos /bin/bash  启动并挂载
2. cd /home 
3. ls
4. 发现容器 /home中没有文件
5.这时候 在本地linux中 cd /home 发现多了一个 文件 zhen
6.容器 touch test.java
7.本地linux:cd zhen 发现也同时创建了一个test.java 文件

mysql挂载实战-数据卷挂载:

注意:安装启动mysql的时候需要配置密码
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
参数:-e:环境配置

启动成功后可以在本地访问到容器中的 mysql

匿名卷:

  1. 挂载时指定了一个路径,这个路径是容器的路径

  2. 运行nginxdocker run -d -P --name nginx01 -v /etc/nginx nginx

  3. 查看所有的卷 docker volumn ls发现没有名字,叫匿名卷,因为在 -v后面只加了容器路径
    在这里插入图片描述 具名卷:

nginx`docker run -d -P --name nginx02 -v  juming-nginx:/etc/nginx nginx`

juming-nginx前面没有斜杠,不是路径,只是一个名字

docker volumn ls  可查看到具体名字,叫具名挂载

在这里插入图片描述
查看卷的详情命令:docker volumn inspect juming-nginx
在这里插入图片描述
没有指定目录的情况下,都是在/var/lib/docker/volumn/xxx/_data,通过具名挂载可以很快找到目录,建议使用具名挂载

区分匿名挂载,具名挂载和具体路径挂载
匿名挂载 -v 容器路径
具名挂载-v 名称:容器路径
具体路径挂载-v 本地linux路径:容器路径 本地路径以/开头

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
这两种写法是设置了权限的,分别是只读和读写权限,设置了只读权限的,不能通过容器修改内容,只能通过宿主机修改

挂载方式二、Dockerfile挂载

1.Dockerfile就是用了构建docker镜像的构建文件
2.创建过程

1.在/home文件下创建一个文件夹 
cd /home
mkdir test-volumn
cd test-volumn  进入文件编辑脚本,通过脚本生成镜像,脚本是一个个命令
vim dockerfile1
2. 脚本:
FROM centos
VOLUME  ["volume01","volume2"]  //volumn1是挂载的目录
CMD echo "-----end----"
CMD /bin/bash
3.构建
docker build -f /home/test-volumn/dockerfile1 -t zhen/centos .

在这里插入图片描述
volume1和volume2是我挂载的目录,在colume1中的操作也会同步到本地linux上,
这个地址在/var/lib/docker/volumn/xxx/_data,可以通过 docker inspect 找到

多个数据卷容器之间如何同步,即 多个mysql数据之间的同步 --volumes-from
通过数据卷技术实现数据共享

1.启动自己写的镜像 
docker run -it --name docker01 cb1dc142dbe7
2. docker01上面的数据同步到docker02上,docker01是父容器,叫数据卷容器
 docker run -it --name docker02 --volumes-from docker01 cb1dc142dbe7

总结:数据共享,只要有一个容器在使用数据,就算删掉父容器,数据也还在,是拷贝

多个mysql数据的同步

docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

Dockerfile

dockerfile 是用来构建docker镜像的文件,可以理解为命令参数脚本
构建步骤:1.写一个dockerfile文件 2.docker build构建 3.运行镜像 4.发布镜像(可以发布到dockerHub或者阿里云镜像仓库)

每个指令都是大写
每个指令都会创建提交一个新的镜像层
#表示注释
执行是从上往下顺序执行的

Dockerfile:构建文件,定义了一切步骤,源代码
DockerImages:通过dockerfile构建生成的镜像,最终发布和运行产品
Docker容器:容器就是镜像运行起来提供服务器

Dockerfile指令学习

  1. FROM 基础镜像 例:centos
  2. MAINTAINER 镜像是谁写的 姓名+邮箱
  3. RUN docker镜像构建的时候需要运行的命令
  4. ADD 步骤 比如加tomcat到centos中
  5. WORKDIR 镜像的工作目录
  6. VOLUME 挂载的目录
  7. EXPOSE 暴露端口配置
  8. CMD 指定容器启动的时候要运行的命令 只有最后一个会生效,可被代替
  9. ENTRYPOINT 指定容器启动的时候要运行的命令 可以追加命令
  10. ONBUILD 当构建一个被继承 Dockerfile
  11. COPY 将文件拷贝的镜像中
  12. ENV 构建的时候设置环境变量

dockerfile实战测试
Docker Hub中99%的镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建

WORKDIR 我希望别人运行我的容器后默认进入的路径

1. mkdir zhen_centos
2. vim mydockerfile
			 FROM centos  //在centos基础上 加vim命令 config命令。做增强版
			MAINTAINER wyz<233434545@qq.com>    作者和邮箱
			ENV MYPATH /usr/local     
			WORKDIR $MYPATH   //指定工作目录
			RUN yum -y install vim
			RUN yum -y install net-tools
			EXPOSE 80                 //暴露端口
			CMD echo $MYPATH
			CMD echo "====end==="
			CMD /bin/bash


3.docker build -f mydockerfile  -t my_centos .

查询docker的历史命令docker history 镜像id,所以平常拿到docker后看人家是怎么弄的

CMD和ENTRYPOINT区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值