编辑:已经使用默认的ElasticSearch图像,但是这个练习的目的是学习dockerfile的工作。这就是为什么我注意到我的图片比官方图片(742米)大得多(2.5克)
Docker /集装箱景观新手(到目前为止一直在使用流浪者)。
为了更好地理解dockerfile的工作原理,决定创建一个es图像(类似于我过去为一个流浪者盒子创建的图像)。
有人可以帮助审查docker文件,并回答以下遇到的问题。
不允许以root身份运行es,并且从/home/newuser运行它会产生以下错误。
我错过了什么?如何创建新用户/组来解决此问题。
newuser@9f5820d430eb:~$ elasticsearch
Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
[0.000s][error][logging] Error opening log file 'logs/gc.log': Permission denied
[0.001s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
error:
Invalid -Xlog option '-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m', see error log for details.
Error: Could not create the Java Virtual Machine.
dockerfile正在安装jdk和es,但映像大小超过2gb。这可以减少吗。找到一种叫做多阶段图像的东西。我不知道该如何在我的档案里体现这个概念。
在vagrant provisions中,我更新了/etc/environment的路径。这应该为集装箱做吗?我不确定它是否有价值。
文件管理员-
# Base image stage 1
FROM ubuntu
# MAINTAINER demo@gmail.com
LABEL maintainer="demo@foo.com"
############################################
### Install openjava
############################################
# RUN apt-get update
ARG JAVA_HOME=/opt/java
ARG JDK_PACKAGE=openjdk-14.0.2_linux-x64_bin.tar.gz
# setup paths
ENV JAVA_HOME $JAVA_HOME
# Setup JAVA_HOME, this is useful for docker commandline
ENV PATH $PATH:$JAVA_HOME/bin
## write to environment file for all future sessions
# sudo /bin/sh -c 'echo JAVA_HOME="/opt/java/" >> /etc/environment'
# sudo /bin/sh -c '. /etc/environment ; echo PATH="$JAVA_HOME/bin:$PATH" >> /etc/environment'
## download open java
# ADD https://download.java.net/java/GA/jdk14.0.2/205943a0976c4ed48cb16f1043c5c647/12/GPL/$JDK_PACKAGE /
# ADD $JDK_PACKAGE /
COPY $JDK_PACKAGE /
RUN mkdir -p $JAVA_HOME/ && \
tar -zxf /$JDK_PACKAGE --strip-components 1 -C $JAVA_HOME && \
rm -f /$JDK_PACKAGE
############################################
### Install elastic search
############################################
ARG ES_HOME=/opt/elasticsearch
ARG ES_PACKAGE=elasticsearch-7.10.1-linux-x86_64.tar.gz
# setup paths
ENV ES_HOME $ES_HOME
# Setup ES_HOME, this is useful for docker commandline
ENV PATH $PATH:$ES_HOME/bin
## write to environment file for all future sessions
# sudo /bin/sh -c 'echo ES_HOME="/opt/elasticsearch/" >> /etc/environment'
# sudo /bin/sh -c '. /etc/environment ; echo PATH="$ES_HOME/bin:$PATH" >> /etc/environment'
## download es
# ADD https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.1-linux-x86_64.tar.gz /
# ADD $JDK_PACKAGE /
COPY $ES_PACKAGE /
RUN mkdir -p $ES_HOME/ && \
tar -zxf /$ES_PACKAGE --strip-components 1 -C $ES_HOME && \
rm -f /$ES_PACKAGE
# Mount elasticsearch.yml config
ADD config/elasticsearch.yml /elasticsearch/config/elasticsearch.yml
# ADD config/elasticsearch.yml /
############################################
### Others
############################################
# Expose ports
EXPOSE 9200
EXPOSE 9300
## give permission to entire elasticsearch setup directory
RUN chmod 755 -R $ES_HOME
RUN chmod 755 -R $JAVA_HOME
RUN chmod 755 -R /var/log
# add non root user
RUN useradd newuser --create-home --shell /bin/bash
RUN echo 'newuser:newpassword' | chpasswd
RUN adduser newuser sudo
USER newuser
WORKDIR /home/newuser
# Define default command.
# CMD ["elasticsearch"]
1条答案
按热度按时间t3psigkw1#
docker的概念是,你已经准备好了大量现成的图片!
你为什么要建自己的房子
Dockerfile
像elasticsearch这样的普通技术?为什么不简单:
你已经准备好在本地运行图像了吗?
你可以在这里阅读更多关于使用docker运行elasticseach的信息。
顺便说一句,此图像大小约为774mb
编辑:
如果是为了学习,我可以推荐潜水,它可以分析烘焙的图像(比如
elasticsearch:7.10.1
并显示图像构建的每一步(换句话说dockerfile
建立了这个图像)和它开始的基础图像。