【Docker江湖】之hub上镜像的使用,Dockerfile语法解读和数据管理

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介: 打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.

这里写图片描述
打开微信扫一扫,关注微信公众号【数据与算法联盟】

转载请注明出处: http://blog.csdn.net/gamer_gyt
博主微博: http://weibo.com/234654758
Github: https://github.com/thinkgamer


Docker江湖


写在前边的话

    其实我很感谢我现在的工作,作为现阶段的我,能够与这样一群人一起工作,算是很幸运了吧,他们都很厉害,从他们身上我能学到很多东西,就比如说最近在研究的Docker。
    Docker的方便之处,在于快捷的交付与启动,他告别了传统虚拟机的资源消耗和内存占用,同时在于强大的社区支持,不同的人把自己的需求融合到docker中,放到官方给定的Docker hub中,以便于更多的人使用。
    当我们使用Docker的时候应该追求的是当我们启动docker的时候我们的所封装的应用也随着启动,而不是说进入容器再启动相应的应用,那样我们所使用的docker就变质了。


需求分析

    使用现有的docker镜像配置ELK+rsyslog日志分析系统。
    我们可以自己启动一个docker容器,然后把自己的应用封装在容器中,但是用老罗的一句话,人生苦短,能走2步的不走9步,所以选择了开源


如何使用现有的image

1:根据自己的需求进行搜索

eg:我需要在docker中部署elk的开发环境,那么我就要去docker 的官方hub中搜索elk
        https://hub.docker.com/
这里写图片描述

2:查看Tag和Dockerfile,这里有我们所需要的ELK版本所对应的image

这里写图片描述

3:选择适合自己的版本

这里我是用的是es241_l240_k461,在启动docker服务的机器上下载镜像

sudo docker pull sebp/elk:es241_l240_k461

4:创建本地映射文件目录

为什么要这么做,是为了更加方便的查看数据和保护数据,因为一旦docker died了,且不可restart,那么里边运行的服务所产生的数据对我们来说是不可恢复的,这里便需要创建文件目录做映射
这里我的环境是

虚拟机:redhat
ip:192.168.1.195
用户名:redhat

在redhat的目录下创建以下文件夹:

/home/redhat/docker-log-file/elasticsearch    :同步elasticsearch目录
/home/redhat/docker-log-file/logstash         :同步logstash目录
/home/redhat/docker-log-file/kibana           :同步kibana目录
/home/redhat/docker-log-file/logstash-conf    :同步logstash的configure文件

5:sebp/elk中的相关目录说明

sebp/elk:es241_l240_k461:

Elasticsearch的安装目录:   /usr/share/elasticsearch/
Elasticsearch的配置文件目录:/etc/elasticsearch/
Kibana和logstash的目录为:  /opt/kibana/   /opt/logstash/
ELK的日志目录:             /var/log/elasticsearch/   /var/log/logstash/     /var/log/kibana/
默认加载配置的文件路径:      /etc/logstash/conf.d/

特别说明:

在sebp/elk容器中的内置配置文件目录是/etc/logstash/conf.d,该目录下有五个配置文件,在容器启动的时候,该目录下的配置文件会自动被加载启动,当我们在实际开发中,需要将我们的配置文件覆盖掉该目录下的文件

6:容器启动

在容器启动的时候,要指定目录挂载和端口映射
启动命令:

sudo docker run \
-v /home/redhat/docker-log-file/elasticsearch/:/var/log/elasticsearch\
-v /home/redhat/docker-log-file/logstash/:/var/log/logstash \
-v /home/redhat/docker-log-file/kibana/:/var/log/kibana\
-v /home/redhat/docker-log-file/logstash-conf/:/etc/logstash/conf.d/ \
-p 9200:9200 \
-p 9300:9300 \
-p 5044:5044 \
-p 5601:5601 \
-p 5000:5000 -it –name elk sebp/elk:es241_l240_k461

-v 为目录的映射 -p 端口的映射

7:redhat本地配置rsyslog发送数据

sudo vim /etc/rsyslog.conf

