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

Posted 开源基础软件社区官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#云原生征文# docker数据卷与DockerFile学习相关的知识,希望对你有一定的参考价值。

其实也不难理解和我们上一篇讲的端口映射很相似,因为容器与宿主机之间都是相互隔离的。而端口映射则是在两个互相隔离体之间构建通道,使其可以进行通讯共享。数据卷也是这种意思,但是数据卷不会因为容器的死亡而消失,只要还有一个容器或宿主机与其进行绑定,那么数据卷的内容就不会丢失。

数据卷

一. 直接命令挂载在宿主机目录

(1). 测试nginx

当我们的两个目录进行挂载之后,就相当于共用一个目录,不管哪边发送改变目录的内容都会发生改变,这样的话我们只需在宿主机这边的目录进行操作,那么容器内的该目录也会发生相应的变化。就像我上篇文章所进行的cp操作就可以省去,并且当我需要更新版本时也只需在宿主机这边进行操作即可。下面我以nginx进行测试,挂载上自己自定义的网页。

这里我自己网页是放在/var/www/html里,接下来我需要挂载到nginx容器里的html文件夹下。

可以看到已经运行起来了访问也通了,让我们看看网页行不行

ok也是没问题了。这里我们还能通过docker inspect 容器id查看详细信息。

这里可以看到确实是挂载成功了。可以看到当我们使用-v时很容易就将自己的本地目录网页放在了容器里,到这里其实就已经可以说明现在这两个目录实际上已经共用同一个目录了,并且就算我将这个容器删除,里面的内容也依旧是保留的。

(2). 测试mysql

我这用mysql:5.7版本演示,首先docker pull mysql:5.7 ,当然这里我先去官网看了一下。我这里还是建议大家直接先去官方进行查询学习。

但是为了挂载目录方便管理,这里我们需要对该命令进行修改。


接下来我们去测试一下是否联通了。


可以看到已经成功了!我们在navicat加一个表看看服务器上是否会有。


这样我们就完成了MySQL容器的数据持久化。就算我们将容器进行删除,数据库中的数据也将获得保存

二. 匿名挂载和具名挂载

下面我来给大家逐一展示,这里我就用-P随机指定端口了因为我8080端口跑着

匿名

具名


顺便补充一下



看到这这幅图就很好理解了。一般建议用具名挂载

这里我以nginx进行演示,先启动一个带有数据卷的容器作为父容器,我这把它命令为docker01



好的第一个容器已经做好了,接下来做第二个


我们可以去home目录验证一下是不是已经存在volume01文件夹

我们在这新建一个文件,touch helloDocker.py 然后去docker01看看是不是已经共享了。

可以看到成功了。

DockerFile

  • DockerFile:构建文件,定义了镜像如何生成已经所需的文件等等配置。
  • DockerImages: 通过DockerFile层层生成的最终镜像。最终发布和运行的产品
  • DockerContainer: 容器是镜像运行起来的服务,也是一个可写层。

下面是我找的两幅docker常用命令的简介图。大家可以好好看看有对命令的详细介绍。

[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"]


这样我们就创建好了一个dockerfile,很简单的一个dockerfile,这个的意思就是当我们运行这个镜像的时候自动ls -a。我们接下来用build命令来创建镜像。

下载完用xftp上传上去就行。

接下来就可以编写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



接下来就可以run起来了


可以看到运行成功并且也挂载成功了。访问页面看看


日志也能查看了。


可以看到已经成功了


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>


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>

接着我们去看看页面的效果吧


欧克了。

push到仓库保存

当我们做好镜像之后要怎么给别人使用呢,有两种方法一种是打包到本地然后发给别人,另一种是上传到docker官方仓库或者是阿里云,腾讯云等这些大厂的官方仓库。但是由于docker官方仓库节点在国外,速度时好时坏的,而且操作都差不多,这里就以阿里云为例子(腾讯云相同操作)。

首先先登录阿里云。
直接搜索容器镜像服务,我们个人测试使用就直接用个人版就行,然后根据提示创建命令空间再创建镜像仓库选择本地仓库之后就可以看到push的教程了。

这些内容就大家自己去看了。官方的命令很详细了。根据官方的命令我们就能很容易得将镜像推送到官方仓库。

补充


像这样

以上是关于#云原生征文# docker数据卷与DockerFile学习的主要内容,如果未能解决你的问题,请参考以下文章

猿创征文 | 云原生领域之容器日常使用工具推荐

猿创征文|云原生 | 24Docker运行数据库实战之MongoDB

猿创征文|云原生 | 25Docker运行数据库实战之Redis

猿创征文|云原生之Docker使用Docker部署Flare个人导航网页

中秋征文 | 云原生之Docker使用docker部署内网穿透工具FRP

#云原生征文#深入万物基础-容器