chrisluiz16

day 10

Jun 1st, 2023
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.70 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #---------------------------------------------------- Image Creation with ENV [Task 1] --------------------------------------------#
  5.  
  6.  
  7. [ec2-user@ip-172-31-41-59 flask-project]$ cat Dockerfile
  8. FROM alpine:latest
  9.  
  10. ENV FLASKHOMEDIR /var/flaskapp
  11.  
  12. ENV FLASKUSER flask
  13.  
  14. RUN mkdir -p $FLASKHOMEDIR
  15.  
  16. WORKDIR $FLASKHOMEDIR
  17.  
  18. COPY ./code/ .
  19.  
  20. RUN adduser -h $FLASKHOMEDIR -D -s /bin/sh -u 1002 $FLASKUSER
  21.  
  22. RUN chown -R $FLASKUSER. $FLASKHOMEDIR
  23.  
  24. RUN apk update && apk add python3 py3-pip --no-cache
  25.  
  26. RUN pip3 install -r requirements.txt
  27.  
  28. USER $FLASKUSER
  29.  
  30. EXPOSE 5000
  31.  
  32. ENTRYPOINT ["python3"]
  33.  
  34. CMD ["app.py"]
  35.  
  36.  
  37. [ec2-user@ip-172-31-41-59 flask-project]$
  38. [ec2-user@ip-172-31-41-59 flask-project]$
  39. [ec2-user@ip-172-31-41-59 flask-project]$ sudo useradd flaskv1 -u 1002 -s /usr/sbin/nolgin
  40. [ec2-user@ip-172-31-41-59 flask-project]$ tail -2 /etc/passwd
  41. ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
  42. flaskv1:x:1002:1002::/home/flaskv1:/usr/sbin/nolgin
  43.  
  44. [ec2-user@ip-172-31-41-59 flask-project]$
  45. [ec2-user@ip-172-31-41-59 flask-project]$
  46. [ec2-user@ip-172-31-41-59 flask-project]$ docker image build -t myimage:v1 .
  47. Sending build context to Docker daemon 4.608kB
  48. Step 1/14 : FROM alpine:latest
  49.  
  50. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name pythonapp --restart always -d -p 8081:5000 myimage:v1
  51. b9aab13ad9d799af9d9182a1d44c8e225bd6e25990ee92f3cf019e215afbf41f
  52. [ec2-user@ip-172-31-41-59 flask-project]$
  53. [ec2-user@ip-172-31-41-59 flask-project]$
  54. [ec2-user@ip-172-31-41-59 flask-project]$ docker container ls -a
  55. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  56. b9aab13ad9d7 myimage:v1 "python3 app.py" 13 seconds ago Up 12 seconds 0.0.0.0:8081->5000/tcp, :::8081->5000/tcp pythonapp
  57. [ec2-user@ip-172-31-41-59 flask-project]$
  58. [ec2-user@ip-172-31-41-59 flask-project]$ docker container exec pythonapp env
  59. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  60. HOSTNAME=b9aab13ad9d7
  61. FLASKHOMEDIR=/var/flaskapp
  62. FLASKUSER=flask
  63. HOME=/var/flaskapp
  64.  
  65. [ec2-user@ip-172-31-41-59 flask-project]$ ps aux | grep python3
  66. flaskv1 55711 0.3 2.9 33524 28308 ? Ss 09:31 0:00 python3 app.py
  67. ec2-user 55823 0.0 0.2 221796 2132 pts/0 S+ 09:32 0:00 grep --color=auto python3
  68.  
  69.  
  70.  
  71.  
  72. #---------------------------------------------------- COde edit [Task 1.1] --------------------------------------------#
  73.  
  74.  
  75. [ec2-user@ip-172-31-41-59 flask-project]$ cat code/app.py
  76. [ec2-user@ip-172-31-41-59 flask-project]$ cat code/app.py
  77. from flask import Flask
  78. import os
  79.  
  80. app = Flask(__name__)
  81.  
  82. @app.route('/')
  83. def index():
  84.  
  85. return '<h1><center>This is Flask Application - Version1 </center></h1>'
  86.  
  87. flask_port= os.getenv('FLASKPORT',5000)
  88. app.run(host='0.0.0.0', port=flask_port)
  89.  
  90.  
  91. [ec2-user@ip-172-31-41-59 flask-project]$
  92. [ec2-user@ip-172-31-41-59 flask-project]$
  93. [ec2-user@ip-172-31-41-59 flask-project]$
  94. [ec2-user@ip-172-31-41-59 flask-project]$
  95. [ec2-user@ip-172-31-41-59 flask-project]$ docker image build -t myimage:v2 .
  96. Sending build context to Docker daemon 4.608kB
  97. Step 1/14 : FROM alpine:latest
  98.  
  99. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name pythonapp2 --restart always -d -p 8082:5000 myimage:v2
  100. 8bd8a7ee5795857d5192143c6b4bc57206273bf81d039f1017f3a7ff7c92a177
  101. [ec2-user@ip-172-31-41-59 flask-project]$
  102. [ec2-user@ip-172-31-41-59 flask-project]$
  103. [ec2-user@ip-172-31-41-59 flask-project]$ docker container ls -a
  104. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  105. 8bd8a7ee5795 myimage:v2 "python3 app.py" 48 seconds ago Up 47 seconds 0.0.0.0:8082->5000/tcp, :::8082->5000/tcp pythonapp2
  106. b9aab13ad9d7 myimage:v1 "python3 app.py" 15 minutes ago Up 15 minutes 0.0.0.0:8081->5000/tcp, :::8081->5000/tcp pythonapp
  107.  
  108. [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
  109. 5d7bf6d1b0e88f4a673e402daa7ebcb57f840a2ea11dd1dd5f4a3b3eeffd72bc
  110. [ec2-user@ip-172-31-41-59 flask-project]$
  111. [ec2-user@ip-172-31-41-59 flask-project]$
  112. [ec2-user@ip-172-31-41-59 flask-project]$ docker container exec pythonapp3 env
  113. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  114. HOSTNAME=5d7bf6d1b0e8
  115. FLASKPORT=8080
  116. FLASKHOMEDIR=/var/flaskapp
  117. FLASKUSER=flask
  118. HOME=/var/flaskapp
  119.  
  120.  
  121. #---------------------------------------------------- Env variable [Task 1.2] --------------------------------------------#
  122.  
  123.  
  124. [ec2-user@ip-172-31-41-59 flask-project]$ cat Dockerfile
  125. FROM alpine:latest
  126.  
  127. ENV FLASKHOMEDIR /var/flaskapp
  128.  
  129. ENV FLASKUSER flask
  130.  
  131. ENV FLASKPORT 5000
  132.  
  133. RUN mkdir -p $FLASKHOMEDIR
  134.  
  135. WORKDIR $FLASKHOMEDIR
  136.  
  137. COPY ./code/ .
  138.  
  139. RUN adduser -h $FLASKHOMEDIR -D -s /bin/sh -u 1002 $FLASKUSER
  140.  
  141. RUN chown -R $FLASKUSER. $FLASKHOMEDIR
  142.  
  143. RUN apk update && apk add python3 py3-pip --no-cache
  144.  
  145. RUN pip3 install -r requirements.txt
  146.  
  147. USER $FLASKUSER
  148.  
  149. EXPOSE $FLASKPORT
  150.  
  151. ENTRYPOINT ["python3"]
  152.  
  153. CMD ["app.py"]
  154.  
  155.  
  156. [ec2-user@ip-172-31-41-59 flask-project]$ docker image build -t myimage:v3 .
  157. Sending build context to Docker daemon 4.608kB
  158. Step 1/15 : FROM alpine:latest
  159.  
  160.  
  161. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name python4 --restart always -d -p 8084:5000 myimage:v3
  162. 296bc21160848d0cf0eaa49aee6171fd2019dc037da1126ac91eb23d446d4c6b
  163. [ec2-user@ip-172-31-41-59 flask-project]$
  164. [ec2-user@ip-172-31-41-59 flask-project]$
  165. [ec2-user@ip-172-31-41-59 flask-project]$ docker container exec python4 env
  166. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  167. HOSTNAME=296bc2116084
  168. FLASKHOMEDIR=/var/flaskapp
  169. FLASKUSER=flask
  170. FLASKPORT=5000
  171. HOME=/var/flaskapp
  172. [ec2-user@ip-172-31-41-59 flask-project]$
  173.  
  174. #---------------------------------------------------- delete all [Task 1.3] --------------------------------------------#
  175.  
  176.  
  177. [ec2-user@ip-172-31-41-59 flask-project]$ docker container stop $(docker container ls -a -q)
  178. d95227ec78d9
  179. 296bc2116084
  180. 5d7bf6d1b0e8
  181. 8bd8a7ee5795
  182. b9aab13ad9d7
  183. [ec2-user@ip-172-31-41-59 flask-project]$ docker system prune -a
  184. WARNING! This will remove:
  185. - all stopped containers
  186. - all networks not used by at least one container
  187. - all images without at least one container associated to them
  188. - all build cache
  189.  
  190. Are you sure you want to continue? [y/N] y
  191.  
  192.  
  193. #---------------------------------------------------- HOSTNAME CONTAINER [Task 1.3] --------------------------------------------#
  194.  
  195.  
  196. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run -d --name c1 -p 80:80 fujikomalan/k8s-hostname:3
  197. 0835da0b091f02107118d5f6d9ca2d8c2a006c869d4450e897ca1436027216fb
  198.  
  199. [ec2-user@ip-172-31-41-59 flask-project]$ docker container stop c1; docker container rm c1
  200. c1
  201. c1
  202.  
  203.  
  204. #---------------------------------------------------- Nginx Load balancing [Task 1.4] --------------------------------------------#
  205.  
  206. [ec2-user@ip-172-31-41-59 flask-project]$ docker network create lb-net
  207. c36da080fb1d004c04eef444b448befa194e70141e1d725bc48545bd811ae72e
  208.  
  209.  
  210. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name app1 -d --restart always --network lb-net fujikomalan/k8s-hostname:3
  211. 0271ca61b8f537d25729e3b01543ecffc2ceaebf5dce0ebfef42cb5bcc44a929
  212. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name app2 -d --restart always --network lb-net fujikomalan/k8s-hostname:3
  213. 2195b953ba1078f6e329f68a07ba06674260c3d470ea0cb61affc82dc7f5b621
  214. [ec2-user@ip-172-31-41-59 flask-project]$
  215. [ec2-user@ip-172-31-41-59 flask-project]$
  216. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name app3 -d --restart always --network lb-net fujikomalan/k8s-hostname:3
  217. a75833edfc4c6dd0ee3f0b9345e8be93ba687dd6d2a779c2fad515971b44393e
  218. [ec2-user@ip-172-31-41-59 flask-project]$
  219. [ec2-user@ip-172-31-41-59 flask-project]$
  220. [ec2-user@ip-172-31-41-59 flask-project]$ docker container ls
  221. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  222. a75833edfc4c fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 5 seconds ago Up 5 seconds 80/tcp app3
  223. 2195b953ba10 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 12 seconds ago Up 11 seconds 80/tcp app2
  224. 0271ca61b8f5 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 21 seconds ago Up 21 seconds 80/tcp app1
  225.  
  226. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run -d --name nginx nginx:alpine
  227. Unable to find image 'nginx:alpine' locally
  228. alpine: Pulling from library/nginx
  229.  
  230. [ec2-user@ip-172-31-41-59 flask-project]$ docker container cp nginx:/etc/nginx/conf.d/default.conf .
  231. [ec2-user@ip-172-31-41-59 flask-project]$
  232. [ec2-user@ip-172-31-41-59 flask-project]$ ls
  233. code default.conf Dockerfile
  234. [ec2-user@ip-172-31-41-59 flask-project]$ docker container stop nginx
  235. nginx
  236. [ec2-user@ip-172-31-41-59 flask-project]$ docker container rm nginx
  237. nginx
  238.  
  239. [root@ip-172-31-41-59 _data]# cat /home/ec2-user/docker/flask/flask-project/default.conf
  240. server {
  241. listen 80;
  242. listen [::]:80;
  243. server_name localhost;
  244.  
  245. #access_log /var/log/nginx/host.access.log main;
  246.  
  247. location / {
  248. proxy_set_header HOST $host;
  249. proxy_set_header X-Forwarded-Proto $scheme;
  250. proxy_set_header X-Real-IP $remote_addr;
  251. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  252. proxy_pass http://python-app;
  253.  
  254. }
  255.  
  256. #error_page 404 /404.html;
  257.  
  258. # redirect server error pages to the static page /50x.html
  259. #
  260. error_page 500 502 503 504 /50x.html;
  261. location = /50x.html {
  262. root /usr/share/nginx/html;
  263. }
  264.  
  265. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  266. #
  267. #location ~ \.php$ {
  268. # proxy_pass http://127.0.0.1;
  269. #}
  270.  
  271. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  272. #
  273. #location ~ \.php$ {
  274. # root html;
  275. # fastcgi_pass 127.0.0.1:9000;
  276. # fastcgi_index index.php;
  277. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  278. # include fastcgi_params;
  279. #}
  280.  
  281. # deny access to .htaccess files, if Apache's document root
  282. # concurs with nginx's one
  283. #
  284. #location ~ /\.ht {
  285. # deny all;
  286. #}
  287. }
  288.  
  289. upstream python-app {
  290. server app1:80;
  291. server app2:80;
  292. server app3:80;
  293. }
  294.  
  295. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name nginx --restart always \
  296. > -p 80:80 \
  297. > -v $(pwd)/default.conf:/etc/nginx/conf.d/default.conf \
  298. > -d \
  299. > --network lb-net \
  300. > nginx:alpine
  301. 2a3c61cf0986f63bae5ac04a3510dcdfc367185d9e145736975414e0e9e175d4
  302.  
  303. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  304. 2a3c61cf0986 nginx:alpine "/docker-entrypoint.…" 19 seconds ago Up 17 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
  305. a75833edfc4c fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp app3
  306. 2195b953ba10 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp app2
  307. 0271ca61b8f5 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" About an hour ago Up About an hour 80/tcp
  308.  
  309.  
  310.  
  311.  
  312. #---------------------------------------------------- Nginx custom Load balancing [Task 2] --------------------------------------------#
  313.  
  314.  
  315. [ec2-user@ip-172-31-41-59 flask-project]$ cat code/app.py
  316. from flask import Flask, request
  317. import os
  318. import socket
  319.  
  320. app = Flask(__name__)
  321.  
  322. @app.route('/')
  323. def index():
  324. hostname = socket.gethostname()
  325. ip = request.host.split(':')[0]
  326. return f'<h1><center>This is Flask Application - Version1</center></h1>' \
  327. f'<h1><center>Hostname: {hostname}</h1></center>' \
  328. f'<h1><center>IP: {ip}</h1></center>'
  329.  
  330. flask_port = os.getenv('FLASKPORT', 5000)
  331. app.run(host='0.0.0.0', port=flask_port)
  332.  
  333.  
  334. [ec2-user@ip-172-31-41-59 flask-project]$ docker image ls
  335. REPOSITORY TAG IMAGE ID CREATED SIZE
  336. version 3 022574cf321a 9 seconds ago 82.6MB
  337. version 2 9081761cc9e6 39 seconds ago 82.6MB
  338. version 1 1d2cb1ca7a73 About a minute ago 82.6MB
  339.  
  340.  
  341. [ec2-user@ip-172-31-41-59 flask-project]$ docker network create flask_net
  342. 4c53a108623c2430c28b0192d7da02fc53eca627a00b14342e61ddbe12262dc8
  343.  
  344.  
  345. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name v1 --restart always --network flask_net -d version:1
  346. cd01481abab25d9c719e1f2d840cdcf970b53d726e831635264ede36a8ca584e
  347. [ec2-user@ip-172-31-41-59 flask-project]$
  348. [ec2-user@ip-172-31-41-59 flask-project]$
  349. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name v2 --restart always --network flask_net -d version:2
  350. a85a62d650cc57c66355078567fd718fcdbbeb2e4f2e5f9f131ea527d2a5825a
  351. [ec2-user@ip-172-31-41-59 flask-project]$
  352. [ec2-user@ip-172-31-41-59 flask-project]$ docker container run --name v3 --restart always --network flask_net -d version:3
  353. c36a6e20b89ef64916f961a0482737e9ba2d31b65f8e831d2823b4928b6b1dcd
  354. [ec2-user@ip-172-31-41-59 flask-project]$
  355. [ec2-user@ip-172-31-41-59 flask-project]$ docker container ls -a
  356. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
  357. NAMES
  358. c36a6e20b89e version:3 "python3 app.py" 7 seconds ago Up 5 seconds 5000/tcp
  359. v3
  360. a85a62d650cc version:2 "python3 app.py" 15 seconds ago Up 13 seconds 5000/tcp
  361. v2
  362. cd01481abab2 version:1 "python3 app.py" 24 seconds ago Up 22 seconds 5000/tcp
  363. v1
  364. fb51382bffca nginx:alpine "/docker-entrypoint.…" 13 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
  365. a75833edfc4c fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
  366. app3
  367. 2195b953ba10 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
  368. app2
  369. 0271ca61b8f5 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
  370.  
  371.  
  372.  
  373. [ec2-user@ip-172-31-41-59 flask-project]$ docker container stop nginx
  374. nginx
  375.  
  376. [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
  377. 62a6ad0bdc5702e3d9e7ef412e77cce25afdfa80f7df42bff112782c2e41e17d
  378. [root@ip-172-31-41-59 _data]# cat default.conf
  379. server {
  380. listen 80;
  381. listen [::]:80;
  382. server_name localhost;
  383.  
  384. #access_log /var/log/nginx/host.access.log main;
  385.  
  386. location / {
  387. proxy_set_header HOST $host;
  388. proxy_set_header X-Forwarded-Proto $scheme;
  389. proxy_set_header X-Real-IP $remote_addr;
  390. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  391. proxy_pass http://flask-app;
  392.  
  393. }
  394.  
  395. #error_page 404 /404.html;
  396.  
  397. # redirect server error pages to the static page /50x.html
  398. #
  399. error_page 500 502 503 504 /50x.html;
  400. location = /50x.html {
  401. root /usr/share/nginx/html;
  402. }
  403.  
  404. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  405. #
  406. #location ~ \.php$ {
  407. # proxy_pass http://127.0.0.1;
  408. #}
  409.  
  410. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  411. #
  412. #location ~ \.php$ {
  413. # root html;
  414. # fastcgi_pass 127.0.0.1:9000;
  415. # fastcgi_index index.php;
  416. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  417. # include fastcgi_params;
  418. #}
  419.  
  420. # deny access to .htaccess files, if Apache's document root
  421. # concurs with nginx's one
  422. #
  423. #location ~ /\.ht {
  424. # deny all;
  425. #}
  426. }
  427.  
  428. upstream flask-app {
  429. server v1:5000;
  430. server v2:5000;
  431. server v3:5000;
  432.  
  433. }
  434.  
  435.  
  436. [root@ip-172-31-41-59 _data]# docker container exec nginx1 nginx -t
  437. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  438. nginx: configuration file /etc/nginx/nginx.conf test is successful
  439. [root@ip-172-31-41-59 _data]#
  440.  
  441. [root@ip-172-31-41-59 _data]# docker container restart nginx1
  442. nginx1
  443.  
  444. [root@ip-172-31-41-59 _data]# docker container ls -a
  445. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
  446. NAMES
  447. d4866bb0101b nginx:alpine "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx1
  448. c36a6e20b89e version:3 "python3 app.py" 23 minutes ago Up 23 minutes 5000/tcp
  449. v3
  450. a85a62d650cc version:2 "python3 app.py" 24 minutes ago Up 24 minutes 5000/tcp
  451. v2
  452. cd01481abab2 version:1 "python3 app.py" 24 minutes ago Up 24 minutes 5000/tcp
  453. v1
  454. fb51382bffca nginx:alpine "/docker-entrypoint.…" 37 minutes ago Exited (128) 17 minutes ago
  455. nginx
  456. a75833edfc4c fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
  457. app3
  458. 2195b953ba10 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
  459. app2
  460. 0271ca61b8f5 fujikomalan/k8s-hostname:3 "/docker-entrypoint.…" 2 hours ago Up 2 hours 80/tcp
  461. app1
Advertisement
Add Comment
Please, Sign In to add comment