도커 스터디 한방에 정리 | 오늘의 맛집은? 일일양 석촌호수점

Sanghwa Lee·2022년 1월 16일
29
post-thumbnail

같이 인턴을 하는 사람 중 백엔드 직무인 분들 몇 명과 도커 스터디를 하고 있다. 인턴 면접에서 AI를 서빙하여 웹 사이트를 제작했던 경험을 말씀드리다가 면접관님이 그 사이트의 사용자가 많아지면 어떻게 해결할 것인지를 물어보셨다. 나는 DB 재설계, 쿼리 튜닝, AI 모델의 알고리즘 변경 등의 해결책을 수두룩하게 제시했는데, 네트워크에 관한 답변을 하지 못했다. 그래서 내 밥메이트한테 사이트의 동시 접속자가 많은 문제는 어떻게 해결하냐고 물어봤더니, 도커를 공부하라고 했다.

아래 내용은 모두 이고잉님의 강의를 바탕으로 작성한 것이다.

도커란?

리눅스 container를 기반으로 하여 애플리케이션을 빠르게 구축, 테스트, 배포할 수 있는 소프트웨어 플랫폼이다. 커널은 host의 커널과 공유해 사용하면서, OS를 설치하지 않고 꼭 필요한 라이브러리와 실행 파일만 존재하는 container를 만드는 것이다.

도커의 장점?

  • 각각의 애플리케이션이 독립된 공간을 보장받을 수 있기 때문에 충돌이 발생하지 않는다.
  • 도커 이미지라는 패키지로 만들어서 운영 서버에 전달만 하면 배포가 된다.
  • container 하나당 하나의 기능만을 제공하는 모듈이므로 변화가 쉽다.

이렇게 공부하니 뭔 말인지 하나도 감이 안 왔다. 그래서 다시 밥메이트의 도움을 받았고 실전에서의 도커의 장점은 git처럼 어디서나 이미지를 pull하면 개발 환경을 그대로 불러올 수 있는 점, 서버를 직접 구축하지 않고 세팅된 이미지를 가져와 쉽게 사용할 수 있는 점이 있음을 알게 되었다.

그래서 동시 접속자가 많은 문제를 해결하는 방법으로 도커가 사용될 수 있다고 했다. 웹 서버 컨테이너가 유저에 대한 요청을 받으면 응답을 보내는 구조일 때, 같은 컨테이너를 여러 개 만들어서 요청을 분배해 보낼 수 있다. 이렇게 되면 점점 접속자가 많아지는 상황에서 서버를 업그레이드하지 않아도 서비스의 scalability를 가질 수 있다. 모놀리식 아키텍쳐를 피하고 마이크로서비스 구조를 갖는 것이다. 이는 도커의 로드밸런싱 기능을 사용한 사례인 것 같다.

도커 설치

도커 공식 홈페이지

리눅스

걍 깔면 된다 ... 고성능이다.

윈도우와 맥

도커가 알아서 가상머신을 만들고 리눅스를 설치해 주어 약간의 속도 저하가 있다.
맥에서는 도커 설치하고 바로 사용이 됐는데, 윈도우에서는 갑자기 컴퓨터가 로그아웃돼서 당황했다. 그래도 멀쩡하다. ^.^

용어 정리

docker hub

  • 필요한 소프트웨어를 찾을 registry

image

  • docker hub에서 컴퓨터에 다운받은 소프트웨어

container

  • image를 실행하는 것
  • 하나의 image는 여러 개의 container를 포함할 수 있음

pull

  • docker hub에서 image를 다운받는 행위

run

  • image를 실행시키는 행위
  • image가 container가 되고, container가 실행되면서 container 안에 포함된 프로그램이 실행됨

이미지 pull

docker desktop GUI에서

docker hub
도커 허브에서 원하는 소프트웨어가 설치되어 있는 컨테이너를 찾아 pull하면 된다.

터미널에서

  • docker pull NAME
    • image pull
  • docker images
    • 다운받은 image의 목록 확인
    • docker desktop GUI의 images 탭에서도 확인 가능

컨테이너 run

docker desktop GUI에서

  • images 탭에서 run 버튼 클릭
    • optional에서 이름을 지정하는 것이 관리하기 좋음
  • 각 container는 stop 버튼 눌러서 끌 수 있음
  • remove 버튼으로 container 삭제

터미널에서

  • docker run IMAGE
    • --name NAME 옵션으로 container 이름 지정
  • docker ps
    • 실행 중인 container를 볼 수 있음
  • docker stop CONTAINER(이름 또는 ID)
    • docker ps 하면 안 나옴, docker ps -a 하면 나옴
    • 삭제된 것이 아니라 꺼진 것
  • docker start CONTAINER(이름 또는 ID)
  • docker logs CONTAINER
    • -f 옵션으로 실시간 출력
  • docker rm CONTAINER
    • 실행 중인 container는 지울 수 없음
    • --force 옵션으로 실행 중인 것도 삭제 가능

이미지 삭제

docker desktop GUI에서

  • GUI의 image 탭 remove 버튼

