曲木为直终必弯,养狼当犬看家难;墨染鸬鹚黑不久,粉刷乌鸦白不坚。
蜜饯黄莲终需苦,强摘瓜果不能甜;好事总得善人做,哪有凡人做神仙。
安装docker环境与docker-compose 环境参考 https://www.jianshu.com/p/b3fe90a35c4d
1.自己项目打包成镜像
(1)项目加入插件
自己的项目pom文件添加mvn插件才能打包,还有一个 docker-maven-plugin 插件,已经不推荐使用,现在推荐使用dockerfile,但是dockerfile 的前提是必须服务器有docker环境
<!-- docker支持 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
(2)编写dockerfile
注意:名称为Dockerfile并且跟pom文件同级
FROM openjdk:11-jre-slim
EXPOSE 8080
ARG JAR_FILE
ADD target/${JAR_FILE} /odcnode.jar
ENTRYPOINT ["java", "-jar","/odcnode.jar"]
(3)构建docker镜像
1.首先要将项目打包成jar
mvn package -DskipTests
2.构建docker镜像
mvn dockerfile:build
docker镜像重命名
docker tag IMAGEID REPOSITORY:TAG
2.编写docker-compose 文件 后缀为:.yaml 、.yml
version: '3'
services:
mongo:
container_name: mongo
image: 'mongo'
restart: always
ports:
- 27017:27017
privileged: true
volumes:
- /usr/local/pid/mongodata:/data/db
elasticsearch:
container_name: elasticsearch
image: 'elasticsearch:7.9.3'
environment:
# - node.name=odc_node_1
# - network.host=0.0.0.0
# - http.port=9200
# ① 就是 volumes 挂载权限问题
- TAKE_FILE_OWNERSHIP=true
# ②
- discovery.type=single-node
volumes:
# ③
- /usr/local/pid/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /usr/local/pid/esdata:/usr/share/elasticsearch/data
- /usr/local/pid/eslogs:/usr/share/elasticsearch/logs
hostname: elasticsearch
restart: always
ports:
- "9200:9200"
- "9300:9300"
privileged: true
kibana:
container_name: kibana
image: 'kibana:7.9.3'
#链接es地址
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200 #elasticsearch查询接口地址
hostname: kibana
depends_on:
- elasticsearch
restart: always
ports:
- "5601:5601"
odc-node:
container_name: odc-node
#镜像名称
image: 'odc/odc-node:0.0.1'
#此镜像在elasticsearch、mongo镜像启动之后在启动
depends_on:
- elasticsearch
- mongo
#容器开放的端口
ports:
- 8080:8080
- 7000:7000
privileged: true
image.png① 这个注解不许加要不就会出现以下错误
我也有这个错误具体,解释看一个大神博客
link:https://blog.csdn.net/qq_15256981/article/details/88605824
② 如果是单节点启动必须要加上这个属性,如果是集群删除这个属性
docker-compose 和作者普通安装es单节点不同之处在于,普通安装必须要加上cluster.initial_master_nodes: ["odc_node_1"]这个属性,但是docker不能添加否色会和②属性有冲突
③ docker容器内部可以引用普通安装的es配置文件具体配置如下,也可以直接在environment中直接配置,上面docker-compose文件中已经存在,就是注释了
#cluster.name: odc
node.name: odc_node_1
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs
network.host: 0.0.0.0
http.port: 9200
#cluster.initial_master_nodes: ["odc_node_1"]
3.启动docker-compose 文件
docker-compose 会自动从dockerhub中拉取镜像,所有docker-compose文件中的镜像名称包括版本一定要正确,如果前台启动取消命令中的 -d
docker-compose -f odc-compose.yaml up -d
网友评论