在最后加入

*.*     @@192.168.1.195:5000
*.*     @192.168.1.195:5000

(我在192.168.1.195这台机器上进行测试和部署的 @@表示 tcp传输 @表示udp传输)

8:启动测试

启动容器的时候,容器内的服务会有一定的时间延迟,请耐心等待,否则不能观看到效果,容器造成error的错觉
执行

ssh localhost

分别可以输入错误的密码和正确的密码进行测试,这个时候观看我们的web界面,便可以在kibana界面中看到相应的message了

Dockerfile解读

细心的朋友会发现,我们在介绍sebp/elk时,跳过了dockerfile,在这里我们结合sebp/elk的dockerfile来看一下

sebp/elk-Dockerfile: https://hub.docker.com/r/sebp/elk/

接下来我们看几个 命令:

  • FROM:指定基础的image
    该指令必须在dockerfile的最前边(注释类的除外),指定了所依赖的基础镜像,from ,image可以是远程仓库的,也可以是本地的

    from image_name        指定基础image为该image的最后修改的版本
    from image_name:tag    指定一个tag版本


         比如说现在我们在/home/u_name/创建一个空的文件夹: mkdir mybuilddocker
         新建一个dockerfile文件:vim dockerfile
         输入 以下内容(意思是基于ubuntu最新版创建镜像):

FROM ubuntu

  • MAINTAINER:用来指定镜像创建者信息
    用于将image制作者的相应信息写入image,当我们对制作好的image执行 docker inspect时,输出中有相应的字段记录信息
    继续编辑dockerfile,加入:
MAINTAINER thinkgamer csdn blog http://blog.csdn.net/gamer_gyt

  • ADD:挂载文件
    格式为ADD path1 path2
    该命令将复制path1指定的到容器中的path2。 其中path1可以是Dockerfile所在目录的一个相对路径;也可以是一个URL;还可以是一个tar文件(自动解压为目录)。
    eg:
ADD /home/redhat/test /home/test

  • ENV:用于设置环境变量
    构建指令,在image中设置一个环境变量,比如说我们需要在容器中运行java程序,那么我们需要的便是一个java环境,假设我们在本地进行解压之后进行同步到容器的/opt/java目录,我们把java加入环境变量
    编辑dockerfile:
ENV JAVA_HOME /opt/java

  • RUN:安装软件使用
    比如说我们需要在基础的ubuntu镜像中安装一些软件,例如:vim,wget,curl等,我们可以这样写:
    编辑dockerfile:
RUN apt-get install -y vim wget curl

  • EXPOSE:指定容器需要映射到宿主机器的端口
        设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。当你需要访问容器的时候,可以不是用容器的IP地址而是使用宿主机器的IP地址和映射后的端口。要完成整个操作需要两个步骤,首先在Dockerfile使用EXPOSE设置需要映射的容器端口,然后在运行容器的时候指定-p选项加上EXPOSE设置的端口,这样EXPOSE设置的端口号会被随机映射成宿主机器中的一个端口号。也可以指定需要映射到宿主机器的那个端口,这时要确保宿主机器上的端口号没有被使用。EXPOSE指令可以一次设置多个端口号,相应的运行容器的时候, 可以配套的多次使用-p选项。
    例如我们要暴露出 80,81,82端口
    编辑dockerfile:
EXPOSE 80 81

         在容器启动时应该进行指定:

sudo docker run -p 80:80 -p 81:81 -it --name othername image_name

  • COPY:复制
    格式为COPY path1 path2
    复制本地主机的path1(为Dockerfile所在目录的相对路径)到容器中的path2。
    当使用本地目录为源目录时,推荐使用COPY。
    eg:
COPY /home/path1 /home/path2

  • CMD:设置容器启动时执行的命令
    支持三种格式
    CMD [“executable”,”param1”,”param2”]使用exec执行,推荐方式;
    CMD command param1 param2在/bin/sh中执行,提供给需要交互的应用;
    CMD [“param1”,”param2”]提供给ENTRYPOINT的默认参数;
    指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。
    如果用户启动容器时候指定了运行的命令,则会覆盖掉CMD指定的命令。
    eg:
