-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathDockerfile
More file actions
278 lines (226 loc) · 10.5 KB
/
Dockerfile
File metadata and controls
278 lines (226 loc) · 10.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
FROM ubuntu:16.10
MAINTAINER Juergen Schackmann
# -----------------------------------------------------------------------------
# General environment variables
# -----------------------------------------------------------------------------
ENV DEBIAN_FRONTEND=noninteractive
# -----------------------------------------------------------------------------
# Install system basics
# -----------------------------------------------------------------------------
RUN \
apt-get update -qqy && \
apt-get install -qqy --allow-unauthenticated \
apt-transport-https \
python-software-properties \
software-properties-common \
curl \
expect \
zip \
libsass-dev \
git \
sudo
# -----------------------------------------------------------------------------
# Install Java
# -----------------------------------------------------------------------------
ARG JAVA_VERSION
ENV JAVA_VERSION ${JAVA_VERSION:-8}
ENV JAVA_HOME ${JAVA_HOME:-/usr/lib/jvm/java-${JAVA_VERSION}-oracle}
RUN \
add-apt-repository ppa:webupd8team/java -y && \
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | \
/usr/bin/debconf-set-selections && \
apt-get update -qqy && \
apt-get install -qqy --allow-unauthenticated oracle-java${JAVA_VERSION}-installer
# -----------------------------------------------------------------------------
# Install Android / Android SDK / Android SDK elements
# -----------------------------------------------------------------------------
ENV ANDROID_HOME /opt/android-sdk-linux
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools:/opt/tools
ARG ANDROID_PLATFORMS_VERSION
ENV ANDROID_PLATFORMS_VERSION ${ANDROID_PLATFORMS_VERSION:-25}
ARG ANDROID_BUILD_TOOLS_VERSION
ENV ANDROID_BUILD_TOOLS_VERSION ${ANDROID_BUILD_TOOLS_VERSION:-25.0.3}
RUN \
echo ANDROID_HOME=${ANDROID_HOME} >> /etc/environment && \
dpkg --add-architecture i386 && \
apt-get update -qqy && \
apt-get install -qqy --allow-unauthenticated\
gradle \
libc6-i386 \
lib32stdc++6 \
lib32gcc1 \
lib32ncurses5 \
lib32z1 \
qemu-kvm \
kmod && \
cd /opt && \
mkdir android-sdk-linux && \
cd android-sdk-linux && \
curl -SLo sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip && \
unzip sdk-tools-linux.zip && \
rm -f sdk-tools-linux.zip && \
chmod 777 ${ANDROID_HOME} -R && \
mkdir -p ${ANDROID_HOME}/licenses && \
echo 8933bad161af4178b1185d1a37fbf41ea5269c55 > ${ANDROID_HOME}/licenses/android-sdk-license && \
sdkmanager "tools" && \
sdkmanager "platform-tools" && \
sdkmanager "platforms;android-${ANDROID_PLATFORMS_VERSION}" && \
sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
# -----------------------------------------------------------------------------
# Install Node, NPM, yarn
# -----------------------------------------------------------------------------
ARG NODE_VERSION
ENV NODE_VERSION ${NODE_VERSION:-6.9.5}
ARG NPM_VERSION
ENV NPM_VERSION ${NPM_VERSION:-5.3.0}
ARG PACKAGE_MANAGER
ENV PACKAGE_MANAGER ${PACKAGE_MANAGER:-npm}
ENV NPM_CONFIG_LOGLEVEL info
# gpg keys listed at https://github.com/nodejs/node
RUN \
set -ex \
&& for key in \
9554F04D7259F04124DE6B476D5A82AC7E37093B \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "${key}"; \
done && \
curl -SLO "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz" && \
curl -SLO "https://nodejs.org/dist/v${NODE_VERSION}/SHASUMS256.txt.asc" && \
gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc && \
grep " node-v${NODE_VERSION}-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - && \
tar -xJf "node-v${NODE_VERSION}-linux-x64.tar.xz" -C /usr/local --strip-components=1 && \
rm "node-v${NODE_VERSION}-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt && \
ln -s /usr/local/bin/node /usr/local/bin/nodejs && \
chmod 777 /usr/local/lib/node_modules -R && \
npm install -g npm@${NPM_VERSION} && \
if [ "${PACKAGE_MANAGER}" = "yarn" ]; then \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update -qqy && apt-get install -qqy --allow-unauthenticated yarn; \
fi
# -----------------------------------------------------------------------------
# Clean up
# -----------------------------------------------------------------------------
RUN \
apt-get clean && \
apt-get autoclean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# -----------------------------------------------------------------------------
# Create a non-root docker user to run this container
# -----------------------------------------------------------------------------
ARG USER
ENV USER ${USER:-ionic}
RUN \
# create user with appropriate rights, groups and permissions
useradd --user-group --create-home --shell /bin/false ${USER} && \
echo "${USER}:${USER}" | chpasswd && \
adduser ${USER} sudo && \
adduser ${USER} root && \
chmod 770 / && \
usermod -a -G root ${USER} && \
# create the file and set permissions now with root user
mkdir /app && chown ${USER}:${USER} /app && chmod 777 /app && \
# create the file and set permissions now with root user
touch /image.config && chown ${USER}:${USER} /image.config && chmod 777 /image.config && \
# this is necessary for ionic commands to run
mkdir /home/${USER}/.ionic && chown ${USER}:${USER} /home/${USER}/.ionic && chmod 777 /home/${USER}/.ionic && \
# this is necessary to install global npm modules
chmod 777 /usr/local/bin
#&& chown ${USER}:${USER} ${ANDROID_HOME} -R
# -----------------------------------------------------------------------------
# Copy start.sh and set permissions
# -----------------------------------------------------------------------------
COPY start.sh /start.sh
RUN chown ${USER}:${USER} /start.sh && chmod 777 /start.sh
# -----------------------------------------------------------------------------
# Switch the user of this image only now, because previous commands need to be
# run as root
# -----------------------------------------------------------------------------
USER ${USER}
# -----------------------------------------------------------------------------
# Install Global node modules
# -----------------------------------------------------------------------------
ARG CORDOVA_VERSION
ENV CORDOVA_VERSION ${CORDOVA_VERSION:-7.0.1}
ARG IONIC_VERSION
ENV IONIC_VERSION ${IONIC_VERSION:-3.12.0}
ARG TYPESCRIPT_VERSION
ENV TYPESCRIPT_VERSION ${TYPESCRIPT_VERSION:-2.3.4}
ARG GULP_VERSION
ENV GULP_VERSION ${GULP_VERSION}
RUN \
if [ "${PACKAGE_MANAGER}" != "yarn" ]; then \
export PACKAGE_MANAGER="npm" && \
npm install -g cordova@"${CORDOVA_VERSION}" && \
npm install -g cordova-hot-code-push-cli && \
npm install -g bower && \
if [ -n "${IONIC_VERSION}" ]; then npm install -g ionic@"${IONIC_VERSION}"; fi && \
if [ -n "${TYPESCRIPT_VERSION}" ]; then npm install -g typescript@"${TYPESCRIPT_VERSION}"; fi && \
if [ -n "${GULP_VERSION}" ]; then npm install -g gulp@"${GULP_VERSION}"; fi \
else \
yarn global add cordova@"${CORDOVA_VERSION}" && \
yarn global add cordova-hot-code-push-cli && \
yarn global add bower && \
if [ -n "${IONIC_VERSION}" ]; then yarn global add ionic@"${IONIC_VERSION}"; fi && \
if [ -n "${TYPESCRIPT_VERSION}" ]; then yarn global add typescript@"${TYPESCRIPT_VERSION}"; fi && \
if [ -n "${GULP_VERSION}" ]; then yarn global add gulp@"${GULP_VERSION}"; fi \
fi && \
${PACKAGE_MANAGER} cache clean --force
# -----------------------------------------------------------------------------
# Create the image.config file for the container to check the build
# configuration of this container later on
# -----------------------------------------------------------------------------
RUN \
echo "USER: ${USER}\n\
JAVA_VERSION: ${JAVA_VERSION}\n\
ANDROID_PLATFORMS_VERSION: ${ANDROID_PLATFORMS_VERSION}\n\
ANDROID_BUILD_TOOLS_VERSION: ${ANDROID_BUILD_TOOLS_VERSION}\n\
NODE_VERSION: ${NODE_VERSION}\n\
NPM_VERSION: ${NPM_VERSION}\n\
PACKAGE_MANAGER: ${PACKAGE_MANAGER}\n\
CORDOVA_VERSION: ${CORDOVA_VERSION}\n\
IONIC_VERSION: ${IONIC_VERSION}\n\
TYPESCRIPT_VERSION: ${TYPESCRIPT_VERSION}\n\
GULP_VERSION: ${GULP_VERSION:-none}\n\
" >> /image.config && \
cat /image.config
# -----------------------------------------------------------------------------
# Generate an Ionic default app (do this with root user, since we will not
# have permissions for /app otherwise), install the dependencies
# and add and build android platform
# -----------------------------------------------------------------------------
RUN \
cd / && \
ionic config set -g backend legacy || true && \
ionic start app blank --type ionic-angular --no-deps --no-link --no-git || && \
cd /app && \
${PACKAGE_MANAGER} install && \
gulp _build-qm-android
#ionic cordova platform add android --no-resources && \
#ionic cordova build android
# -----------------------------------------------------------------------------
# Just in case you are installing from private git repositories, enable git
# credentials
# -----------------------------------------------------------------------------
RUN git config --global credential.helper store
# -----------------------------------------------------------------------------
# WORKDIR is the generic /app folder. All volume mounts of the actual project
# code need to be put into /app.
# -----------------------------------------------------------------------------
WORKDIR /app
# -----------------------------------------------------------------------------
# The script start.sh installs package.json and puts a watch on it. This makes
# sure that the project has allways the latest dependencies installed.
# -----------------------------------------------------------------------------
ENTRYPOINT ["/start.sh"]
# -----------------------------------------------------------------------------
# After /start.sh the bash is called.
# -----------------------------------------------------------------------------
CMD ["ionic", "serve", "-b", "-p", "8100", "--address", "0.0.0.0"]