[4기] 백엔드 개발자 부트캠프 "오르미" ~ing/[4기] 백엔드 개발자 부트캠프 오르미 수업 복습

[4기] 105일차 Docker1

sohee99 2024. 4. 15. 18:39

오랜만에 !!!! 블로그 작성 ㅎㅎㅎㅎ!!

 

흐음... spring boot부터 멘붕 터져서 

 

한달가량 못적엇네염,,,,,,,,,,,,,,,,,,,,,,,크흠,,,,

 

 

팀 프로젝트도 하기도 하고 많은 일들이 있었지만! 

 

오늘부터라도 다시 꾸준히 적어볼 예정!!!!!!!!! 

 

오늘의 학습은 ! docker !! 

 

아니 정말 이상한게 ,,, jpa 배울땐 도커 다운해도 에러 뜨던 친구가 

 

오늘 혹시나 싶어서 다시 다운을 해봤더니 

 

다운이 잘되지 뭐예요?! 뭐지................ 뭐가 바뀐건지,,,,흠 튼 잘된걸로................

 

 

가상화(virtualization)

 

가상화는 하나의 컴퓨터를 여러개처럼 쪼개서 사용하는것 or 여러대의 컴퓨터를 하나인 것 처럼 사용하는 것 

 

Docker도 가상화 기술을 사용하기 때문에 docker를 사용하면 한대의 컴퓨터를 마치 여러개인 것처럼 쪼개서 사용할 수 있도록 해준다! 

 

출처 - 이스트 소프트 조성연 강사님

 

컨테이너라는 단위로 쪼개진다! 각각의 앱은 컨테이너라는 가상공간에서 독립적으로 실행!

 

 

 

( 여기서 tmi는 이 가상화 때문에 처음에 도커 안깔려서 윈도우 설치하는데 참 힘듬이 있었다는거......)

 

 

가상화 설정하는데 참 힘들더라구요 ....ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

그럼 왜 docker 즉 가상화를 사용해야하는가 ? 

 

내가 만든 a앱을 누군가에게 공유하려면 컨테이너를 이미지라는 것으로 저장하고 누군가가 사용하는 방식! 

 

이미지 > 사진을 찍는 느낌으로 이미지로 저장한다는것!!!!

 

출처 - 이스트 소프트 조성연 강사님

 

컨테이너를 이미지로 만들고 docker hub 클라우드에 업로드 후 이미지를 다운받아 사용함!

 

 

docker의 장점은! 운영체제 즉 환경에 구애받지않고 실행가능하다는거!!!! 

 

 

 

nginx를 홈페이지에서 설치하지 않았는데 

 

 

이렇게 풀해서 사용하니 신기하더라구요!!!!!!!!! ㅎㅎㅎㅎㅎㅎㅎ

 

 

이렇게 환경에 구애받지않으면 협업할때 팀원들과 미묘하게 개발환경이 다를 때 매우 활용적일듯 하네엽!!!!!! 

 

서버 배포시에도 docker 이미지를 활용 시, 모든 서버에 동일한 환경으로 배포되니 구웃!!!!👍

 

 

참으로 유용한 친구일세 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ👊

 

 

 

Docker container

 

도커의 핵심은 이미지와 컨테이너! 

 

 

설계도랑 비슷한 개념인거같아요! 

 

이미지를 이용해 여러개의 컨테이너를 만들 수 있고, 

 

누군가의 이미지를 사용할려면 이미지저장소 즉 도커허브에서 가져올 수 있다! 

 

 

이렇게 nginx 를 도커허브에서 풀 > 런 해서 컨테이너를 만들었구엽 

 

 

이렇게 이미지에서 컨테이너에 런이 된다는거!!!

 

신기해신기해 ^^^^^역시 처음배울 때 뭐든 다 신기한거같아요 ㅋㅋㅋㅋㅋㅋㅋㅋㅎ 

 

스프링부트하다가 너무 행복해요 지금 (속닥)

 

 

 

 

