HBASE-23945 Dockerfiles showing hadolint check failures
Signed-off-by: stack <stack@apache.org>
This commit is contained in:
parent
6e6b241e2b
commit
9c1f2dd0ca
|
@ -22,8 +22,14 @@
|
||||||
# dev-support/flaky-tests/flaky-reporting.Jenkinsfile
|
# dev-support/flaky-tests/flaky-reporting.Jenkinsfile
|
||||||
FROM ubuntu:18.04
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
ADD . /hbase/dev-support
|
COPY . /hbase/dev-support
|
||||||
|
|
||||||
RUN apt-get -y update \
|
RUN DEBIAN_FRONTEND=noninteractive apt-get -qq -y update \
|
||||||
&& apt-get -y install curl python-pip \
|
&& DEBIAN_FRONTEND=noninteractive apt-get -qq -y install --no-install-recommends \
|
||||||
&& pip install -r /hbase/dev-support/python-requirements.txt
|
curl=7.58.0-2ubuntu3.8 \
|
||||||
|
python2.7=2.7.17-1~18.04 \
|
||||||
|
python-pip=9.0.1-2.3~ubuntu1.18.04.1 \
|
||||||
|
python-setuptools=39.0.1-2 \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
RUN pip install -r /hbase/dev-support/python-requirements.txt
|
||||||
|
|
|
@ -15,28 +15,34 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
# Image for building HBase releases. Based on Ubuntu 16.04.
|
# Image for building HBase releases. Based on Ubuntu 18.04.
|
||||||
#
|
#
|
||||||
# Includes:
|
# Includes:
|
||||||
# * Java 8
|
# * Java 8
|
||||||
FROM ubuntu:18.04
|
FROM ubuntu:18.04
|
||||||
|
|
||||||
# These arguments are just for reuse and not really meant to be customized.
|
|
||||||
ARG APT_INSTALL="apt-get install --no-install-recommends -y"
|
|
||||||
|
|
||||||
# Install extra needed repos and refresh.
|
# Install extra needed repos and refresh.
|
||||||
#
|
#
|
||||||
# This is all in a single "RUN" command so that if anything changes, "apt update" is run to fetch
|
# This is all in a single "RUN" command so that if anything changes, "apt update" is run to fetch
|
||||||
# the most current package versions (instead of potentially using old versions cached by docker).
|
# the most current package versions (instead of potentially using old versions cached by docker).
|
||||||
RUN apt-get clean && \
|
RUN DEBIAN_FRONTEND=noninteractive apt-get -qq -y update \
|
||||||
apt-get update && \
|
&& DEBIAN_FRONTEND=noninteractive apt-get -qq -y install --no-install-recommends \
|
||||||
# Install openjdk 8.
|
curl=7.58.0-2ubuntu3.8 \
|
||||||
$APT_INSTALL openjdk-8-jdk && \
|
git=1:2.17.1-1ubuntu0.5 \
|
||||||
update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java && \
|
gnupg=2.2.4-1ubuntu1.2 \
|
||||||
# Install build / source control tools
|
libcurl4-openssl-dev=7.58.0-2ubuntu3.8 \
|
||||||
$APT_INSTALL curl gnupg python-pip wget git maven subversion lsof \
|
libxml2-dev=2.9.4+dfsg1-6.1ubuntu1.3 \
|
||||||
libcurl4-openssl-dev libxml2-dev && \
|
lsof=4.89+dfsg-0.1 \
|
||||||
pip install python-dateutil
|
maven=3.6.0-1~18.04.1 \
|
||||||
|
openjdk-8-jdk=8u242-b08-0ubuntu3~18.04 \
|
||||||
|
python-pip=9.0.1-2.3~ubuntu1.18.04.1 \
|
||||||
|
subversion=1.9.7-4ubuntu1 \
|
||||||
|
wget=1.19.4-1ubuntu2.2 \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
|
&& update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java \
|
||||||
|
&& pip install \
|
||||||
|
python-dateutil==2.8.1
|
||||||
|
|
||||||
WORKDIR /opt/hbase-rm/output
|
WORKDIR /opt/hbase-rm/output
|
||||||
|
|
||||||
|
|
|
@ -152,6 +152,9 @@ RUN tar xzf /tmp/maven.tar.gz -C /opt && \
|
||||||
# ensure JVMs are available under `/usr/lib/jvm` and prefix each installation
|
# ensure JVMs are available under `/usr/lib/jvm` and prefix each installation
|
||||||
# as `java-` so as to conform with Yetus's assumptions.
|
# as `java-` so as to conform with Yetus's assumptions.
|
||||||
#
|
#
|
||||||
|
# when updating java or maven versions here, consider also updating
|
||||||
|
# `dev-support/hbase_docker/Dockerfile` as well.
|
||||||
|
#
|
||||||
|
|
||||||
# hadolint ignore=DL3010
|
# hadolint ignore=DL3010
|
||||||
COPY --from=OPENJDK7_DOWNLOAD_IMAGE /tmp/zuluopenjdk7.tar.gz /tmp/zuluopenjdk7.tar.gz
|
COPY --from=OPENJDK7_DOWNLOAD_IMAGE /tmp/zuluopenjdk7.tar.gz /tmp/zuluopenjdk7.tar.gz
|
||||||
|
|
|
@ -14,37 +14,78 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM ubuntu:14.04
|
FROM ubuntu:18.04 AS BASE_IMAGE
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
# Install Git, which is missing from the Ubuntu base images.
|
# hadolint ignore=DL3009
|
||||||
RUN apt-get update && apt-get install -y git
|
RUN DEBIAN_FRONTEND=noninteractive apt-get -qq update && \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get -qq install --no-install-recommends -y \
|
||||||
|
ca-certificates=20180409 \
|
||||||
|
curl=7.58.0-2ubuntu3.8 \
|
||||||
|
locales=2.27-3ubuntu1
|
||||||
|
|
||||||
# Add the dependencies from the hbase_docker folder and delete ones we don't need.
|
RUN locale-gen en_US.UTF-8
|
||||||
WORKDIR /root
|
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
|
||||||
ADD . /root
|
|
||||||
RUN find . -not -name "*tar.gz" -delete
|
|
||||||
|
|
||||||
# Install Java.
|
FROM BASE_IMAGE AS MAVEN_DOWNLOAD_IMAGE
|
||||||
RUN mkdir -p /usr/java
|
ENV MAVEN_VERSION='3.5.4'
|
||||||
RUN tar xzf *jdk* --strip-components 1 -C /usr/java
|
ENV MAVEN_URL "https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz"
|
||||||
ENV JAVA_HOME /usr/java
|
ENV MAVEN_SHA256 'ce50b1c91364cb77efe3776f756a6d92b76d9038b0a0782f7d53acf1e997a14d'
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
RUN curl --location --fail --silent --show-error --output /tmp/maven.tar.gz "${MAVEN_URL}" && \
|
||||||
|
echo "${MAVEN_SHA256} */tmp/maven.tar.gz" | sha256sum -c -
|
||||||
|
|
||||||
# Install Maven.
|
FROM BASE_IMAGE AS OPENJDK8_DOWNLOAD_IMAGE
|
||||||
RUN mkdir -p /usr/local/apache-maven
|
ENV OPENJDK8_URL 'https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u232-b09/OpenJDK8U-jdk_x64_linux_hotspot_8u232b09.tar.gz'
|
||||||
RUN tar xzf *maven* --strip-components 1 -C /usr/local/apache-maven
|
ENV OPENJDK8_SHA256 '7b7884f2eb2ba2d47f4c0bf3bb1a2a95b73a3a7734bd47ebf9798483a7bcc423'
|
||||||
ENV MAVEN_HOME /usr/local/apache-maven
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
RUN curl --location --fail --silent --show-error --output /tmp/adoptopenjdk8.tar.gz "${OPENJDK8_URL}" && \
|
||||||
|
echo "${OPENJDK8_SHA256} */tmp/adoptopenjdk8.tar.gz" | sha256sum -c -
|
||||||
|
|
||||||
# Add Java and Maven to the path.
|
FROM BASE_IMAGE
|
||||||
ENV PATH /usr/java/bin:/usr/local/apache-maven/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
|
RUN DEBIAN_FRONTEND=noninteractive apt-get -qq install --no-install-recommends -y \
|
||||||
|
git=1:2.17.1-1ubuntu0.5 \
|
||||||
|
&& \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
#
|
||||||
|
# when updating java or maven versions here, consider also updating
|
||||||
|
# `dev-support/docker/Dockerfile` as well.
|
||||||
|
#
|
||||||
|
|
||||||
|
# hadolint ignore=DL3010
|
||||||
|
COPY --from=MAVEN_DOWNLOAD_IMAGE /tmp/maven.tar.gz /tmp/maven.tar.gz
|
||||||
|
RUN tar xzf /tmp/maven.tar.gz -C /opt && \
|
||||||
|
ln -s "/opt/$(dirname "$(tar -tf /tmp/maven.tar.gz | head -n1)")" /opt/maven && \
|
||||||
|
rm /tmp/maven.tar.gz
|
||||||
|
|
||||||
|
# hadolint ignore=DL3010
|
||||||
|
COPY --from=OPENJDK8_DOWNLOAD_IMAGE /tmp/adoptopenjdk8.tar.gz /tmp/adoptopenjdk8.tar.gz
|
||||||
|
RUN mkdir -p /usr/lib/jvm && \
|
||||||
|
tar xzf /tmp/adoptopenjdk8.tar.gz -C /usr/lib/jvm && \
|
||||||
|
ln -s "/usr/lib/jvm/$(basename "$(tar -tf /tmp/adoptopenjdk8.tar.gz | head -n1)")" /usr/lib/jvm/java-8-adoptopenjdk && \
|
||||||
|
ln -s /usr/lib/jvm/java-8-adoptopenjdk /usr/lib/jvm/java-8 && \
|
||||||
|
rm /tmp/adoptopenjdk8.tar.gz
|
||||||
|
|
||||||
|
ENV MAVEN_HOME '/opt/maven'
|
||||||
|
ENV JAVA_HOME '/usr/lib/jvm/java-8'
|
||||||
|
ENV PATH '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
|
||||||
|
ENV PATH "${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${PATH}"
|
||||||
|
|
||||||
# Pull down HBase and build it into /root/hbase-bin.
|
# Pull down HBase and build it into /root/hbase-bin.
|
||||||
|
WORKDIR /root
|
||||||
RUN git clone https://gitbox.apache.org/repos/asf/hbase.git -b master
|
RUN git clone https://gitbox.apache.org/repos/asf/hbase.git -b master
|
||||||
RUN mvn clean install -DskipTests assembly:single -f ./hbase/pom.xml
|
RUN mvn clean install -DskipTests assembly:single -f ./hbase/pom.xml
|
||||||
RUN mkdir -p hbase-bin
|
RUN mkdir -p hbase-bin
|
||||||
RUN tar xzf /root/hbase/hbase-assembly/target/*tar.gz --strip-components 1 -C /root/hbase-bin
|
RUN find /root/hbase/hbase-assembly/target -iname '*.tar.gz' -not -iname '*client*' \
|
||||||
|
| head -n 1 \
|
||||||
|
| xargs -I{} tar xzf {} --strip-components 1 -C /root/hbase-bin
|
||||||
|
|
||||||
# Set HBASE_HOME, add it to the path, and start HBase.
|
# Set HBASE_HOME, add it to the path, and start HBase.
|
||||||
ENV HBASE_HOME /root/hbase-bin
|
ENV HBASE_HOME /root/hbase-bin
|
||||||
ENV PATH /root/hbase-bin/bin:/usr/java/bin:/usr/local/apache-maven/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
ENV PATH "/root/hbase-bin/bin:${PATH}"
|
||||||
|
|
||||||
CMD ["/bin/bash", "-c", "start-hbase.sh; hbase shell"]
|
CMD ["/bin/bash", "-c", "start-hbase.sh; hbase shell"]
|
||||||
|
|
|
@ -29,30 +29,15 @@ and launch the HBase shell when run.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
1. Download x64 .tar.gz files of the Oracle JDK and Apache Maven and place them
|
1. Ensure that you have a recent version of Docker installed from
|
||||||
in this folder (i.e. both tarballs must be in the same folder as the
|
|
||||||
Dockerfile). Also note that the Dockerfile will properly pick up the tarballs
|
|
||||||
as long as the JDK file has "jdk" in its name and the Maven file contains
|
|
||||||
"maven". As an example, while developing this Dockerfile, my working directory
|
|
||||||
looked like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ ls -lh
|
|
||||||
total 145848
|
|
||||||
-rw-r--r-- 1 root root 6956162 Sep 3 15:48 apache-maven-3.2.3-bin.tar.gz
|
|
||||||
-rw-r--r-- 1 root root 2072 Sep 3 15:48 Dockerfile
|
|
||||||
-rw-r--r-- 1 root root 142376665 Sep 3 15:48 jdk-7u67-linux-x64.tar.gz
|
|
||||||
-rw-r--r-- 1 root root 1844 Sep 3 15:56 README.md
|
|
||||||
```
|
|
||||||
2. Ensure that you have a recent version of Docker installed from
|
|
||||||
[docker.io](http://www.docker.io).
|
[docker.io](http://www.docker.io).
|
||||||
3. Set this folder as your working directory.
|
1. Set this folder as your working directory.
|
||||||
4. Type `docker build -t hbase_docker .` to build a Docker image called **hbase_docker**.
|
1. Type `docker build -t hbase_docker .` to build a Docker image called **hbase_docker**.
|
||||||
This may take 10 minutes or more the first time you run the command since it will
|
This may take 10 minutes or more the first time you run the command since it will
|
||||||
create a Maven repository inside the image as well as checkout the master branch
|
create a Maven repository inside the image as well as checkout the master branch
|
||||||
of HBase.
|
of HBase.
|
||||||
5. When this completes successfully, you can run `docker run -it hbase_docker`
|
1. When this completes successfully, you can run `docker run -it hbase_docker`
|
||||||
to access an HBase shell running inside of a container created from the
|
to access an HBase shell running inside of a container created from the
|
||||||
**hbase_docker** image. Alternatively, you can type `docker run -it hbase_docker
|
**hbase_docker** image. Alternatively, you can type `docker run -it hbase_docker
|
||||||
bash` to start a container without a running HMaster. Within this environment,
|
bash` to start a container without a running HMaster. Within this environment,
|
||||||
HBase is built in /root/hbase-bin.
|
HBase is built in `/root/hbase-bin`.
|
||||||
|
|
Loading…
Reference in New Issue