docker(도커) 및 쿠버네티스
docker-compose.yml 실습(postgres 로그인정보 넘겨주기)
데이터왕
2023. 12. 29. 17:24
목표 : postgres 로그인 정보를, docker-compose.yml 파일에 넣어 넘겨주는 실습을 진행
실습진행
- 깃에서 실습파일 다운
weare@DESKTOP-BE1I4GE:~$ git clone https://github.com/learndataeng/example-voting-app.git
Cloning into 'example-voting-app'...
remote: Enumerating objects: 1087, done.
remote: Total 1087 (delta 0), reused 0 (delta 0), pack-reused 1087
Receiving objects: 100% (1087/1087), 1.14 MiB | 21.26 MiB/s, done.
Resolving deltas: 100% (407/407), done. - 해당 파일로 이동
weare@DESKTOP-BE1I4GE:~$ cd example-voting-app - 파일 안에 yml 파일 빌드
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker-compose -f docker-compose.mac.yml build
중략
+만약 worker가 빌드가 안되고, 그 이유가 Buildx 미설치로 인한 에러라면
https://allofdater.tistory.com/37 를 참조한다. - 만들어진 이미지 확인
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
example-voting-app_worker latest 79f4f5ff65ba 36 minutes ago 194MB
example-voting-app_result latest 21441b000470 37 minutes ago 220MB
example-voting-app_vote latest 68b2f101195b 37 minutes ago 145MB - yml파일 빌드 수행
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker-compose -f docker-compose.mac.yml build
redis uses an image, skipping
db uses an image, skipping
Building vote
[+] Building 7.1s (11/11) FINISHED - 프로젝트에 정의된 모든 서비스의 이미지를 최신 버전으로 업데이트하고, 공식 이미지 postgres, redis를 받아옴
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker-compose -f docker-compose.mac.yml pull - 다시 이미지를 확인하면 postgres, redis 두개가 추가 돼있음
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
example-voting-app_worker latest 79f4f5ff65ba 43 minutes ago 194MB
example-voting-app_result latest 21441b000470 44 minutes ago 220MB
example-voting-app_vote latest 68b2f101195b 44 minutes ago 145MB
postgres 15-alpine c94362bdb5ee 2 weeks ago 240MB
redis alpine d2d4688fcebe 3 weeks ago 41MB - 빌드하고, 컨테이너만들고, 컨테이너실행 3가지를 한번에 하는 명령어 docker-compose up
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker-compose up
(중략)
vote_1 | 127.0.0.1 - - [29/Dec/2023 07:23:44] "GET / HTTP/1.1" 200 -
vote_1 | 127.0.0.1 - - [29/Dec/2023 07:23:59] "GET / HTTP/1.1" 200 - - 동작 확인
윈도우
http://localhost:5000/
http://localhost:5001/
둘다 접속(맥은 5001,5002로 들어갈것) - 실행중인 컨테이너 확인
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------
example-voting-app_db_1 docker-entrypoint.sh postgres Up (healthy) 5432/tcp
example-voting-app_redis_1 docker-entrypoint.sh redis ... Up (healthy) 6379/tcp
example-voting-app_result_1 nodemon server.js Up 0.0.0.0:5858->5858/tcp,:::5858->5858/tcp,
0.0.0.0:5001->80/tcp,:::5001->80/tcp
example-voting-app_vote_1 python app.py Up (healthy) 0.0.0.0:5000->80/tcp,:::5000->80/tcp
example-voting-app_worker_1 dotnet Worker.dll Up - 사용자를 postgres로 지정하고, example-voting-app_db_1 의 shell을 연다.
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker exec -it --user=postgres example-voting-app_db_1 sh - whoami를 통해 postgres 계정에 들어와 있음을 확인
/ $ whoami
postgres - psql 설치된것 확인
/ $ psql
psql (15.5)
Type "help" for help. - 현재 연결된 db와 유저이름
postgres=# \c
You are now connected to database "postgres" as user "postgres". - 현재 데이터베이스에 있는 테이블 목록을 나열
postgres=# \dt
List of relations
Schema | Name | Type | Owner
--------+-------+-------+----------
public | votes | table | postgres
(1 row) - votes 내용 확인
postgres=# SELECT * FROM votes;
id | vote
-----------------+------
161e7795c8e92b7 | a
(1 row) - 종료
postgres=# exit
/ $ exit
p.s
+종료 후 yml 내려본다.
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker-compose -f docker-compose.mac.yml down
Stopping example-voting-app_worker_1 ... done
Stopping example-voting-app_vote_1 ... done
Stopping example-voting-app_result_1 ... done
Stopping example-voting-app_redis_1 ... done
Stopping example-voting-app_db_1 ... done
Removing example-voting-app_worker_1 ... done
Removing example-voting-app_vote_1 ... done
Removing example-voting-app_result_1 ... done
Removing example-voting-app_redis_1 ... done
Removing example-voting-app_db_1 ... done
Removing network example-voting-app_default
WARNING: Network example-voting-app_default not found.
+ 컨테이너 지워 졌는지 확인
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+ down은 컨테이너만 지우고 이미지는 지우지 않음을 알 수있음.
weare@DESKTOP-BE1I4GE:~/example-voting-app$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
example-voting-app_worker latest 79f4f5ff65ba 2 hours ago 194MB
example-voting-app_result latest 21441b000470 2 hours ago 220MB
example-voting-app_vote latest 68b2f101195b 2 hours ago 145MB
<none> <none> 814c986a34da 2 hours ago 220MB
<none> <none> f220bc028f32 2 hours ago 145MB
node 18-slim d3cce7487840 9 days ago 196MB
postgres 15-alpine c94362bdb5ee 2 weeks ago 240MB
redis alpine d2d4688fcebe 3 weeks ago 41MB
python 3.9-slim 4fd8d6bf114c 2 months ago 126MB
multiarch/qemu-user-static latest 3539aaa87393 11 months ago 305MB