티스토리 뷰

1. 컨테이너 동작 방식

 

Container Life Cycle
1. 컨테이너 이미지 관리
2. 컨테이너 이미지 실행, 삭제
3. 실행 중인 컨테이너 모니터링

 

📌컨테이너 이미지 = "여러 개의 레이어로 구성된 이미지들의 조합"  → 개발 과정을 거칠수록 레이어 증가

 

이미지들은 local에 저장(/var/lib/docker/overlay2) → run 시 메모리에 올라가며 컨테이너화 됩니다.

*** 골든 이미지(Golden Image)를 잘 만들어 놓으면 계속 가져다 사용 가능 !

 

이렇게 생성한 이미지를 hub.docker.com 등의 registry 사이트에 올려 배포할 수 있습니다.

 

📌 컨테이너의 꽃 "배포"

pull과 push를 이용한 편리한 배포를 통해 개발 과정에서의 소통과 협업, 버전 관리가 쉬워집니다!

 

1. 개발자에게 받은 Dockerfile 빌드
2. 이미지를 레지스트리(hub.docker.com)에 업로드/다운로드
3. 컨테이너화(run)

 

  • 용어 정리
Docker Host Linux 커널, ubuntu
Docker Daemon 설치한 컨테이너 엔진(docker)
systemctl status docker
Docker Client Command 명령어
Docker hub registry 사이트
Container Images 받아온 이미지 파일
Container 이미지 파일로 start, run

 

 


2. 환경 구성 및 Docker 실습

 

대표적인 컨테이너 엔진 Docker를 가지고 컨테이너 생성, 실행, 삭제, 배포 실습을 진행해보겠습니다.

 

  IP CPU MEM
console 10.0.2.5 2 core 2048
k8s-master 10.0.2.10 2 core 2048
k8s-worker1 10.0.2.11 1 core 1024
k8s-worker2 10.0.2.12 1 core 1024

vmware, ubuntu, k8s 노드들은 kubectl까지 설치되어 있는 상태이며, 오늘은 console에만 Docker를 설치해 실습하겠습니다.

 

  • console에 Docker 설치
sudo apt-get update
# 우선 기존 repository 업데이트
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
# repository 사용할 수 있도록 필요한 패키지 설치
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 위변조 확인을 위한 GPG 키 추가
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# docker 공식 저장소를 repository로 등록
apt-get update
# repository 업데이트
apt-get install -y docker-ce
# docker 엔진 설치

 

*** root 권한으로 설치

 


2.1 컨테이너 생성 및 실행

 

컨테이너 생성은 createrun으로 할 수 있습니다.

 

docker create --name [NAME] [IMAGE]
# 실행하지 않고 이미지를 받기만 함
docker run --name [NAME] [IMAGE]
# 이미지를 받아 실행까지 시킴

 

컨테이너 이미지와 컨테이너는 엄밀히 다른 개념입니다.

이미지를 받아와서 메모리에 올리고 실행시켜야 "컨테이너"가 되는데, create과 run의 차이도 바로 이와 같습니다.

 

create은 이미지를 단순히 받아오기만 한 것이고,

run은 이미지를 받아 컨테이너로 실행까지 시키는 명령어입니다.

pull + create + start ⇒ run (보통 run으로 한 번에 실행까지 진행!)

 

run docker image를 받아 실행
  -d : 백그라운드로 실행
-p : 호스트와 컨테이너 포트 연결
      -p <host>:<container> → -p 80:80

 

 

 

 

docker create로 받아온 이미지

 

docker run으로 생성한 webserver 컨테이너

 

가져올 이미지 뒤에 버전을 지정하지 않으면 자동으로 최신 버전 이미지(latest)를 가져옵니다.

nginx:1.14 → nginx ver.1.14 를 pull

nginx → nginx:latest 최신 버전의 nginx 를 pull

 

 

docker ps -a 로 컨테이너 상태 확인

 

이렇게 생성한 컨테이너 이미지들은 레이어 형태로 /var/lib/docker/overlay2 에 저장됩니다.

 

docker ps 실행 중인(운영 중인) 컨테이너만 확인 가능
  -a : 운영 중이 아닌, stop된 컨테이너들까지 확인 가능
-q : image ID 반환

 

 

 


2.2 컨테이너 삭제

 

실행 중인 컨테이너는 반드시 stop 후 삭제해야 합니다.

 

docker stop [CONTAINER_NAME]
# 실행 중인 컨테이너 stop
docker rm [CONTAINER_NAME]
# 컨테이너 삭제
docker rmi [CONTAINER_NAME]
# 컨테이너 이미지 삭제

 

rmi 로 이미지 지우기 (6 layers)

 

 


2.3 컨테이너 배포

 

간단한 application을 빌드한 뒤 배포해 보겠습니다.

우선 build를 위해 Dockerfile이 필요합니다.

 

Dockerfile = 컨테이너를 만들 수 있도록 도와주는 명령어 집합

 

1. Dockerfile 만들기

FROM node:14
LABEL maintainer="nodejs app container"
COPY hello.js /hello.js
ENTRYPOINT ["node", "hello.js"]

2. Dockerfile + hello.js 가 있는 디렉토리 생성 후 build

mkdir build
cd build
docker build -t imagename:tag .

 

3. 빌드한 컨테이너 배포

 

build한 이미지 확인

 

docker images 로 원하는 이미지가 잘 build 된 것을 확인했습니다. (이니셜 모자이크 처리)

지금부터 이 이미지를 dockerhub를 통해 배포해보겠습니다.

 

 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.

hub.docker.com

 

docker build -t imagename:tag .
docker login
docker tag imagename:tag [USER_ID]/imagename
docker push [USER_ID]/imagename:tag

 

tag 후 push

 

push로 배포하는 경우, 항상 docker tag를 먼저 달아주어야 합니다. (이니셜 모자이크)

 

이렇게 배포까지 마쳐 본인의 docker 계정에 업로드한 이미지는 언제든 다시 pull로 다운받아 실행할 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함