[Docker] Docker Concepts - 도커 컨테이너의 생명주기

김희정·2023년 3월 3일
0

Docker

목록 보기
2/3
post-thumbnail

💎 들어가며

이번 포스팅에서는 도커 컨테이너생명주기에 대해 포스팅해보자 합니다. 우리는 생명주기라는 단어를 여러 바운더리에서 흔히 찾아볼 수 있습니다.

생명주기란 쉽게 말해서 어떠한 형상이나 물체가 생성부터 폐기되기 까지의 프로세스를 관리하는 것을 의미합니다. 이는 굉장히 단위부터 기술에 아우르기까지 범위가 확장될수 있습니다.

이번 포스팅에서는 도커의 핵심인 컨테이너의 생명주기에 대해 설명해보고자 합니다.



1. Container Lifecycle

컨테이너 생명주기란, 컨테이너를 생성하고, 실행, 정지, 폐기하기까지 컨테이너를 관리하는 것입니다. 생명주기를 도식화하면 아래와 같습니다.


1.1 Pull image

우선, 도커 컨테이너를 생성하려면, 컨테이너를 생성할 이미지가 필요합니다.

도커 이미지란?

도커 이미지란 컨테이너를 만드는 데 사용되는 읽기 전용 템플릿(Read-only templates)입니다. 컨테이너는 이러한 템플릿에서 생성된 배포된 인스턴스(Deployed Instances)입니다.

쉽게 말해, 우리가 빵을 만들기 위해서는 빵틀이 필요합니다.

도커 이미지를 받기 위해서는 docker (image) pull 이미지명:버전명 명령어를 사용합니다. 버전을 명시하지 않을 경우 최신 버전(lastest)으로 대체됩니다.
ex) docker pull httpd


1.2 Run container

이러한 빵틀로 빵을 제작합니다. ⇒ 도커 컨테이너를 생성합니다.

저는 웹서버를 제공하는 httpd 이미지로 80으로 접속 가능한 웹서버 컨테이너 web을 생성할 예정인데, 아래와 같이 적어줍니다.

$ docker run --name web -p 80:80 -d httpd

이는, 풀어서 이야기하면

  • 이미지 내려받기: docker pull httpd
  • 컨테이너 생성: docker create --name web -p 80:80
  • 컨테이너 실행: docker start

와 같습니다.


1.3 View containers

해당 컨테이너가 잘 생성/실행되었는지 확인하기 위해서는 컨테이너를 조회해봅시다.

$ docker ps
$ docker container ls

만약 나오지 않는다면 실행 중이 아닌 것이기 때문에 아래와 같이 적어줍니다.

$ docker ps -a

1.4 Remove container

더이상 사용하지 않는 컨테이너는 삭제해야 합니다. 아래와 같이 적어줍니다.

컨테이너를 종료한 뒤 삭제하거나,

$ docker stop web
$ docker rm web

컨테이너를 강제로 삭제합니다.

$ docker rm -f web

1.5 Docker Run Options

도커 컨테이너는 주로 쉽고 간편한 docker run 명령을 통해 생성됩니다.

아래는 자주 사용되는 docker run 옵션입니다.

옵션내용
--name [컨테이너명]컨테이너 이름 지정
-p [호스트 포트번호]:[컨테이너 포트번호]포워딩할 포트 번호 지정
-v [호스트 디스크]:[컨테이너 디렉터리]호스트 디스크를 볼륨으로 마운트
-v [볼륨명]볼륨 마운트
-e [환경변수키:값]환경변수 설정
--net=[네트워크명]컨테이너를 네트워크에 연결
-d (detach)백그라운드로 실행
-i (interactive)컨테이너에 터미널(키보드) 연결
-t (tty)특수 키를 사용가능하도록 함
--restart재시작 옵션 [on-failure / on-failure:횟수n / always / unless-stopped]


2. Container Uses

2.1 Types of image

Linux

ubuntu, centOS, debian, fedora, busybox, alpine 등 리눅스 운영체제만 담겨 제공됩니다.


Web/Database Server

웹서버로는 httpd, ngnix 등이 유명하다. 웹서버는 통신이 전제가 되므로 옵션을 통해 포트번호를 지정해야 됩니다.

데이터 베이스 서버로는 mysql, postgres, mariadb 등이 있다. 데이터베이스 관리 소프트웨어에는 기본적으로 루트패스워드를 반드시 지정해야 됩니다.


Programming Runtime

프로그램을 실행하려면 해당 언어의 실행 환경인 런타임이 필요합니다. 런타임 역시 컨테이너 형태로 제공됩니다.

런타임에는 openjdk, python, php, ruby, perl, gcc, node 등이 있습니다.
그 밖의 소프트웨어에는 registry, wordpress, nextcloud, redmine 등이 있습니다.


2.2 LAMP Stack

Web 시스템이 동작하기 위해서는 여러 가지의 환경이 구축되야 합니다.

예전에 자주 사용되던 기술들로 이루어진 LAMP는 Linux, Apache, MySQL, PHP를 합친 조합으로 LAMP 스택이라고 부른다고 합니다.

소프트웨어가 발전하면서 아파치가 ngnix로, MySQL이 MariaDB나 PostgreSQL로 등 여러가지 조합이 변경되었지만 [리눅스 + 웹 서버 + 프로그래밍 언어 런타임 + 데이터베이스]의 조합 임에는 변함이 없습니다.

도커 환경 구성은 단독으로도 사용되지만, 이러한 LAMP 스택으로 구성되어 묶음으로도 사용됩니다.



💎 References


💎 마치며

이번 포스팅에서는 도커 컨테이너생명주기와 컨테이너의 여러가지 유형들, LAMP Stack에 대해 포스팅해보았습니다.

다음 포스팅에서는 도커 컴포즈에 대해 포스팅하겠습니다!

profile
Java, Spring 기반 풀스택 개발자의 개발 블로그입니다.

0개의 댓글