Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #---------------------------------------------------- Image Creation with ENV [Task 1] --------------------------------------------#
- [ec2-user@ip-172-31-41-59 flask-project]$ cat Dockerfile
- FROM alpine:latest
- ENV FLASKHOMEDIR /var/flaskapp
- ENV FLASKUSER flask
- RUN mkdir -p $FLASKHOMEDIR
- WORKDIR $FLASKHOMEDIR
- COPY ./code/ .
- RUN adduser -h $FLASKHOMEDIR -D -s /bin/sh -u 1002 $FLASKUSER
- RUN chown -R $FLASKUSER. $FLASKHOMEDIR
- RUN apk update && apk add python3 py3-pip --no-cache
- RUN pip3 install -r requirements.txt
- USER $FLASKUSER
- EXPOSE 5000
- ENTRYPOINT ["python3"]
- CMD ["app.py"]
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ sudo useradd flaskv1 -u 1002 -s /usr/sbin/nolgin
- [ec2-user@ip-172-31-41-59 flask-project]$ tail -2 /etc/passwd
- ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
- flaskv1:x:1002:1002::/home/flaskv1:/usr/sbin/nolgin
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker image build -t myimage:v1 .
- Sending build context to Docker daemon 4.608kB
- Step 1/14 : FROM alpine:latest
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name pythonapp --restart always -d -p 8081:5000 myimage:v1
- b9aab13ad9d799af9d9182a1d44c8e225bd6e25990ee92f3cf019e215afbf41f
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container ls -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- b9aab13ad9d7 myimage:v1 "python3 app.py" 13 seconds ago Up 12 seconds 0.0.0.0:8081->5000/tcp, :::8081->5000/tcp pythonapp
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container exec pythonapp env
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- HOSTNAME=b9aab13ad9d7
- FLASKHOMEDIR=/var/flaskapp
- FLASKUSER=flask
- HOME=/var/flaskapp
- [ec2-user@ip-172-31-41-59 flask-project]$ ps aux | grep python3
- flaskv1 55711 0.3 2.9 33524 28308 ? Ss 09:31 0:00 python3 app.py
- ec2-user 55823 0.0 0.2 221796 2132 pts/0 S+ 09:32 0:00 grep --color=auto python3
- #---------------------------------------------------- COde edit [Task 1.1] --------------------------------------------#
- [ec2-user@ip-172-31-41-59 flask-project]$ cat code/app.py
- [ec2-user@ip-172-31-41-59 flask-project]$ cat code/app.py
- from flask import Flask
- import os
- app = Flask(__name__)
- @app.route('/')
- def index():
- return '<h1><center>This is Flask Application - Version1 </center></h1>'
- flask_port= os.getenv('FLASKPORT',5000)
- app.run(host='0.0.0.0', port=flask_port)
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker image build -t myimage:v2 .
- Sending build context to Docker daemon 4.608kB
- Step 1/14 : FROM alpine:latest
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name pythonapp2 --restart always -d -p 8082:5000 myimage:v2
- 8bd8a7ee5795857d5192143c6b4bc57206273bf81d039f1017f3a7ff7c92a177
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container ls -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 8bd8a7ee5795 myimage:v2 "python3 app.py" 48 seconds ago Up 47 seconds 0.0.0.0:8082->5000/tcp, :::8082->5000/tcp pythonapp2
- b9aab13ad9d7 myimage:v1 "python3 app.py" 15 minutes ago Up 15 minutes 0.0.0.0:8081->5000/tcp, :::8081->5000/tcp pythonapp
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name pythonapp3 --restart always -e FLASKPORT="8080" -d -p 8083:8080 myimage:v2
- 5d7bf6d1b0e88f4a673e402daa7ebcb57f840a2ea11dd1dd5f4a3b3eeffd72bc
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container exec pythonapp3 env
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- HOSTNAME=5d7bf6d1b0e8
- FLASKPORT=8080
- FLASKHOMEDIR=/var/flaskapp
- FLASKUSER=flask
- HOME=/var/flaskapp
- #---------------------------------------------------- Env variable [Task 1.2] --------------------------------------------#
- [ec2-user@ip-172-31-41-59 flask-project]$ cat Dockerfile
- FROM alpine:latest
- ENV FLASKHOMEDIR /var/flaskapp
- ENV FLASKUSER flask
- ENV FLASKPORT 5000
- RUN mkdir -p $FLASKHOMEDIR
- WORKDIR $FLASKHOMEDIR
- COPY ./code/ .
- RUN adduser -h $FLASKHOMEDIR -D -s /bin/sh -u 1002 $FLASKUSER
- RUN chown -R $FLASKUSER. $FLASKHOMEDIR
- RUN apk update && apk add python3 py3-pip --no-cache
- RUN pip3 install -r requirements.txt
- USER $FLASKUSER
- EXPOSE $FLASKPORT
- ENTRYPOINT ["python3"]
- CMD ["app.py"]
- [ec2-user@ip-172-31-41-59 flask-project]$ docker image build -t myimage:v3 .
- Sending build context to Docker daemon 4.608kB
- Step 1/15 : FROM alpine:latest
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name python4 --restart always -d -p 8084:5000 myimage:v3
- 296bc21160848d0cf0eaa49aee6171fd2019dc037da1126ac91eb23d446d4c6b
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container exec python4 env
- PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- HOSTNAME=296bc2116084
- FLASKHOMEDIR=/var/flaskapp
- FLASKUSER=flask
- FLASKPORT=5000
- HOME=/var/flaskapp
- [ec2-user@ip-172-31-41-59 flask-project]$
- #---------------------------------------------------- delete all [Task 1.3] --------------------------------------------#
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container stop $(docker container ls -a -q)
- d95227ec78d9
- 296bc2116084
- 5d7bf6d1b0e8
- 8bd8a7ee5795
- b9aab13ad9d7
- [ec2-user@ip-172-31-41-59 flask-project]$ docker system prune -a
- WARNING! This will remove:
- - all stopped containers
- - all networks not used by at least one container
- - all images without at least one container associated to them
- - all build cache
- Are you sure you want to continue? [y/N] y
- #---------------------------------------------------- HOSTNAME CONTAINER [Task 1.3] --------------------------------------------#
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run -d --name c1 -p 80:80 fujikomalan/k8s-hostname:3
- 0835da0b091f02107118d5f6d9ca2d8c2a006c869d4450e897ca1436027216fb
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container stop c1; docker container rm c1
- c1
- c1
- #---------------------------------------------------- Nginx Load balancing [Task 1.4] --------------------------------------------#
- [ec2-user@ip-172-31-41-59 flask-project]$ docker network create lb-net
- c36da080fb1d004c04eef444b448befa194e70141e1d725bc48545bd811ae72e
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name app1 -d --restart always --network lb-net fujikomalan/k8s-hostname:3
- 0271ca61b8f537d25729e3b01543ecffc2ceaebf5dce0ebfef42cb5bcc44a929
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name app2 -d --restart always --network lb-net fujikomalan/k8s-hostname:3
- 2195b953ba1078f6e329f68a07ba06674260c3d470ea0cb61affc82dc7f5b621
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name app3 -d --restart always --network lb-net fujikomalan/k8s-hostname:3
- a75833edfc4c6dd0ee3f0b9345e8be93ba687dd6d2a779c2fad515971b44393e
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container ls
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- a75833edfc4c fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 5 seconds ago Up 5 seconds 80/tcp app3
- 2195b953ba10 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 12 seconds ago Up 11 seconds 80/tcp app2
- 0271ca61b8f5 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 21 seconds ago Up 21 seconds 80/tcp app1
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run -d --name nginx nginx:alpine
- Unable to find image 'nginx:alpine' locally
- alpine: Pulling from library/nginx
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container cp nginx:/etc/nginx/conf.d/default.conf .
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ ls
- code default.conf Dockerfile
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container stop nginx
- nginx
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container rm nginx
- nginx
- [root@ip-172-31-41-59 _data]# cat /home/ec2-user/docker/flask/flask-project/default.conf
- server {
- listen 80;
- listen [::]:80;
- server_name localhost;
- #access_log /var/log/nginx/host.access.log main;
- location / {
- proxy_set_header HOST $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_pass http://python-app;
- }
- #error_page 404 /404.html;
- # redirect server error pages to the static page /50x.html
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root /usr/share/nginx/html;
- }
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
- #
- #location ~ \.php$ {
- # proxy_pass http://127.0.0.1;
- #}
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
- #
- #location ~ \.php$ {
- # root html;
- # fastcgi_pass 127.0.0.1:9000;
- # fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- # include fastcgi_params;
- #}
- # deny access to .htaccess files, if Apache's document root
- # concurs with nginx's one
- #
- #location ~ /\.ht {
- # deny all;
- #}
- }
- upstream python-app {
- server app1:80;
- server app2:80;
- server app3:80;
- }
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name nginx --restart always \
- > -p 80:80 \
- > -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf \
- > -d \
- > --network lb-net \
- > nginx:alpine
- 2a3c61cf0986f63bae5ac04a3510dcdfc367185d9e145736975414e0e9e175d4
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 2a3c61cf0986 nginx:alpine "/docker-entrypoint.…" 19 seconds ago Up 17 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
- a75833edfc4c fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp app3
- 2195b953ba10 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp app2
- 0271ca61b8f5 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp
- #---------------------------------------------------- Nginx custom Load balancing [Task 2] --------------------------------------------#
- [ec2-user@ip-172-31-41-59 flask-project]$ cat code/app.py
- from flask import Flask, request
- import os
- import socket
- app = Flask(__name__)
- @app.route('/')
- def index():
- hostname = socket.gethostname()
- ip = request.host.split(':')[0]
- return f'<h1><center>This is Flask Application - Version1</center></h1>' \
- f'<h1><center>Hostname: {hostname}</h1></center>' \
- f'<h1><center>IP: {ip}</h1></center>'
- flask_port = os.getenv('FLASKPORT', 5000)
- app.run(host='0.0.0.0', port=flask_port)
- [ec2-user@ip-172-31-41-59 flask-project]$ docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- version 3 022574cf321a 9 seconds ago 82.6MB
- version 2 9081761cc9e6 39 seconds ago 82.6MB
- version 1 1d2cb1ca7a73 About a minute ago 82.6MB
- [ec2-user@ip-172-31-41-59 flask-project]$ docker network create flask_net
- 4c53a108623c2430c28b0192d7da02fc53eca627a00b14342e61ddbe12262dc8
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name v1 --restart always --network flask_net -d version:1
- cd01481abab25d9c719e1f2d840cdcf970b53d726e831635264ede36a8ca584e
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name v2 --restart always --network flask_net -d version:2
- a85a62d650cc57c66355078567fd718fcdbbeb2e4f2e5f9f131ea527d2a5825a
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name v3 --restart always --network flask_net -d version:3
- c36a6e20b89ef64916f961a0482737e9ba2d31b65f8e831d2823b4928b6b1dcd
- [ec2-user@ip-172-31-41-59 flask-project]$
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container ls -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
- NAMES
- c36a6e20b89e version:3 "python3 app.py" 7 seconds ago Up 5 seconds 5000/tcp
- v3
- a85a62d650cc version:2 "python3 app.py" 15 seconds ago Up 13 seconds 5000/tcp
- v2
- cd01481abab2 version:1 "python3 app.py" 24 seconds ago Up 22 seconds 5000/tcp
- v1
- fb51382bffca nginx:alpine "/docker-entrypoint.…" 13 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
- a75833edfc4c fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
- app3
- 2195b953ba10 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
- app2
- 0271ca61b8f5 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container stop nginx
- nginx
- [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name nginx1 --network flask_net -v nginx-vol:/etc/nginx/conf.d/ -d -p 80:80 --restart always nginx:alpine
- 62a6ad0bdc5702e3d9e7ef412e77cce25afdfa80f7df42bff112782c2e41e17d
- [root@ip-172-31-41-59 _data]# cat default.conf
- server {
- listen 80;
- listen [::]:80;
- server_name localhost;
- #access_log /var/log/nginx/host.access.log main;
- location / {
- proxy_set_header HOST $host;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_pass http://flask-app;
- }
- #error_page 404 /404.html;
- # redirect server error pages to the static page /50x.html
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root /usr/share/nginx/html;
- }
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
- #
- #location ~ \.php$ {
- # proxy_pass http://127.0.0.1;
- #}
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
- #
- #location ~ \.php$ {
- # root html;
- # fastcgi_pass 127.0.0.1:9000;
- # fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- # include fastcgi_params;
- #}
- # deny access to .htaccess files, if Apache's document root
- # concurs with nginx's one
- #
- #location ~ /\.ht {
- # deny all;
- #}
- }
- upstream flask-app {
- server v1:5000;
- server v2:5000;
- server v3:5000;
- }
- [root@ip-172-31-41-59 _data]# docker container exec nginx1 nginx -t
- nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
- nginx: configuration file /etc/nginx/nginx.conf test is successful
- [root@ip-172-31-41-59 _data]#
- [root@ip-172-31-41-59 _data]# docker container restart nginx1
- nginx1
- [root@ip-172-31-41-59 _data]# docker container ls -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
- NAMES
- d4866bb0101b nginx:alpine "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx1
- c36a6e20b89e version:3 "python3 app.py" 23 minutes ago Up 23 minutes 5000/tcp
- v3
- a85a62d650cc version:2 "python3 app.py" 24 minutes ago Up 24 minutes 5000/tcp
- v2
- cd01481abab2 version:1 "python3 app.py" 24 minutes ago Up 24 minutes 5000/tcp
- v1
- fb51382bffca nginx:alpine "/docker-entrypoint.…" 37 minutes ago Exited (128) 17 minutes ago
- nginx
- a75833edfc4c fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
- app3
- 2195b953ba10 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
- app2
- 0271ca61b8f5 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
- app1
Advertisement
Add Comment
Please, Sign In to add comment