1. 도커의 기초
도커는 우리의 소스코드를 컨테이너화해서 배포할 수 있게 해주는 툴이다. 여러 특징이 있는데,
- snapshot: 컨테이너가 아닌 배포방식의 스냅샷과 같은 역할을 할 수 있다.
- resource control: 어느정도의 리소스(CPU, ram)을 사용할 지 지정할 수 있다.
- can run anyhwhere: 어디서든지 도커만 있으면 컨테이너를 실행할 수 있다.
- zero setup: 컨테이너의 설정을 그대로 들고오기 때문에 설정이 필요없다.
- lightweight: 리눅스 커널을 공유하고 도커파일에 설정한 대로 흉내만 내는 것이기에 VM에 비해 부팅시간, 수정시간을 절약할 수 있다.
- PM2 for any language: 언어에 관계없이 도커라이즈만 할 수 있다면 PM2의 기능을 대체할 수 있다.
도커의 구조는 위와 같다. 컴퓨터의 운영체제 위에 도커 클라이언트로 구동되고 각각의 독립된 컨테이너들이 도커데몬 위에서 돌아가는 구조이다.
도커 디몬은 deamonize 명령어로 백그라운드에서 계속 실행되게 할 수 있는 요소이다. 돌아가고 있는 컨테이너를 관리할 수 있다. 도커 허브는 npm같은 소스코드를 공유하는 허브이다. 오픈소스로 공개되어 간편하게 사용할 수 있는 것도 있고 회사차원에서 private로 사용하기도 한다.
CLI에서 dockerize해서 이미지를 만들고 컨테이너에서 실행시키는 시퀸스를 소스코드의 dockerfile에서 설정할 수 있다. 도커를 설치한다는 것은 도커를 실행시키는 CLI와 deamon을 포함한 서버, 그리고 환경을 통일시키는 host를 뜻하는 Linux VM 세가지를 모두 이른다.
예를 들어 cli에 docker run redis라는 명령어로 hub에서 다운받은 redis 컨테이너를 실행할 수 있다. ssh 터널링으로 vm에 접속하듯 docker ps 명령어로 현재 실행중인 컨테이너 목록을 볼 수 있다.
- 자주 쓰는 도커 명령어
docker run [image name] : docker create [image name] + docker start [image name]
- docker run -it [image name] : 바로 꺼지지 않고 추가 명령어를 이용해 상호작용 할 수 있다.
docker ps --all : 돌아가고 있지 않은 컨테이너까지 보여줌
docker system prune : 돌아가고 있지 않은 컨테이너들을 삭제
docker logs [container id] : 컨테이너의 로그를 로컬에서 확인
docker run -d [container id] : 컨테이너에서 실행되고 있는 내용을 로컬에서 보지 않게 설정
docker stop [docker id] : 정상종료(이미 받은 요청 처리 후 셧다운) 기본값은 10초를 기다림
docker kill [docker id] : 강제종료
강의에선 hub에 제공된 docker image 중 redis를 받아서 활용했는데, 물론 컨테이너가 Linux VM처럼 운영체제를 가지고 있지 않지만 독립된 환경의 운영체제를 가지고 있는 듯하게 흉내내는 것이기에 port도 독립적으로 가진다. 따라서, 각 컨테이너들은 완벽하게 독립되어 있기 때문에 중복된 포트도 사용할 수 있다.
여기서 포트맵핑의 중요성이 나타나는데, 도커의 포트와 로컬의 포트는 다르기 때문에, 각 컨테이너의 포트가 중복되더라고 각각의 컨테이너에 parent host에서 접속하는 포트 번호는 다르게 설정할 수 있다. ex)4000:6379(A) / 4001:6379(B)
예시처럼 run을 하게 되면 컨테이너 A의 6379포트를 4000번에, B의 6379포트를 4001번에 리다이렉션하는 것이다.
중요한 것은 컨테이너의 포트를 변경하는 것이 아니라 단순히 호스트 머신의 포트와 연결해주는 것이다.
2. 도커 이미지
위의 도식은 도커 파일을 이용해 커스텀 도커 이미지를 직접 만드는 것을 나타낸 것이다. 도커파일은 설정파일이라고 보면 되고, 도커 CLI를 이용해서 빌드하고 도커서버에 넘겨준다. 그리고 도커 서버는 최종적으로 도커 이미지를 생성한다.
도커파일은 여러 코드가 있지만 대표적으로 FROM, RUN, CMD(커맨드) 세가지가 있다. FROM에는 base image를 넣어주고
'내용 복습 > devOps' 카테고리의 다른 글
'도커 교과서' 1~2장 정리 (4) | 2024.11.02 |
---|---|
도커를 이용해 Containerize하는 과정 (0) | 2024.05.10 |
Github Actions - CICD (0) | 2024.05.09 |
AWS 기초 - https 쓰는 방법 (0) | 2024.05.08 |
[AWS] EC2 개요 (0) | 2024.03.29 |