티스토리 뷰
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 컨테이너 생성 및 실행
컨테이너 생성은 create
과 run
으로 할 수 있습니다.
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 |
가져올 이미지 뒤에 버전을 지정하지 않으면 자동으로 최신 버전 이미지(latest)를 가져옵니다.
nginx:1.14 → nginx ver.1.14 를 pull
nginx → nginx:latest 최신 버전의 nginx 를 pull
이렇게 생성한 컨테이너 이미지들은 레이어 형태로 /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]
# 컨테이너 이미지 삭제
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. 빌드한 컨테이너 배포
docker images 로 원하는 이미지가 잘 build 된 것을 확인했습니다. (이니셜 모자이크 처리)
지금부터 이 이미지를 dockerhub를 통해 배포해보겠습니다.
docker build -t imagename:tag .
docker login
docker tag imagename:tag [USER_ID]/imagename
docker push [USER_ID]/imagename:tag
push로 배포하는 경우, 항상 docker tag를 먼저 달아주어야 합니다. (이니셜 모자이크)
이렇게 배포까지 마쳐 본인의 docker 계정에 업로드한 이미지는 언제든 다시 pull로 다운받아 실행할 수 있습니다.
'Container' 카테고리의 다른 글
[Docker] 컨테이너 명령어 정리: 생성/실행/삭제/배포 (0) | 2023.04.01 |
---|---|
달라진 것은 단 하나, 전부: 컨테이너(Container)시스템의 이해 (0) | 2023.03.26 |
- Total
- Today
- Yesterday
- Route53 비용 정책
- IAM
- Window Server Manager
- rocky9
- Ansible
- vsphere
- Google Cloud DNS
- 클라우드 DNS 서비스
- aws cli
- Route53
- kubectl
- RECA
- Docker
- Git
- VM Tools
- 에티버스러닝
- redhat
- ycampus
- Linux
- Windows Server
- kubernetes
- AWS
- Local Zones
- Vmware
- EKS
- github
- VPC
- IAC
- k8s
- Azure DNS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |