도커 컨테이너 실행하기
도커 컨테이너 생명주기
도커에서 컨테이너의 생명주기는 다음과 같은 단계로 나눌 수 있다.
- 이미지 생성
: 컨테이너의 생명주기는 이미지로부터 시작된다.- 도커 이미지는 컨테이너를 실행하는 데 필요한 파일 시스템과 애플리케이션 설정 등을 포함하고 있다.
- 이미지는 도커 파일(Dockerfile)을 사용해 정의되며, 도커 명령을 사용해 빌드할 수 있다.
- docker build: 도커 파일(Dockerfile)을 기반으로 도커 이미지를 빌드한다.
- docker image pull: 도커 레지스트리(도커 허브 등)에서 이미지를 가져온다.
- 컨테이너 시작
: 이미지를 기반으로 컨테이너를 시작한다.- 컨테이너는 독립된 환경에서 애플리케이션을 실행하는 격리된 프로세스이다.
- 도커 명령어를 사용해 컨테이너를 시작할 수 있으며, 컨테이너는 시작되면 호스트 시스템과 격리된 파일 시스템, 네트워크, 프로세스 공간을 가진다.
- docker create: 이미지로부터 컨테이너를 생성하지만 시작하지 않는다.
- 이후 docker start를 사용해 시작할 수 있다.
- 컨테이너 실행
: 컨테이너가 실행 중인 상태이다.- 이 단계에서는 컨테이너 내부에서 동작하는 애플리케이션을 실행하고, 컨테이너가 필요한 리소스를 사용한다.
- 컨테이너는 독립된 프로세스로 실행되므로 호스트 시스템 및 다른 컨테이너와 격리되어 있다.
- docker start: 일시 정지된 컨테이너를 시작한다.
- docker run: container create 명령어로 생성된 컨테이너를 실행, 생성되지 않는 컨테이너는 생성 후 실행한다.
- docker pull, docker create, docker start 명령어를 한번에 수행한다.
- 컨테이너 일시 정지
: 컨테이너를 잠시 일시 정지시킬 수 있다.- 컨테이너가 일시 정지되면 현재의 상태가 유지되며, 리소스 사용은 중지된다.
- 이후에 컨테이너를 다시 시작하면 이전 상태에서 진행된다.
- docker pause: 지정한 컨테이너의 프로세스를 모두 일시정지 시킨다.
- docker unpause: 일시정지된 컨테이너의 일시정지를 해제한다.
- 컨테이너 재시작
: 일시 정지된 컨테이너를 재시작할 수 있다.- 컨테이너를 재시작하면 이전 상태에서 계속된다.
- docker restart: 하나 또는 그 이상의 컨테이너를 재시작한다.
- 컨테이너 중지
: 컨테이너를 명시적으로 중지시킬 수 있다.- 중지된 컨테이너는 완전히 종료되고 리소스가 해제된다.
- docker stop: 실행 중인 컨테이너를 중지한다.
- 컨테이너 삭제
: 더 이상 필요하지 않은 컨테이너를 삭제할 수 있다.- 컨테이너를 삭제하면 해당 컨테이너의 파일 시스템과 리소스가 완전히 제거된다.
- docker rm: 중지된 컨테이너를 삭제한다.
- docker container prune: 중지된 모든 컨테이너를 일괄 삭제한다.
이러한 단계를 통해 컨테이너는 시작하여 실행되고, 필요에 따라 일시 정지하거나 중지되며, 필요 없어지면 삭제된다.
이러한 생명주기 관리는 도커를 사용해 애플리케이션을 배포하고 관리하는 데 유용하다.
- OS는 우분투이고 설치되어 있는 프로그램은 JDK인 이미지가 존재한다 가정한다.
- 해당 이미지를 실행시키면 OS는 우분투이고 내부에 JDK가 존재하는 실행중인 컨테이너가 된다.
- 이때 컨테이너 내부에 while문으로 계속 반복되고 있는 데몬 프로세스가 존재하지 않는다면 실행 후 바로 종료된다.
- OS는 우분투 설치되어 있는 프로그램은 아파치/톰켓인 이미지가 존재한다 가정한다.
- 해당 이미지를 실행시키면 OS는 우분투이고 내부에 아파치/톰켓이 동작하는 실행중인 컨테이너가 된다.
- 이때 아파치/톰켓은 서버이므로 계속해서 동작하는 데몬 프로세스이다.
- 이러한 이유로 해당 컨테이너는 실행을 하더라도 종료되지 않는다.
즉, 컨테이너의 생명주기는 컨테이너 내부에 설치되어 있는 프로그램이 계속 실행되는지 아닌지에 따라 달라진다.
실습
도커 허브에서 tomcat 이미지를 가져온다.
https://hub.docker.com/_/tomcat
이때 도커 허브에서 이미지를 가져오는 명령어는 docker pull 이다.
그후 가져온 이미지를 실행해준다. (docker run)
docker run 명령어를 실행하면 도커 컨테이너가 생성되고 실행될 것이다.
이때 해당 컨테이너는 background가 아닌 foreground에서 실행됨에 주의한다.
그리고 현재 실행중인 컨테이너 목록을 살펴보면 tomcat 컨테이너가 8080 포트에서 정상적으로 실행되고 있는 것을 확인할 수 있다.
그런데 localhost:8080 으로 검색하면 다음과 같이 사이트에 연결할 수 없다는 문구가 출력된다.
현재 상황은 다음과 같다.
- 현재 Host 운영체제와 Tomcat이 실행되고 있는 컨테이너가 존재한다.
- 그리고 나는 Host 운영체제 환경에서 웹브라우저를 열고 localhost:8080 를 검색하였다.
- 이 경우 당연히 Tomcat 컨테이너가 아닌 Host 운영체제에 접근할 것이다.
- 즉, Host 운영체제와 Tomcat 컨테이너는 다른 네트워크 구성을 가진다.
이 문제를 해결하기 위해서는 포트 포워딩 방식을 사용해야 한다.
- 웹 브라우저를 통해 Host 운영체제 환경의 localhost:8080 주소로 접근한다.
- Host 운영체제는 Tomcat 컨테이너의 8080 포트로 포트 포워딩을 시켜준다.
'Docker' 카테고리의 다른 글
docker dit 옵션과 attach (0) | 2023.05.29 |
---|---|
컨테이너 포트포워딩 및 데몬으로 실행 (0) | 2023.05.25 |
도커 이미지 삭제하기 (0) | 2023.05.24 |
도커 컨테이너의 생애주기와 데이터 저장 (0) | 2023.05.24 |
도커 작동 원리 (0) | 2023.05.24 |