#云原生征文# docker数据卷与DockerFile学习

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述#云原生征文# docker数据卷与DockerFile学习相关的知识,希望能为你提供帮助。
其实也不难理解和我们上一篇讲的端口映射很相似,因为容器与宿主机之间都是相互隔离的。而端口映射则是在两个互相隔离体之间构建通道,使其可以进行通讯共享。数据卷也是这种意思,但是数据卷不会因为容器的死亡而消失,只要还有一个容器或宿主机与其进行绑定,那么数据卷的内容就不会丢失。
数据卷 一. 直接命令挂载在宿主机目录 (1). 测试nginx当我们的两个目录进行挂载之后,就相当于共用一个目录,不管哪边发送改变目录的内容都会发生改变,这样的话我们只需在宿主机这边的目录进行操作,那么容器内的该目录也会发生相应的变化。就像我上篇文章所进行的cp操作就可以省去,并且当我需要更新版本时也只需在宿主机这边进行操作即可。下面我以nginx进行测试,挂载上自己自定义的网页。

#云原生征文# docker数据卷与DockerFile学习

文章图片

这里我自己网页是放在/var/www/html里,接下来我需要挂载到nginx容器里的html文件夹下。
#云原生征文# docker数据卷与DockerFile学习

文章图片

可以看到已经运行起来了访问也通了,让我们看看网页行不行
#云原生征文# docker数据卷与DockerFile学习

文章图片

ok也是没问题了。这里我们还能通过docker inspect 容器id查看详细信息。
#云原生征文# docker数据卷与DockerFile学习

文章图片

这里可以看到确实是挂载成功了。可以看到当我们使用-v时很容易就将自己的本地目录网页放在了容器里,到这里其实就已经可以说明现在这两个目录实际上已经共用同一个目录了,并且就算我将这个容器删除,里面的内容也依旧是保留的。
(2). 测试mysql我这用mysql:5.7版本演示,首先docker pull mysql:5.7 ,当然这里我先去官网看了一下。我这里还是建议大家直接先去官方进行查询学习。
#云原生征文# docker数据卷与DockerFile学习

文章图片

但是为了挂载目录方便管理,这里我们需要对该命令进行修改。
#云原生征文# docker数据卷与DockerFile学习

文章图片

接下来我们去测试一下是否联通了。
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

可以看到已经成功了!我们在navicat加一个表看看服务器上是否会有。
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

这样我们就完成了MySQL容器的数据持久化。就算我们将容器进行删除,数据库中的数据也将获得保存
二. 匿名挂载和具名挂载下面我来给大家逐一展示,这里我就用-P随机指定端口了因为我8080端口跑着
匿名
#云原生征文# docker数据卷与DockerFile学习

文章图片

具名
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

顺便补充一下
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

看到这这幅图就很好理解了。一般建议用具名挂载
这里我以nginx进行演示,先启动一个带有数据卷的容器作为父容器,我这把它命令为docker01
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

好的第一个容器已经做好了,接下来做第二个
#云原生征文# docker数据卷与DockerFile学习

文章图片

我们可以去home目录验证一下是不是已经存在volume01文件夹
#云原生征文# docker数据卷与DockerFile学习

文章图片

我们在这新建一个文件,touch helloDocker.py 然后去docker01看看是不是已经共享了。
#云原生征文# docker数据卷与DockerFile学习

文章图片

可以看到成功了。
DockerFile
  • DockerFile:构建文件,定义了镜像如何生成已经所需的文件等等配置。
  • DockerImages: 通过DockerFile层层生成的最终镜像。最终发布和运行的产品
  • DockerContainer: 容器是镜像运行起来的服务,也是一个可写层。
下面是我找的两幅docker常用命令的简介图。大家可以好好看看有对命令的详细介绍。
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

[root@VM-0-3-centos ~]# cd dockerFile/ [root@VM-0-3-centos dockerFile]# vim docker-test-cmd [root@VM-0-3-centos dockerFile]# cat docker-test-cmd FROM centos CMD ["ls","-a"]

#云原生征文# docker数据卷与DockerFile学习

文章图片

这样我们就创建好了一个dockerfile,很简单的一个dockerfile,这个的意思就是当我们运行这个镜像的时候自动ls -a。我们接下来用build命令来创建镜像。
下载完用xftp上传上去就行。
#云原生征文# docker数据卷与DockerFile学习

文章图片

接下来就可以编写Dockerfile文件了
FROM centos:centos7 MAINTAINER Aasee< xxx@qq.com> COPY readme.txt /usr/local/readme.txt#导入压缩包会自动解压 ADD apache-tomcat-9.0.63.tar.gz /usr/local/ ADD jdk-8u333-linux-x64.tar.gz /usr/local/#安装vim RUN yum -y install vim#设置工作目录 ENV MYPATH /usr/local WORKDIR $MYPATH#jdk环境配置 ENV java_HOME /usr/local/jdk1.8.0_333 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar#tomcat环境配置 ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.63 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.63#配置path环境 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin#暴露端口 EXPOSE 8080# 启动tomcat和打印日志 CMD /usr/local/apache-tomcat-9.0.63/bin/startup.sh & & tail -F /usr/local/apache-tomcat-9.0.63/logs/catalina.out

#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

接下来就可以run起来了
#云原生征文# docker数据卷与DockerFile学习

文章图片

可以看到运行成功并且也挂载成功了。访问页面看看
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

日志也能查看了。
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

可以看到已经成功了
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

web.xml
< ?xml version="1.0" encoding="UTF-8"?> < web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> < /web-app>

#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

index.html
< !DOCTYPE html> < html> < head> < meta charset="utf-8"> < title> Hello world< /title> < /head> < body bgcolor="F6F3D6"> < !--用HTML语言向世界打声招呼吧!--> Hello World < p align="center"> Aasee-Docker< /p> < /body> < /html>

接着我们去看看页面的效果吧
#云原生征文# docker数据卷与DockerFile学习

文章图片

#云原生征文# docker数据卷与DockerFile学习

文章图片

欧克了。
push到仓库保存当我们做好镜像之后要怎么给别人使用呢,有两种方法一种是打包到本地然后发给别人,另一种是上传到docker官方仓库或者是阿里云,腾讯云等这些大厂的官方仓库。但是由于docker官方仓库节点在国外,速度时好时坏的,而且操作都差不多,这里就以阿里云为例子(腾讯云相同操作)。
首先先登录阿里云。
直接搜索容器镜像服务,我们个人测试使用就直接用个人版就行,然后根据提示创建命令空间再创建镜像仓库选择本地仓库之后就可以看到push的教程了。
#云原生征文# docker数据卷与DockerFile学习

文章图片

这些内容就大家自己去看了。官方的命令很详细了。根据官方的命令我们就能很容易得将镜像推送到官方仓库。
#云原生征文# docker数据卷与DockerFile学习

文章图片

补充【#云原生征文# docker数据卷与DockerFile学习】
#云原生征文# docker数据卷与DockerFile学习

文章图片

像这样

    推荐阅读