Skip to content

Commit e5f0e20

Browse files
Dr.SnowbirdDr.Snowbird
authored andcommitted
initial checkin
1 parent 4e15221 commit e5f0e20

File tree

11 files changed

+647
-0
lines changed

11 files changed

+647
-0
lines changed

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,10 @@
2121

2222
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
2323
hs_err_pid*
24+
25+
*.log
26+
*.swp
27+
*.tmp
28+
data/
29+
.fuse*
30+

Dockerfile

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# ref: https://github.com/dockerfile/java/tree/master/oracle-java8
2+
3+
# use the latest LTS Ubuntu
4+
FROM ubuntu:bionic
5+
6+
7+
8+
ENV DEBIAN_FRONTEND noninteractive
9+
10+
##### update ubuntu and Install Python 3
11+
RUN apt-get update \
12+
&& apt-get install -y apt-utils automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev \
13+
&& apt-get install -y curl net-tools build-essential software-properties-common libsqlite3-dev sqlite3 bzip2 libbz2-dev git wget unzip vim python3-pip python3-setuptools python3-dev python3-numpy python3-scipy python3-pandas python3-matplotlib \
14+
&& apt-get clean \
15+
&& rm -rf /var/lib/apt/lists/*
16+
17+
#### Install Java 8
18+
#### ---------------------------------------------------------------
19+
#### ---- Change below when upgrading version ----
20+
#### ---------------------------------------------------------------
21+
ARG JAVA_MAJOR_VERSION=${JAVA_MAJOR_VERSION:-8}
22+
ARG JAVA_UPDATE_VERSION=${JAVA_UPDATE_VERSION:-181}
23+
ARG JAVA_BUILD_NUMBER=${JAVA_BUILD_NUMBER:-13}
24+
ARG JAVA_DOWNLOAD_TOKEN=${JAVA_DOWNLOAD_TOKEN:-96a7b8442fe848ef90c96a2fad6ed6d1}
25+
## http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
26+
## http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz
27+
28+
#### ---------------------------------------------------------------
29+
#### ---- Don't change below unless you know what you are doing ----
30+
#### ---------------------------------------------------------------
31+
ARG UPDATE_VERSION=${JAVA_MAJOR_VERSION}u${JAVA_UPDATE_VERSION}
32+
ARG BUILD_VERSION=b${JAVA_BUILD_NUMBER}
33+
34+
ENV JAVA_HOME /usr/jdk1.${JAVA_MAJOR_VERSION}.0_${JAVA_UPDATE_VERSION}
35+
ENV PATH $PATH:$JAVA_HOME/bin
36+
ENV INSTALL_DIR /usr
37+
38+
RUN curl -sL --retry 3 --insecure \
39+
--header "Cookie: oraclelicense=accept-securebackup-cookie;" \
40+
"http://download.oracle.com/otn-pub/java/jdk/${UPDATE_VERSION}-${BUILD_VERSION}/${JAVA_DOWNLOAD_TOKEN}/jdk-${UPDATE_VERSION}-linux-x64.tar.gz" \
41+
| gunzip \
42+
| tar x -C $INSTALL_DIR/ \
43+
&& ln -s $JAVA_HOME $INSTALL_DIR/java \
44+
&& rm -rf $JAVA_HOME/man
45+
46+
#### Install Maven 3
47+
ENV MAVEN_VERSION 3.5.3
48+
ENV MAVEN_HOME /usr/apache-maven-$MAVEN_VERSION
49+
ENV PATH $PATH:$MAVEN_HOME/bin
50+
RUN curl -sL http://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz \
51+
| gunzip \
52+
| tar x -C /usr/ \
53+
&& ln -s $MAVEN_HOME /usr/maven
54+
55+
###################################
56+
#### ---- Pip install packages ----
57+
###################################
58+
COPY requirements.txt ./
59+
60+
## ---------------------------------------------------
61+
## Don't upgrade pip to 10.0.x version -- it's broken!
62+
## Staying with version 8 to avoid the problem
63+
## ---------------------------------------------------
64+
## RUN pip3 install --upgrade pip \
65+
## && pip3 install -r ./requirements.txt
66+
RUN pip3 install -r ./requirements.txt
67+
68+
## VERSIONS ##
69+
RUN echo "JAVA_HOME=$JAVA_HOME" && \
70+
java -version && \
71+
mvn --version && \
72+
python -V && \
73+
python3 -V && \
74+
pip3 --version
75+
76+
#### define working directory.
77+
RUN mkdir -p /data
78+
COPY . /data
79+
80+
VOLUME "/data"
81+
82+
WORKDIR /data
83+
84+
#### Define default command.
85+
#ENTRYPOINT ["/bin/bash"]
86+

README.md

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
# Ubuntu LTS (bionic) 18.04 + Java 8 (1.8.0_181) JDK + Maven 3.5 + Python 2.7.12/3.5.2 + PIP3 8.1.1
2+
3+
[![](https://images.microbadger.com/badges/image/openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3.svg)](https://microbadger.com/images/openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 "Get your own image badge on microbadger.com") [![](https://images.microbadger.com/badges/version/openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3.svg)](https://microbadger.com/images/openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 "Get your own version badge on microbadger.com")
4+
5+
# Components:
6+
* Ubuntu LTS 18.04, bionic-20180724.1, bionic, latest
7+
* java version "1.8.0_181"
8+
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
9+
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
10+
* Apache Maven 3.5.3
11+
* Python 3.5.2
12+
* Other tools: git wget unzip vim python python-setuptools python-dev python-numpy
13+
14+
## Pull the image from Docker Repository
15+
16+
```bash
17+
docker pull openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3
18+
```
19+
20+
## Default Build
21+
```
22+
./build.sh
23+
```
24+
25+
# Default Run (test) - No app
26+
```
27+
./run.sh
28+
```
29+
30+
# Base the image to build add-on components
31+
32+
```Dockerfile
33+
FROM openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3
34+
```
35+
36+
# Run the image
37+
38+
Then, you're ready to run:
39+
- make sure you create your work directory, e.g., ./data
40+
41+
```bash
42+
mkdir ./data
43+
docker run -d --name my-ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 -v $PWD/data:/data -i -t openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3
44+
```
45+
46+
# Build and Run your own image
47+
Say, you will build the image "my/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3".
48+
49+
```bash
50+
docker build -t my/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 .
51+
```
52+
53+
To run your own image, say, with some-ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3:
54+
55+
```bash
56+
mkdir ./data
57+
docker run -d --name some-ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 -v $PWD/data:/data -i -t my/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3
58+
```
59+
60+
# Shell into the Docker instance
61+
62+
```bash
63+
docker exec -it some-ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 /bin/bash
64+
```
65+
66+
# Run Python code
67+
68+
To run Python code
69+
70+
```bash
71+
docker run -it --rm openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 python3 -c 'print("Hello World")'
72+
```
73+
74+
or,
75+
76+
```bash
77+
docker run -i --rm openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 python3 < myPyScript.py
78+
```
79+
80+
or,
81+
82+
```bash
83+
mkdir ./data
84+
echo "print('Hello World')" > ./data/myPyScript.py
85+
docker run -it --rm --name some-ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 -v "$PWD"/data:/data openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 python3 myPyScript.py
86+
```
87+
88+
or,
89+
90+
```bash
91+
alias dpy3='docker run --rm openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 python3'
92+
dpy3 -c 'print("Hello World")'
93+
```
94+
95+
# Compile or Run java while no local installation needed
96+
Remember, the default working directory, /data, inside the docker container -- treat is as "/".
97+
So, if you create subdirectory, "./data/workspace", in the host machine and
98+
the docker container will have it as "/data/workspace".
99+
100+
```java
101+
#!/bin/bash -x
102+
mkdir ./data
103+
cat >./data/HelloWorld.java <<-EOF
104+
public class HelloWorld {
105+
public static void main(String[] args) {
106+
System.out.println("Hello, World");
107+
}
108+
}
109+
EOF
110+
cat ./data/HelloWorld.java
111+
alias djavac='docker run -it --rm --name some-ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 -v '$PWD'/data:/data openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 javac'
112+
alias djava='docker run -it --rm --name some-ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 -v '$PWD'/data:/data openkbs/ubuntu-bionic-ubuntu-bionic-jdk-mvn-py3 java'
113+
114+
djavac HelloWorld.java
115+
djava HelloWorld
116+
```
117+
And, the output:
118+
```
119+
Hello, World
120+
```
121+
Hence, the alias above, "djavac" and "djava" is your docker-based "javac" and "java" commands and
122+
it will work the same way as your local installed Java's "javac" and "java" commands.
123+
124+
# To run specialty Java/Scala IDE alternatives
125+
However, for larger complex projects, you might want to consider to use Docker-based IDE.
126+
For example, try the following Docker-based IDEs:
127+
* [openkbs/eclipse-oxygen-docker](https://hub.docker.com/r/openkbs/eclipse-oxygen-docker/)
128+
* [openkbs/netbeans](https://hub.docker.com/r/openkbs/netbeans/)
129+
* [openkbs/scala-ide-docker](https://hub.docker.com/r/openkbs/scala-ide-docker/)
130+
* [openkbs/pycharm-docker](https://hub.docker.com/r/openkbs/pycharm-docker/)
131+
* [openkbs/webstorm-docker](https://hub.docker.com/r/openkbs/webstorm-docker/)
132+
* [openkbs/intellj-docker](https://hub.docker.com/r/openkbs/intellij-docker/)
133+
134+
# See also
135+
* [Java Development in Docker] (https://blog.giantswarm.io/getting-started-with-java-development-on-docker/)
136+
137+
# Versions
138+
```
139+
Linux f1c21daeac32 4.15.0-29-generic #31~16.04.1-Ubuntu SMP Wed Jul 18 08:54:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
140+
No LSB modules are available.
141+
Distributor ID: Ubuntu
142+
Description: Ubuntu 18.04.1 LTS
143+
Release: 18.04
144+
Codename: bionic
145+
146+
JAVA_HOME=/usr/jdk1.8.0_181
147+
java version "1.8.0_181"
148+
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
149+
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
150+
151+
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T19:49:05Z)
152+
Maven home: /usr/apache-maven-3.5.3
153+
Java version: 1.8.0_181, vendor: Oracle Corporation
154+
Java home: /usr/jdk1.8.0_181/jre
155+
Default locale: en_US, platform encoding: ANSI_X3.4-1968
156+
OS name: "linux", version: "4.15.0-29-generic", arch: "amd64", family: "unix"
157+
158+
Python 2.7.15rc1
159+
160+
Python 3.6.5
161+
162+
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
163+
```

build.sh

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/bin/bash
2+
3+
# Reference:
4+
# - https://docs.docker.com/engine/userguide/containers/dockerimages/
5+
# - https://github.com/dockerfile/java/blob/master/oracle-java8/Dockerfile
6+
7+
if [ $# -lt 1 ]; then
8+
echo "Usage: "
9+
echo " ${0} <image_tag>"
10+
fi
11+
12+
###################################################
13+
#### ---- Change this only if want to use your own
14+
###################################################
15+
ORGANIZATION=openkbs
16+
17+
###################################################
18+
#### ---- Generate build-arg arguments ----
19+
###################################################
20+
BUILD_ARGS=""
21+
ARGS_DEFINITION_FILE="./docker.env"
22+
## -- ignore entries start with "#" symbol --
23+
function generateBuildArgs() {
24+
for r in `cat ${ARGS_DEFINITION_FILE} | grep -v '^#'`; do
25+
echo "entry=$r"
26+
key=`echo $r | tr -d ' ' | cut -d'=' -f1`
27+
value=`echo $r | tr -d ' ' | cut -d'=' -f2`
28+
BUILD_ARGS="${BUILD_ARGS} --build-arg $key=$value"
29+
done
30+
}
31+
generateBuildArgs
32+
echo "BUILD_ARGS=${BUILD_ARGS}"
33+
34+
###################################################
35+
#### ---- Container package information ----
36+
###################################################
37+
DOCKER_IMAGE_REPO=`echo $(basename $PWD)|tr '[:upper:]' '[:lower:]'|tr "/: " "_" `
38+
imageTag=${1:-"${ORGANIZATION}/${DOCKER_IMAGE_REPO}"}
39+
40+
docker build --rm -t ${imageTag} \
41+
${BUILD_ARGS} \
42+
-f Dockerfile .
43+
44+
echo "----> Shell into the Container in interactive mode: "
45+
echo " docker exec -it --name <some-name> /bin/bash"
46+
echo "e.g."
47+
echo " docker run --name "my-$(basename $imageTag)" /bin/bash "
48+
49+
echo "----> Run: "
50+
echo " docker run --name <some-name> -it ${imageTag} /bin/bash"
51+
echo "e.g."
52+
echo " docker run --name "my-$(basename $imageTag)" ${imageTag} "
53+
54+
echo "----> Run in interactive mode: "
55+
echo " docker run -it --name <some-name> ${imageTag} /bin/bash"
56+
echo "e.g."
57+
echo " docker run -it --name "my-$(basename $imageTag)" -it ${imageTag} "
58+
59+
echo "----> Build Docker Images again: "
60+
echo "To build again: (there is a dot at the end of the command!)"
61+
echo " docker build -t ${imageTag} . "
62+
echo
63+
docker images |grep "$imageTag"
64+

commit-push.sh

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/bin/bash
2+
3+
# Reference: https://docs.docker.com/engine/userguide/containers/dockerimages/
4+
5+
echo "Usage: "
6+
echo " ${0} <comment> [<repo-name/repo-tag>] [<imageVersion>]"
7+
echo "e.g."
8+
echo " ${0} \"initial updates\" \"openkbs/docker-project-tempalte\" \"1.0.0\" "
9+
echo ""
10+
echo "-------------------------------------"
11+
echo "-- Make sure you do login first: --"
12+
echo "-- To login:"
13+
echo " docker login"
14+
echo "-------------------------------------"
15+
echo
16+
17+
comment=${1:-Update with the latest changes}
18+
19+
###################################################
20+
#### **** Container package information ****
21+
###################################################
22+
DOCKER_IMAGE_REPO=`echo $(basename $PWD)|tr '[:upper:]' '[:lower:]'|tr "/: " "_" `
23+
imageTag=${2:-"openkbs/${DOCKER_IMAGE_REPO}"}
24+
imageVersion=${3:-"1.0.0"}
25+
26+
docker ps -a
27+
28+
containerID=`docker ps |grep "${imageTag} "|awk '{print $1}'`
29+
echo "containerID=$containerID"
30+
31+
#docker tag ${imageTag} openkbs/${imageTag}:latest
32+
33+
docker commit -m "$comment" ${containerID} ${imageTag}:latest
34+
docker push ${imageTag}:latest
35+
36+
docker commit -m "$comment" ${containerID} ${imageTag}:${imageVersion}
37+
docker push ${imageTag}:${imageVersion}

docker.env

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# BUILD_VERSION=1.0.0
2+
# USER_ID=1000
3+
# GROUP_ID=1000
4+
5+
#### Java JDK #####
6+
JAVA_MAJOR_VERSION=8
7+
JAVA_UPDATE_VERSION=181
8+
JAVA_BUILD_NUMBER=13
9+
JAVA_DOWNLOAD_TOKEN=96a7b8442fe848ef90c96a2fad6ed6d1
10+
## http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
11+
12+
#### Rider configuration for run.sh ####
13+
# - Use "#VOLUMES" and "#PORTS" to indicate that the variables for run.sh"
14+
# - To ignore line, use "##" (double) in the beginning, e.g. "##VOLUMES" and "##PORTS"
15+
# - To indicate that the variables for run.sh", use only one "#", e.g. "#VOLUMES" and "#PORTS"
16+
#VOLUMES_LIST="data workspace"
17+
##PORTS_LIST="18080:8000 17200:7200"
18+
##PORTS_LIST="123:123/udp"
19+

0 commit comments

Comments
 (0)