Skip to content

Commit ad6e04c

Browse files
authored
Tt 623 refactor create frontend base docker image for dev prod (#873)
* Split dockerfiles to dev, prod and test * Adjust to split the docker image base of dev and test * Make adjusts into docker-compose file and make file to execute test * Modify the name of the test image and delete the prod service in the docker-compose.yml file * Modify the dockerfile and docker-compose to generate an image for testing * Create dockerfile for dev and prod and adjust the files organization
1 parent b4d405e commit ad6e04c

File tree

6 files changed

+101
-63
lines changed

6 files changed

+101
-63
lines changed

Docker/Dockerfile.dev

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
FROM node:14
2+
3+
ENV USERNAME timetracker
4+
ENV HOME /home/${USERNAME}
5+
RUN useradd -ms /bin/bash ${USERNAME}
6+
7+
WORKDIR ${HOME}/time-tracker-ui
8+
COPY . .
9+
RUN chown ${USERNAME}:${USERNAME} -R ${HOME}/time-tracker-ui \
10+
&& chmod -R 777 ${HOME}/time-tracker-ui
11+
12+
USER ${USERNAME}
13+
RUN npm cache clean --force && npm install
14+
EXPOSE 4200
15+
CMD npm run config && ${HOME}/time-tracker-ui/node_modules/.bin/ng serve --host 0.0.0.0 --disableHostCheck

Docker/Dockerfile.test

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
FROM node:14
2+
3+
ARG CHROME_VERSION=65.0.3325.181
4+
ARG CHROME_DRIVER_VERSION=2.37
5+
ENV USERNAME timetracker
6+
ENV HOME /home/${USERNAME}
7+
ENV CHROME_BIN /opt/google/chrome/google-chrome
8+
9+
#Essential tools and xvfb
10+
RUN apt-get update && apt-get install -y \
11+
software-properties-common \
12+
unzip \
13+
curl \
14+
wget \
15+
xvfb
16+
17+
#Chrome browser to run the tests
18+
RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add \
19+
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
20+
&& dpkg -i google-chrome-stable_current_amd64.deb || true
21+
RUN apt-get install -y -f \
22+
&& rm -rf /var/lib/apt/lists/*
23+
24+
#Disable the SUID sandbox so that chrome can launch without being in a privileged container
25+
RUN dpkg-divert --add --rename --divert /opt/google/chrome/google-chrome.real /opt/google/chrome/google-chrome \
26+
&& echo "#! /bin/bash\nexec /opt/google/chrome/google-chrome.real --no-sandbox --disable-setuid-sandbox \"\$@\"" > /opt/google/chrome/google-chrome \
27+
&& chmod 755 /opt/google/chrome/google-chrome
28+
29+
#Chrome Driver
30+
RUN mkdir -p /opt/selenium \
31+
&& curl http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -o /opt/selenium/chromedriver_linux64.zip \
32+
&& cd /opt/selenium; unzip /opt/selenium/chromedriver_linux64.zip; rm -rf chromedriver_linux64.zip; ln -fs /opt/selenium/chromedriver /usr/local/bin/chromedriver;
33+
34+
RUN useradd -ms /bin/bash ${USERNAME}
35+
36+
WORKDIR ${HOME}/time-tracker-ui
37+
COPY . .
38+
RUN rm -f .env
39+
RUN chown ${USERNAME}:${USERNAME} -R ${HOME}/time-tracker-ui
40+
RUN chmod -R 777 ${HOME}/time-tracker-ui
41+
42+
USER ${USERNAME}
43+
COPY .env .
44+
EXPOSE 4200
45+
EXPOSE 9876
46+
RUN npm cache clean --force && npm install
47+
CMD npm run config && npm run ci-test

Dockerfile

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,65 +2,27 @@ FROM node:14 AS development
22

33
ENV USERNAME timetracker
44
ENV HOME /home/${USERNAME}
5-
ENV CHROME_BIN /opt/google/chrome/google-chrome
6-
#Essential tools and xvfb
7-
RUN apt-get update && apt-get install -y \
8-
software-properties-common \
9-
unzip \
10-
curl \
11-
wget \
12-
xvfb
13-
14-
#Chrome browser to run the tests
15-
ARG CHROME_VERSION=65.0.3325.181
16-
RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add \
17-
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
18-
&& dpkg -i google-chrome-stable_current_amd64.deb || true
19-
RUN apt-get install -y -f \
20-
&& rm -rf /var/lib/apt/lists/*
21-
22-
#Disable the SUID sandbox so that chrome can launch without being in a privileged container
23-
RUN dpkg-divert --add --rename --divert /opt/google/chrome/google-chrome.real /opt/google/chrome/google-chrome \
24-
&& echo "#! /bin/bash\nexec /opt/google/chrome/google-chrome.real --no-sandbox --disable-setuid-sandbox \"\$@\"" > /opt/google/chrome/google-chrome \
25-
&& chmod 755 /opt/google/chrome/google-chrome
26-
27-
#Chrome Driver
28-
ARG CHROME_DRIVER_VERSION=2.37
29-
RUN mkdir -p /opt/selenium \
30-
&& curl http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -o /opt/selenium/chromedriver_linux64.zip \
31-
&& cd /opt/selenium; unzip /opt/selenium/chromedriver_linux64.zip; rm -rf chromedriver_linux64.zip; ln -fs /opt/selenium/chromedriver /usr/local/bin/chromedriver;
32-
335
RUN useradd -ms /bin/bash ${USERNAME}
34-
356
WORKDIR ${HOME}/time-tracker-ui
367
COPY . .
37-
RUN rm -f .env
388
RUN chown ${USERNAME}:${USERNAME} -R ${HOME}/time-tracker-ui
399
RUN chmod -R 777 ${HOME}/time-tracker-ui
4010

41-
4211
USER ${USERNAME}
4312
RUN npm cache clean --force && npm install
44-
EXPOSE 4200
45-
EXPOSE 9876
46-
CMD npm run config && ${HOME}/time-tracker-ui/node_modules/.bin/ng serve --host 0.0.0.0 --disableHostCheck
47-
48-
4913

5014
FROM development as build
5115
COPY .env .
5216
RUN npm run config && npm run build
5317

54-
55-
5618
FROM nginx:1.21 AS production
5719

5820
ENV USERNAME app
5921
RUN useradd -ms /bin/bash ${USERNAME}
6022

6123
COPY nginx.conf /etc/nginx/conf.d/default.conf
6224
COPY --from=build /home/timetracker/time-tracker-ui/dist/time-tracker /usr/share/nginx/html
63-
25+
COPY .env /usr/share/nginx/html
6426
RUN chown -R ${USERNAME}:${USERNAME} /var/cache/nginx && \
6527
chown -R ${USERNAME}:${USERNAME} /var/log/nginx && \
6628
chown -R ${USERNAME}:${USERNAME} /etc/nginx/conf.d
@@ -74,4 +36,4 @@ RUN touch /var/run/nginx.pid && chown -R ${USERNAME}:${USERNAME} /var/run/nginx.
7436

7537
# USER ${USERNAME}
7638

77-
EXPOSE 80
39+
EXPOSE 80

Makefile

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ help: ## Show this help message.
1111

1212
.PHONY: build
1313
build: ## Create docker image with dependencies needed for development.
14-
docker-compose build
14+
docker-compose build timetracker_ui
1515

1616
.PHONY: cleanup
1717
cleanup: ## Delete image timetracker_ui
1818
docker rmi timetracker_ui
1919

2020
.PHONY: run
21-
run: ## Execute timetracker_ui docker containe.
22-
docker-compose up -d
21+
run: ## Execute timetracker_ui dev docker containe.
22+
docker-compose up -d timetracker_ui
2323

2424
.PHONY: logs
2525
logs: ## Show logs of timetracker_ui.
@@ -40,8 +40,9 @@ remove: ## Delete container timetracker_ui.
4040

4141
.PHONY: test
4242
test: ## Run all tests on docker container timetracker_ui at the CLI.
43-
docker-compose -f docker-compose.yml up -d
44-
docker exec timetracker_ui bash -c "npm run ci-test"
43+
docker-compose build timetracker_ui_test
44+
docker-compose up -d timetracker_ui_test
45+
docker logs -f timetracker_ui_test
4546

4647
.PHONY: testdev
4748
testdev: ## Run all tests on docker container timetracker_ui at the Dev
@@ -59,7 +60,7 @@ build_prod: ## Create docker image with dependencies needed for production.
5960

6061
.PHONY: run_prod
6162
run_prod: ## Execute timetracker_ui_prod docker container.
62-
docker run -d -p 4200:4200 --name timetracker_ui_prod timetracker_ui_prod
63+
docker run -d -p 80:80 --env-file ./.env --name timetracker_ui_prod timetracker_ui_prod
6364

6465
.PHONY: stop_prod
6566
stop_prod: ## Stop container timetracker_ui_prod.

docker-compose.dev.yml

Lines changed: 0 additions & 13 deletions
This file was deleted.

docker-compose.yml

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,39 @@
11
version: '3.9'
22
services:
3-
time-tracker-ui:
3+
timetracker_ui:
44
container_name: timetracker_ui
55
image: timetracker_ui
66
build:
7-
target: development
87
context: .
9-
dockerfile: ./Dockerfile
8+
dockerfile: ./Docker/Dockerfile.dev
9+
ports:
10+
- 4200:4200
11+
- 9876:9876
12+
environment:
13+
AUTHORITY: ${AUTHORITY}
14+
CLIENT_ID: ${CLIENT_ID}
15+
SCOPES: ${SCOPES}
16+
STACK_EXCHANGE_ID: ${STACK_EXCHANGE_ID}
17+
STACK_EXCHANGE_ACCESS_TOKEN: ${STACK_EXCHANGE_ACCESS_TOKEN}
18+
AZURE_APP_CONFIGURATION_CONNECTION_STRING: ${AZURE_APP_CONFIGURATION_CONNECTION_STRING}
19+
AUTHORITY_JSON: ${AUTHORITY_JSON}
20+
CLIENT_ID_JSON: ${CLIENT_ID_JSON}
21+
SCOPES_JSON: ${SCOPES_JSON}
22+
volumes:
23+
- ./src:/home/timetracker/time-tracker-ui/src/
24+
- ./scripts:/home/timetracker/time-tracker-ui/scripts/
25+
- ./e2e:/home/timetracker/time-tracker-ui/e2e/
26+
- ./coverage:/home/timetracker/time-tracker-ui/coverage
27+
- ./angular.json:/home/timetracker/time-tracker-ui/angular.json
28+
- ./karma.conf.js:/home/timetracker/time-tracker-ui/karma.conf.js
29+
- ./package.json:/home/timetracker/time-tracker-ui/package.json
30+
- ./webpack.config.js:/home/timetracker/time-tracker-ui/webpack.config.js
31+
timetracker_ui_test:
32+
container_name: timetracker_ui_test
33+
image: timetracker_ui_test
34+
build:
35+
context: .
36+
dockerfile: ./Docker/Dockerfile.test
1037
ports:
1138
- 4200:4200
1239
- 9876:9876
@@ -21,4 +48,3 @@ services:
2148
AUTHORITY_JSON: ${AUTHORITY_JSON}
2249
CLIENT_ID_JSON: ${CLIENT_ID_JSON}
2350
SCOPES_JSON: ${SCOPES_JSON}
24-

0 commit comments

Comments
 (0)