패스트캠퍼스 캐시백 챌린지 47일차
도커 컨테이너 라이프사이클, image 및 container과 관련된 클립들을 수강하는식으로 챌린지를 진행하였다. 이제 어느정도 docker개념이나 Command가 익숙해진 것 같다. docker stop $(docker ps -a -q) 같은 명령어나 docker container prune 같은 명령어는 엄청난 꿀팁인 것 같았다. 항상 느끼는거지만 간결하고 자세하게 설명해주셔서 Senior기운이 느껴진다..ㅎㅎ 다음 포스팅으로는 엔트리포인트 커멘드,환경변수 등과 관련된 내용을 포스팅할 예정이다.
도커 구성요소
- docker 명령어가 Client 역할을 수행
- docker daemon(docker-engine)이 우분투에 설치되어있고, docker engine이 띄워져있는 서버를 DOCKER_HOST 라고 한다. host에 이미지와 컨테이너를 관리한다. 이미지는 직접 build하거나 remote에서 pull해서 가져올 수 있다.
- 이미지를 가져올때 사용하는 것이 Registry(이미지 저장소)이다.
도커 이미지와 컨테이너
- 이미지와 컨테이너는 도커에서 사용하는 가장 기본적인 단위
- 이미지와 컨테이너는 1:N 관계
- 이미지(Image)
⇒ 이미지는 컨테이너를 생성할 때 필요한 요소로 컨테이너의 목적에 맞는 바이너리와 의존성이 설치되어 있음
⇒ 여러 개의 계층으로 된 바이너리 파일로 존재
- 컨테이너(Conatiner)
⇒ 호스트와 다른 컨테이너로부터 격리된 시스템 자원과 네트워크를 사용하는 프로세스
⇒ 이미지는 읽기 전용으로 사용하여 변경사항은 컨테이너 계층에 저장
⇒ 컨테이너에서 무엇을 하든 이미지는 영향 받지 않음
- 수행과정
Docker File ———> Docker Image ————> Docker Container
(BUILD) (RUN)
- 비슷한 맥락
이미지(Image) vs 컨테이너(Container)
프로그램(Program) vs 프로세스(Process)
클래스(Class) vs 인스턴스(Instance)
도커 이미지 이름 구성
- 저장소 이름(Repository Name)
- 이미지 이름(Image Name)
- 이미지 태그(Image Tag)
ex)
fastcampus/nginx
fastcampus/nginx:1.21
nginx:latest (자료에 latst 라고 되어있는데 오타일듯..?)
nginx
⇒ 도커 이미지 Pull / Push 시에 저장소 이름은 생략하면 기본 저장소인 도커 허브로 인식
⇒ 도커 이미지 태그를 생략하면 최신 리비전을 가리키는 latest로 인식
도커 이미지 저장소
- 이미지 저장소 (Image Repository)
⇒ 도커 이미지를 관리하고 공유하기 위한 서버 어플리케이션
ex) [public] - QUAY,Docker Hub / [private] - AWS ECR, docker registry
도커 컨테이너 라이프사이클
전체적으로 간단한 형태는 위의 그림으로 생각하면된다.
도커의 경우 실행상태가 되는 방법은 2가지가 존재한다. docker run명령어를 통해 실행하는 방법이 있고, create명령어를 통해 컨테이너를 만들고 start해주어 실행하는 방법이 있다.
컨테이너 시작
- 도커 create/run 명령어 모두 이미지가 없을 경우 자동으로 pull을 먼저 수행하여 이미지를 다운로드 받음
#컨테이너 생성
$ docker create [image]
#컨테이너 생성 및 시작
$ docker start [container]
----------------------------
#컨테이너 생성 및 시작
$ docker run [image]
컨테이너 시작 주요 옵션
$ docker run \\
-i \\ #호스트의 표준 입력을 컨테이너와 연결(interactive)
-t \\ #TTY 할당 (terminal명령어를 정상적으로 수행하도록)
--rm \\ #컨테이너 실행 종료 후 자동 삭제
--d \\ #백그라운드 모드로 실행(detached
--name hello-world \\ #컨테이너 이름 지정
-p 80:80 \\ #호스트 - 컨테이너 간 포트 바인딩
-v /opt/example:/example \\ #호스트 - 컨테이너 간 볼륨 바인딩(디렉토리 마운트 옵션)
fastcampus/hello-world:latest \\ #실행할 이미지
my-command #컨테이너 내에서 실행할 명령어
보통 -i,-t 옵션은 docker container의 shell을 실행할때 사용하면된다.
컨테이너 상태 확인
#실행중인 컨테이너 상태확인
$ docker ps
#전체 컨테이너 상태 확인
$ docker ps -a
#컨테이너 상세 정보 확인
$ docker inspect [container]
컨테이너 일시중지 및 재개
#컨테이너 일시중지
$ docker pause [container]
#컨테이너 재개
$ docker unpause [container]
컨테이너 종료
#컨테이너 종료(SIGTERM 시그널 전달)
$ docker stop [container]
#컨테이너 강제 종료(SIGKILL 시그널 전달)
$ docker kill [container]
#모든 컨테이너 종료
$ docker stop $(docker ps -a -q)
컨테이너 삭제
#컨테이너 삭제(실행중인 컨테이너 불가)
$ docker rm [container]
#컨테이너 강제 종료 후 삭제 (SIGKILL 시그널 전달)
$ docker rm -f [container]
#컨테이너 실행 종료 후 자동 삭제
$ docker run --rm ...
#중지된 모든 컨테이너 삭제
$ docker container prune
windows terminal 기능중에서 분할탭 기능을 활용해서 실습해주고있다.. 엄청편리하다!
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
*본 포스팅은 패스트캠퍼스 환급 챌린지를 위해 작성되었습니다.