CMD [ "/usr/local/bin/start.sh" ]

其他的一些语法如:

  • USER
  • WORKDIR
  • ONBUILD

数据管理

用户在使用docker的过程中,往往需要能查看docker容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这里就涉及到了容器的数据管理操作,容器中的数据管理有两种方式

1:数据卷

数据卷是一种特殊的存在于一个或者多个docker内部的不同于Union File System的目录,数据卷提供多种有用的特性用来持久化和共享数据

  • 数据卷在docker初始化时创建。如果容器的镜像包含外挂的数据,外挂的数据将在卷初始化时被拷贝到新的本地卷。
  • 数据卷可以被共享和在多个docker间复用。
  • 可以对数据卷直接修改。
  • 更新镜像时数据卷并不受影响。
  • 即使镜像被删除,数据卷也仍然会持久化到本地

数据卷被设计用来持久化存储数据,独立于容器的生命周期,当你删除容器时,docker并不会自动删除数据卷,不使用的数据卷,也不会替你“垃圾回收”

使用-v 在docker容器中创建一个数据卷,如果要创建多个数据卷可以使用多个-v
Eg:启动容器并在容器的根目录下创建数据卷 myApp和myTest

sudo docker run -v /myApp -v /myTest -it image_name

可以使用 inspect命令查看数据卷

sudo docker inspect image_name

将宿主机目录挂载为数据卷,同样使用 -v
eg:启动容器将宿主机的home目录下的myApp和myTest挂载为容器的数据卷

sudo docker run -v /home/myApp:/myApp -v /home/myTest:/myTest -it image_name

2:数据卷容器

如果你有一些持久化的数据,并且想在不同的container之间共享这些数据,或者想在一些没有持久化的container中使用,最好的方法就是使用数据卷容器,再把数据mount到你的container
eg:启动一个容器

sudo docker run -it -d -v /volumedata ubuntu:latest

启动另一个容器(970为启动的第一个容器id的前3位,这里不需要写完整整个id,只要能唯一标示即可)

sudo docker run -it -d –volumes-from 970 ubuntu/docker:elk_rails

在第二个启动的容器中就可以看到volumedata这个文件夹,并编辑一个test文件,写入

hello volume container

进入第一个容器执行cat test,即可看到我们刚才编辑的数据


OVER!

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
相关文章
|
13天前
|
存储 运维 应用服务中间件
Docker Image即Docker镜像
Docker 镜像是 Docker 容器的基础,包含了运行应用程序所需的一切。通过 Dockerfile 可以方便地创建自定义镜像,并且利用 Docker 提供的命令可以轻松管理和使用这些镜像。掌握 Docker 镜像的创建、管理和使用,是进行容器化应用开发和部署的基础技能。希望本文能帮助读者更好地理解 Docker 镜像的概念和操作,提高开发和运维效率。
74 13
|
26天前
|
消息中间件 Kafka 流计算
docker环境安装kafka/Flink/clickhouse镜像
通过上述步骤和示例,您可以系统地了解如何使用Docker Compose安装和配置Kafka、Flink和ClickHouse,并进行基本的验证操作。希望这些内容对您的学习和工作有所帮助。
162 28
|
13天前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
86 1
|
1月前
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
139 26
|
2月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
98 27
|
2月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
218 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
2月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
85 22
|
4月前
|
人工智能 关系型数据库 分布式数据库
拥抱Data+AI|“全球第一”雅迪如何实现智能营销?DMS+PolarDB注入数据新活力
针对雅迪“云销通App”的需求与痛点,本文将介绍阿里云瑶池数据库DMS+PolarDB for AI提供的一站式Data+AI解决方案,助力销售人员高效用数,全面提升销售管理效率。
|
7月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
171 1
|
8月前
|
SQL NoSQL 数据管理
数据管理DMS使用问题之如何批量导入MongoDB的数据文件
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。