📌 공부 계기
추가적인 도커 공부를 위해 유튜브 따배도 도커 시리즈를 보면서 정리해 봅니다.
목차
📍1. 컨테이너를 배우는 이유?
⏳ 시대의 변화!
시대는 베어메탈 방식 > 가상화 방식 > 가상화 방식 중 컨테이너 방식 등장 순으로 바뀌었다.
- Bare Metal : 하드웨어의 리소스를 공유하는 가상화 방식과는 다르게 하드웨어의 모든 성능을 사용할 수 있는 방식
- Virtualization : 베어 메탈 시스템 위에 Hypervisor라는 소프트웨어 적 기술을 가지고 가상 컴퓨터(가상머신)를 만들어 하나의 하드웨어를 나눠 쓸 수 있게 하는 방식
하지만 현재는 사용하는 정도에 따라 확장하는 축소할 수 있는 요구와 서비스 중단없이 운영해야하는 환경에서 이런 시스템은 한계가 있었다. 그래서 등장한 것이 베어 메탈 시스템위에 OS를 올리고 컨테이너 엔진을 올린 시스템이었다.
그리고 도커가 이 컨테이너 기술 중 하나이다.
도커는
- 실제 어플리케이션과 최소화된 환경만 들어가기 때문에 용량이 확연하게 적다⬇️
- 컨테이너 마다 isolation(고립)되어있어 확장성이 좋다
❓ 왜 굳이 리눅스에서 돌려요?
리눅스 커널 기능을 써야 하니까!
리눅스는 커널 기능 기반으로 만들어진 도커는
독립된 공간 형성 chroot 기능에 그 공간 안에 6가지 isolate 기능인 namespace를 지원해 완전히 분리될 수 있게 돕는다. 그리고 분리된 곳에 필요한 만큼의 HW(하드웨어)지원하는 cgroup 등 리눅스 커널 기능을 사용하여 서비스를 제공하기 때문에 필히 리눅스로 돌려야 한다.
그럼 윈도우나 Mac은요???
리눅스 경우는 Hypervisor 필요없이 컨테이너가 올라가지만 리눅스 기능이 없는 윈도우나 Mac 경우 Hypervisor를 활성화 시켜 그 위에 컨테이너를 돌린다.
💥 일반 프로그램과 컨테이너 차이
하는일은 같다. 구조가 다를 뿐!
둘다 애플리케이션 언어에 대한 환경요소를 설치하고 앱 소스코드를 실행하여 돌리는 것은 같다.
다만, 애플리케이션 운영 환경에 바로 쓰는지 (일반 방식)
아니면 운영 환경 위에 컨테이너 기반을 놓고 그 안에 어플리케이션을 운영하는 지가 다른 것 (컨테이너 방식)
😡 기능이 같으면 도대체 왜 쓰는 건데?!?
- 개발자가 만든 그대로 어디서든 돌아간다.
- 확장 / 축소가 용이 (Scale out, Scale In)
- MSA(MicroService Architecture), DevOps에 적합
개발환경과 운영환경이 달라 개발한 어플리케이션에서 운영환경에서 잘 안돌아가는 경우가 많았다.
하지만 컨테이너를 사용하면 하드웨어 운영 구조, 베이스 플랫폼 등이 달라도 컨테이너에 애플리케이션에 적합한 환경을 미리 집어 넣어 놓은 상태이기 때문에 개발환경과 동일하게 돌아간다.
과거엔 Scale out시 서버를 늘리며 OS도 함께 확장되는 식이 었다면
컨테이너는 같은 OS 위에 다른 컨테이너 하나를 더 세우는 방식으로 하여 훨씬 효율적으로 확장이 가능하다.
시스템을 기능마다 작게 쪼개서 서비스를 만든 구조 MSA
개발부터 서비스운영까지 자동화시켜주는 DevOps 환경
둘 모두 컨테이너가 적합하기 때문이다.
📍2. 설치하려면 뭐가 필요해?
- Virtual Box를 이용해 우분투 서버, CentOS 서버에 도커 환경 설치
- 가상 서버 만들기는 따로 정리하지 않고 영상보고 따라 진행 - windows에 Docker Desktop 사용하기
Docker] 설치
📌 도커 다운로드 Docker: Accelerated, Containerized Application Development Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code. www.docker.com 자신
littlezero48.tistory.com
리눅스 권한 관련
리눅스 계정 권한 주기:
root계정으로 로그인해서 usermod 명령어로 (user modify) G 옵션으로 docker라는 그룹에 해당 계정을 추가해준다
usermod -a -G docker 계정이름
📍3. 컨테이너 속속들이 알아보자
컨테이너와 컨테이너 이미지의 구조를 알아보고 동작 방식을 이해해보자.
🧱 구조
- 컨테이너는 1개 = Application 프로세스 1개
- 컨테이너 끼리는 하드웨어 리소스가 완전 독립 (cpu, memory, network, disk, user 등이 모두 독립적)
컨테이너는 도커 데몬(dockerd) 위에 작동하며 도커 데몬이 실행되고 있는 리눅스 커널이 있는 시스템을 도커 호스트라고 한다. 도커 호스트 입장에서 컨테이너는 그냥 하나의 프로세스일 뿐이다.

