简单介绍 - Docker和ElasticSearch

Docker

简介

容器引擎,能够打包/发布应用程序,包括系统环境、配置、依赖;虚拟化,沙箱机制(“轻量级虚拟机”);Go语言编写。

安装

下载安装包并安装

术语

host: 宿主机(正在使用Docker的机器)
image: 镜像(可以从远端拉取或者本地构建的可重复使用的软件打包)
container: 镜像运行时的容器
registry: 镜像的注册仓库
daemon: Docker的守护进程,用来接受用户命令、和registry共享
client: 客户端(给daemon输送命令)

Run it (Terminal Command)

1
docker version

👆我们可以看到Client和Server的信息

1
docker run hello-world

👆hello from docker,我们可以看到docker运行流程

1
docker run -it alpine sh

👆docker run是运行,-it是输入输出重定向,alpine是最小Linux镜像,sh是shell命令(ubuntu -> bash)

1
docker images

👆查看已经获取的本地镜像

1
2
docker ps
docker ps -a

👆列出当前正在运行的容器

1
2
docker image rm <image id> [<image id> ...]
docker rmi <image id>

👆移除获取的本地镜像(需要先移除对应的容器)

1
docker rm <container id> [<container id> ...]

👆移除获取的容器

1
docker run -d -p 8080:80 nginx

👆-d代表程序直接返回(后端持续运行,作为指挥进程),由于nginx是一个网络服务器,-p 8080:80是将nginx的端口(80)映射到我们的本地端口(8080)

1
docker stop <container id>

👆终止已经启动的容器(id)

Modify and Commit

1
docker cp <file> <container id>://path

👆向容器中拷贝文件file(暂时性:如果不commit,这种修改只存在于容器运行阶段)

1
docker commit -m <msg> <container id> [name]

👆保存改动为新的image,命令会返回该image id,省略name参数则name为

Create Image (Dockerfile)

首先在想要打包的项目根目录下创建一个Dockerfile,然后用

1
docker build -t <tag> .

👆创建image,-t代表tag,’.’代表当前路径下的所有文件

Dockerfile

语法小结

FROM: base image
RUN: 执行命令
ADD: 添加文件(比COPY更强大些,包括远程文件)
COPY: 拷贝文件
CMD: 执行命令
EXPOSE: 暴露端口
WORKDIR: 指定路径
MAINTAINER: 维护者
ENV: 设定环境变量
ENTRYPOINT: 容器入口
USER: 指定用户
VOLUME: mount point(提供独立于容器之外的持久化存储)

举例

👇示例1

1
2
3
FROM alpine:latest
MAINTAINER rl
CMD echo "Hello, Docker~"

👇示例2

1
2
3
4
5
6
7
FROM ubuntu
MAINTAINER rl
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT ["/user/sbin/nginx", "-g", "daemon off;"]
EXPOSE 80

Volume(挂载)

方法一
1
docker run -d --name nginx -v /usr/share/nginx/html nginx

👆挂载,/usr/share/nginx/html代表容器内部的地址(nginx用来访问网页)

1
docker inspect nginx

👆检查信息,可以在返回结果中查找到”Mounts”下的”Source”,即是在宿主机上的挂载点

1
2
3
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
/* If using Mac OS High Sierra */
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

👆该指令只针对MAC(Linux无需该步骤)

1
cd /var/lib/docker/volumes/7c1601548c5adbd50e5bee2692939fb11bb5a52db52bb2ad1174c972b9550ec8/_data

👆Go to volume path(示例)

方法二
1
docker run -d -p 80:80 -v $PWD/html:/usr/share/nginx/html nginx

👆$PWD是环境变量,指向Host当前目录

方式三
1
docker create -v $PWD/data:/var/mydata --name data_container ubuntu

👆创建数据目录挂载与本地的挂载

1
docker run -it --volumes-from data_container ubuntu /bin/bash

👆进入到Docker容器内部去对数据进行修改,同时可以看到本地也会进行相应修改

Registry(镜像仓库) - 共享资源

官方仓库(Docker Hub),国内的一些仓库(daocloud,时速云,aliyun)

1
2
3
4
docker search <image>
docker pull <image>
docker push <image>
docker tag <old_image> <new_image>

👆搜索、拉取、发布、改变image的名字

docker-compose(多容器app)

Linux环境下安装docker-compose(Mac/Windows无需此步骤)详情请见
1
2
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod a+x /usr/local/bin/docker-compose
Commands
1
2
3
4
docker-compose build
docker-compose up -d
docker-compose stop
docker-compose rm

👆多容器app的image创建、daemon启动服务、停止、删除服务中的各个容器

docker-compose.yml常用命令

build 本地创建镜像
command 覆盖缺省命令
depends_on 连接容器
ports 暴露端口
volumes 卷
image 拉取镜像

ElasticSearch

简介

全文搜索引擎,能够快速储存、搜索和分析海量数据,通常可以满足大量站内搜索的需求,例如维基百科、Github、Stack Overflow。不需要建表、配置字段等;数据可以JSON格式存储;原生支持搜索,不需要拼装查询语句。

安装

方法一: 从网站下载安装包、配置、运行
方法二: 直接使用Docker拉取对应版本的elasticsearch

1
2
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

👆启动单点模式的elasticearch(可用于简单搜索),端口9200

URL

<server>:9200/index/type/id
index -> database
type -> table
id -> JSON obj
其中,index和type无需预先创建;type中的数据类型可以不一致。
在elasticsearch7中,为了解决不同type的字段重名问题,type概念被移除了。

GET, PUT, POST, DELETE (REST)

GET -> <server>:9200/index/type/_search 表示搜索在当前index的type下的全部对象
GET -> <server>:9200/index/type/_search?q=xxxxx 表示搜索在当前index的type下含有完整xxxxx的对象
GET -> <server>:9200/index/type/_mapping 配置类型
PUT/POST -> <server>:9200/index/type/id 创建/修改数据(不加id只能用POST来进行上传,id会随机分配)

Coding (Go语言)

Package Managers (import “github.com/olivere/elastic/v7”)

👇(适合新手学习,非官方,抽象更简单)

1
go get github.com/olivere/elastic/v7

常用方法示例
1
2
3
4
// Creates a new elasticsearch client
client, err := elastic.NewClient(
// Must turn off sniff in docker
elastic.SetSniff(false))
1
2
3
4
5
6
7
// Stores the data (create/modify)
resp, err := client.Index().
Index("example").
Type("exp").
Id("1").
BodyJson(item).
Do(context.Background())
1
2
3
4
5
6
// Gets the data
resp, err := client.Get().
Index("example").
Type("exp").
Id("1").
Do(context.Background())

版权所有

  仅供交流学习,禁止转载商用!

------------------------ The End ------------------------

本文标题:简单介绍 - Docker和ElasticSearch

文章作者:Lu, Ruihui

发布时间:2020年04月19日 - 00:54:24

最后更新:2021年04月13日 - 19:07:48

原始链接:https://github.com/cs-lurh0826/cs-lurh0826.github.io/Developer-Tools/docker-and-elastic/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

一花一世界,一叶一追寻