터미널에서

  • docker rmi IMAGE

네트워크

도커를 동작하는 많은 소프트웨어들이 네트워크를 이용함

도커 없이 웹 서버를 사용하는 방법?

  • 두 대의 컴퓨터 필요
    • 한 대는 Web browser(A), 한 대는 Web server(B) 설치
      • Web server 설치된 컴퓨터
        • 웹 페이지를 파일로 만들어 특정 directory에 위치시켜야 함
        • File System > directory > 웹 페이지
        • 웹 서버에 페이지를 요청하면 어느 directory에서 찾아야 하는지 설정 → 65535개의 Port로 구분
        • 실습에 사용하는 Apache web server는 80번 port (image 만들 때 정해놓음)
    • B의 주소가 example.com (같은 컴퓨터일 땐 localhost)
    • A에 http://example.com:80/index.html 을 쳤을 때 웹 브라우저는 80번 port로 example.com 에 접속
      • 80번 port를 통해 웹 서버로 요청이 전달됨
      • 웹 서버는 file system 안의 directory에서 index.html을 찾음
      • 웹 서버는 index.html을 읽어서 웹 브라우저에게 전달

도커를 이용해 웹 서버를 사용하는 방법?

  • 웹 서버를 직접 설치하지 않고 도커를 이용해 container에 설치
  • Container가 설치된 운영체제는 (docker) Host
  • Host, Container는 각각 독립적인 실행 환경이므로 각각의 port와 file system이 있음
  • Host의 port와 Container의 port를 연결
    - 예: 80번과 80번을 연결 - 실행 명령어? docker run -p 80:80 httpd

실행 중인 container에서 명령어 쳐 보기

docker desktop GUI에서

  • 실행 중인 container에서 CLI를 누르면 터미널이 켜짐

터미널에서

  • docker exec CONTAINER COMMAND
    • container 안의 위치로 이동
  • docker exec -it CONTAINER /bin/sh
    • 실행 중인 container에서 CLI를 누른 효과
    • exit로 빠져나갈 수 있음
    • sh는 본 쉘, bash는 bash 쉘

container의 덕목은 용량이 작은 것!!

  • nano, bin 등이 없음 → apt로 설치할 수 있음
    • apt update
    • apt install nano
    • nano index.html
      • 설치한 컨테이너 안의 파일 내용을 고칠 수 있음

성장엥성장충

여기까지가 강의로 공부한 내용이다. 그리고 개발에 도커를 사용하면서 강의로만 배운 걸 잘 써먹지 못해 헤멨다. 지금은 일주일 정도 사용하니까 필요한 명령어들은 잘 쓰고 있다. 아닌가..?

오늘의 맛집

거의 이걸 위해 서론을 장황하게 쓴 글 ...

'일일양' 석촌호수점이다! 양갈비를 코스요리 중 하나 ... 로만 먹어봤지 양갈비집을 간 것은 처음이었다.

그래서 야심차게 하이볼까지 먹어보고 싶었다. 프렌치렉 3대랑 양갈비 2대 세트를 먹었는데 역시 프렌치렉이 기름기도 많고 맛있었다. 입술이 번들번들~~ 그리고 딱 질릴 때쯤 양갈비로 바뀌어서 좋았다. 사진에 보이는 채소뿐 아니라 마지막엔 숙주도 한 바구니 구워주셨는데 다양한 채소랑 곁들여 먹을 수 있는 점이 맘에 들었다. 귀여운 종이 손잡이에 뼈도 잡아서 주셨는데 섬세하다는 생각이 들었다. 맛도 양도 서비스도 넘 만족!!

아쉬운 점은 딱히 없지만 굳이굳이 꼽자면 테이블이 작다는 점이다. 먹을 때 접시 등을 놓을 자리가 넉넉하지 못했다. 그리고 프렌치렉 구워 주실 때 기름이 정말 많이 튀겼는데 옷이랑 폰이랑 마스크랑 기름 범벅이 됐다. 집 갈 때 맛있는 냄새가 온몸에서 나는 건 좋았지만 ... 처리가 힘들었다. ㅠㅠ

아 하이볼 또 먹고 싶네 산토리 위스키 사고 싶다.

profile
맛집 보고 가세요 😀

10개의 댓글

comment-user-thumbnail
2022년 1월 16일

오.. 맛집과 도커 학습 내용이 한 포스팅에..! 귀하네요 많은 도움이 되었습니다🙌

1개의 답글
comment-user-thumbnail
2022년 1월 17일

도커보다 맛집 글이 더 디테일 하네요 ^^

1개의 답글
comment-user-thumbnail
2022년 1월 19일

도커 보러 왔다가 맛집 보고 갑니다 ㅋㅋㅋㅋ

1개의 답글
comment-user-thumbnail
2022년 1월 22일

도커에 관한 전반적인 내용을 쉽게 설명해주셔서 감사합니다 ~ 글 잘보고 갑니다^^

1개의 답글
comment-user-thumbnail
2022년 1월 26일

우와 지금까지 본 도커 포스팅 중 가장 인상 깊어요😲

1개의 답글