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
2docker ps
docker ps -a
👆列出当前正在运行的容器1
2docker 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(提供独立于容器之外的持久化存储)
举例
👇示例11
2
3FROM alpine:latest
MAINTAINER rl
CMD echo "Hello, Docker~"
👇示例21
2
3
4
5
6
7FROM 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
3screen ~/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
4docker search <image>
docker pull <image>
docker push <image>
docker tag <old_image> <new_image>
👆搜索、拉取、发布、改变image的名字
docker-compose(多容器app)
Linux环境下安装docker-compose(Mac/Windows无需此步骤)详情请见
1 | 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 |
Commands
1 | docker-compose build |
👆多容器app的image创建、daemon启动服务、停止、删除服务中的各个容器
docker-compose.yml常用命令
build 本地创建镜像
command 覆盖缺省命令
depends_on 连接容器
ports 暴露端口
volumes 卷
image 拉取镜像
ElasticSearch
简介
全文搜索引擎,能够快速储存、搜索和分析海量数据,通常可以满足大量站内搜索的需求,例如维基百科、Github、Stack Overflow。不需要建表、配置字段等;数据可以JSON格式存储;原生支持搜索,不需要拼装查询语句。
安装
方法一: 从网站下载安装包、配置、运行
方法二: 直接使用Docker拉取对应版本的elasticsearch1
2docker 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 | // Creates a new elasticsearch client |
1 | // Stores the data (create/modify) |
1 | // Gets the data |
版权所有
仅供交流学习,禁止转载商用!