여러개의 레이어가 모여져 하나의 애플리케이션을 실행 시킬 수 있도록 하는 이미지들의 모음이 컨테이너 이미지이다.
이 컨테이너 이미지가 메모리에 올라가 하나의 프로세스로 동작하게 되면 컨테이너가 된다.
🦿 컨테이너 동작방식
- $ docker search nginx > dockerd에게 요청 > Dockerhub에서 검색 > 이미지 검색 성공
- $ docker pull nginx:latest > Dockerhub로 부터 nginx 컨테이너 이미지를 가져옴(이미지는 하나더라도 그 안의 레이어는 이미지마다 숫자도 구성도 다름)
- $ docker run -d --name web -p 80:80 nginx:latest > 해당 컨테이너 이미지를 가지고 컨테이너를 생성해 dockerd 위에 올라가 작동하게 됨
🚩 잠깐 용어 정리
Docker Host : Docker Daemon이 동작하고 있는 시스템
Docker Daemon (dockerd) : 우리가 설치한 도커
Docker Client Command : docker daemon을 제어하는 명령어
Docker Hub : 도커 이미지 저장소
Container Images : 하나의 애플리케이션을 실행시키기 위해 모든 파일과 설정값을 지닌 파일
Container : 컨테이너 이미지가 실제로 동작하게 되어 하나의 프로세스가 되면 컨테이너
+ 구조 : https://littlezero48.tistory.com/273
🤖 실습
1️⃣ Docker Hub에서 컨테이너 이미지 검색
1. 일단 도커가 정상적으로 실행 중인지 확인
systemctl status docker

2. 이미지 검색
docker search 이미지명

우리는 그 중 하늘색 라인 이미지를 사용할 것
2️⃣ 컨테이너 이미지 다운로드 후 image layer 보기
1. 이미지 레이어를 보려면 root 계정으로 들어가야함
su -

2. root 계정에서 라이브러리 > 도커 위치로 가 list를 보면 아래와 같은 디렉토리 리스트를 볼 수 있는데 여기서 overlay2가 바로 컨테이너 이미지 레이어가 들어간다.


3. 이미지 다운 받기
docker pull 이미지명

4. 이미지 다운 전 레이어 개수와 후를 비교해 보면 다운 받은 만큼 늘어난 걸 볼 수 있다.

3️⃣ 컨테이너 실행하고 확인해보기
1. 컨테이너 생성 및 실행
$ docker | run | --name | web | -d | -p | 80:80 | nginx |
컨테이너 생성 및 실행 |
컨테이너 이름 옵션 |
임의 이름 | 백그라운드 (데몬 모드) |
포트포워딩 | 호스트:컨테이너 | 이미지명 |

2. 컨테이너 실행 확인
docker ps

3. 리눅스에서 페이지를 확인해보자

4. 삭제해보기
- 컨테이너 삭제

실행되고 있는 컨테이너는 삭제할 수 없음 먼저 중지
# 컨테이너 중지
docker stop 컨테이너이름|컨테이너ID
# 컨테이너 삭제
docker rm 컨테이너이름|컨테이너ID
- 이미지 삭제


➕ 공부자료
0 ~ 3-2 까지
[따배도] 도커 시리즈
www.youtube.com
'DevOps > Docker' 카테고리의 다른 글
따배도 도커 시리즈 5] 컨테이너 보관창고 Registry (0) | 2023.04.13 |
---|---|
따배도 도커 시리즈 4] 컨테이너 만들고 허브에 배포해보기 (0) | 2023.04.13 |
원티드 챌린지 Docker 2] 로컬환경에서 도커를 활용해보자! (0) | 2023.04.09 |
원티드 챌린지 Docker 1] 컨테이너 기술, Docker의 기본 개념과 사용법 (0) | 2023.04.09 |
Docker] 개념 (0) | 2023.04.08 |