이렇게 포트번호까지 설정해서 로컬로 들어가면 이런 문구가 보인답니다! 

 

 

 

컨테이너 이름 작성하고! 포트번호! 볼륨 설정하면 다른 컨테이너를 만들더라도 볼륨에 저장된 test가 다른 컨테이너에도 적용된다는거! 기억기억!!!!!!! 

 

 

이렇게 입렵하구 패스워드 입력하면!

 

 

빠밤 여기서 create database test; 를 입력하여 테스트를 추가하면?

 

 

빠밤! 

 

하지만 여기서 삭제하고 새로운 컨테이너를 생성했을 때 저 test는 사라지는데엽 

 

이걸 그대로 유지하고 싶다면 아까위에서 말한 볼륨을 통해 저장하면 그대로 적용된다는거!!!!

 

출처 - 이스트소프트 조성연강사님

 

컨테이너와 볼륨을 연결하면 db를 영구적으로 사용가능하다는거! 내부데이터가 항상 지워지는 단점을 보완했다는거!

 

 

그럼 이제 이미지!!!

 

이미지를 만드는 방법! 2가지 

 

1. 내 컴퓨터에 실행중인 컨테이너를 이미지로 만들기

2. 누군가 만든 이미지를 이용해 새로운 이미지 만들기 

 

 

1. 내컴퓨터 실행중인 컨테이너로 이미지 만들기는

 

풀받은 이미지로 컨테이너를 만들고 

 

echo '<h1> This is my webserver </h1>' > /usr/share/nginx/html/index.html

 

이렇게 수정 후 

 

윈도우 powerShell 을 열어 wsl > docker commit 컨테이너 이름 nginx_new:01 

 

( 여기서 nginx_new 는 새로 생성될 이미지 이름 01은 태그 (별명) )

 

이렇게 하면 이미지쪽에

 

 

이렇게 생긴답니다!!! 여기서 원래 있던 컨테이너를 삭제하고 이 이미지에서 런해서 컨테이너를 만들면? 

 

 

원래 문구가 있었던 로컬호스트에 문구가 바뀌었졉? 

 

이렇게 이제 이 이미지에서 실행하게 된다면 이 이미지를 그대로 사용가능하다는거!!!

 

 

이렇게 이미지에서 런해서 컨테이너를 만들고 그것을 수정하고 commit 후 새로운 이미지로 컨테이너를 런하면 수정된 것이 그대로 새로운 컨테이너에 적용된다는거!!!!!!!!!!!!! 

 

 

그런데 이런 과정이 너무 번거롭기 때문에 !! dockerfile를 이용하여 

 

 

저 작업을 한번에 가능하다는거!!!!!! 

  • FROM: 베이스 이미지입니다. 어떤 이미지를 바탕으로 작업을 할 것인지 명시합니다. 피자로 치면 토핑이 올라가기 전의 도우라고 할 수 있겠군요.
  • RUN: 베이스 이미지에 입력할 명령어 입니다. 이전 실습에서 사용한 명령어를 그대로 사용했습니다. 피자의 토핑에 해당합니다.
  • EXPOSE: 어떤 포트를 외부에 노출시킬 지 명시합니다. 우리는 nginx라는 웹 서버 이미지를 만들 것이기 때문에 HTTP 프로토콜이 사용하는 포트인 80을 노출시킵니다.

 

오늘은 여기까지 간단히 도커에 대해 배웠는데엽!!!!! ㅎㅎㅎ 

 

나름 신기하고 재밌었어요!!! 사실 스프링부트하다가 이거하니 너무 즐겁달까요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅠ 

 

스프링부트 복습하러 떠나야겠어요 얼른,,,,,, 다음 파이널 프로젝트전에는 익숙해질 수 있도록 파이팅!!!!!

 

 

오늘도 즐겁게 수업들었구욥 ㅎㅎㅎ

내일도 공부 파이팅!!!!!