Skip to content

Commit

Permalink
HBASE-23945 Dockerfiles showing hadolint check failures
Browse files Browse the repository at this point in the history
Signed-off-by: stack <stack@apache.org>
  • Loading branch information
ndimiduk committed Mar 10, 2020
1 parent 4f76e24 commit ebfc1a2
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 43 deletions.
14 changes: 10 additions & 4 deletions dev-support/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,14 @@
# dev-support/flaky-tests/flaky-reporting.Jenkinsfile
FROM ubuntu:18.04

ADD . /hbase/dev-support
COPY . /hbase/dev-support

RUN apt-get -y update \
&& apt-get -y install curl python-pip \
&& pip install -r /hbase/dev-support/python-requirements.txt
RUN DEBIAN_FRONTEND=noninteractive apt-get -qq -y update \
&& DEBIAN_FRONTEND=noninteractive apt-get -qq -y install --no-install-recommends \
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
3 changes: 3 additions & 0 deletions dev-support/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
# 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
COPY --from=OPENJDK7_DOWNLOAD_IMAGE /tmp/zuluopenjdk7.tar.gz /tmp/zuluopenjdk7.tar.gz
Expand Down
79 changes: 60 additions & 19 deletions dev-support/hbase_docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,37 +14,78 @@
# See the License for the specific language governing permissions and
# 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.
RUN apt-get update && apt-get install -y git
# hadolint ignore=DL3009
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.
WORKDIR /root
ADD . /root
RUN find . -not -name "*tar.gz" -delete
RUN locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8

FROM BASE_IMAGE AS MAVEN_DOWNLOAD_IMAGE
ENV MAVEN_VERSION='3.5.4'
ENV MAVEN_URL "https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz"
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 -

FROM BASE_IMAGE AS OPENJDK8_DOWNLOAD_IMAGE
ENV OPENJDK8_URL 'https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u232-b09/OpenJDK8U-jdk_x64_linux_hotspot_8u232b09.tar.gz'
ENV OPENJDK8_SHA256 '7b7884f2eb2ba2d47f4c0bf3bb1a2a95b73a3a7734bd47ebf9798483a7bcc423'
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 -

# Install Java.
RUN mkdir -p /usr/java
RUN tar xzf *jdk* --strip-components 1 -C /usr/java
ENV JAVA_HOME /usr/java
FROM BASE_IMAGE
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# Install Maven.
RUN mkdir -p /usr/local/apache-maven
RUN tar xzf *maven* --strip-components 1 -C /usr/local/apache-maven
ENV MAVEN_HOME /usr/local/apache-maven
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/*

# Add Java and Maven to the path.
ENV PATH /usr/java/bin:/usr/local/apache-maven/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#
# 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.
WORKDIR /root
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 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.
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"]
25 changes: 5 additions & 20 deletions dev-support/hbase_docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,30 +29,15 @@ and launch the HBase shell when run.

## Usage

1. Download x64 .tar.gz files of the Oracle JDK and Apache Maven and place them
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
1. Ensure that you have a recent version of Docker installed from
[docker.io](http://www.docker.io).
3. Set this folder as your working directory.
4. Type `docker build -t hbase_docker .` to build a Docker image called **hbase_docker**.
1. Set this folder as your working directory.
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
create a Maven repository inside the image as well as checkout the master branch
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
**hbase_docker** image. Alternatively, you can type `docker run -it hbase_docker
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`.

0 comments on commit ebfc1a2

Please sign in to comment.