티스토리 뷰
A. 개요
1. Docker 가 뭐지?
도커(Docker)는 애플리케이션을 컨테이너라는 단위로 패키징하여 배포, 실행, 관리할 수 있게 해주는 오픈 소스 플랫폼이다.
컨테이너는 애플리케이션과 그 실행 환경을 함께 묶어, 다른 환경에서도 일관되게 동작할 수 있다.

2. Docker의 장점이 뭐길래?
(1) 경량화
가상머신과 비교 하자면, VMWare와 같은 프로그램은 가상의 하드웨어를 제공해 주고(VM), 그 가상의 하드웨어 안에 운영체제를 설치 하게 된다.
실제 물리 하드웨어와 통신하는 가상의 하드웨어 위에 운영체제가 올라가게 되므로, 느리고 무겁다. 반면에 Docker는 리눅스 커널 레벨의 기능을 직접 하여하여 구현, 동작 되므로 성능이 빠르고, 운영체제를 별도 설치할 필요가 없어서 가볍다.
실제로 pkg를 직접 설치해서 실행하는 process와 비교해도 퍼포먼스 차이가 거의 없을 정도로 가볍고 빠르다.
(2) 이식성
한번 만든 컨테이너는 다양한 환경에서 동일하게 동작 된다. 쉽게 JVM을 떠올리면 이해가 쉬울거 같은데, 컨테이너는 컨테이너 런타임이라는 환경 기반에 동작 된다.
다만, 메인보드 설계 Architecture 에 따라서는 달라질 수 있다. 이는 OS 커널이 linux/386 인지, linux/amd64인지, linux/arm64 인지에 따라 다르기 때문이 이건 어쩔 수 없는 문제다.
(3) 효율성
배포, 삭제가 용이하고, 자원을 효율적으로 배분하여 사용할 수 있다.
3. Docker.. 나아가서 K8S 를 겪으면서 만나게 되는 용어들...
OCI (Open Container Initiative)
Container Runtime이 다양해 지면서 호출하는 방법을 Runtime별로 개별 구현해야 하는 상황이 생기게 되자, 사용 방법을 통일하기 위한 표준을 정함.
참고 :
OCI는 2015년 6월 22일에 Docker 사와 CoreOS 사가 각각 별도로 표준화를 진행하고 있던 컨테이너의 규격을 통일하는 것을 목적으로 Docker, CoreOS 그리고 AWS, Google, Microsoft, IBM 등 주요 플랫폼 벤더가 참여하여 2015 년 6 월에 발족 한 단체이다. 즉, OCI 는 컨테이너 규격을 통일하는 것을 목적으로 만들어진 조직
Orchestration(오케스트레이션)
동시에 실행되는 contaienr들이 많아지면서, 관리의 어려움이 생기기 시작합니다. 이 container들을 자동으로 배포, 스케일링, 네트워킹, 그리고 가용성등을 관리하는 과정을 의미.
오케스트레이션 도구중에 대표적으로 docker-compose, docker-swarm, kubernetes 등이 있음.
K8S (KuberneteS)
현재 가장 널리 쓰이는 컨테이너 오케스트레이션 도구로, 구글에서 개발한 오픈소스 프로젝트.
앞글자의 K와 끝글자인 S, 그리고 가운데 8글자로 K8S라는 이름으로도 불림.
CNCF (Cloud Native Computing Foundation)
Cloud Native Computing Foundation은 컨테이너 기술을 발전시키고 기술 산업의 발전을 위해 2015 년에 설립 된 Linux Foundation 프로젝트. 구현체가 바로 Kubernetes!!
CRI(Container Runtime Interface)
K8S 에서 다양한 Runtime을 지원하기 위해, Container Runtime 의 Interface를 정의하게 됨.
Container 정지, 기동 등의 기능을 다루는 Runtime Interface.
(containerd, cri-o, rtk …. 등 다양한 Runtime들이 있음….)
참고:
- containerd는 docker v.1.11 부터 docker의 표준 runtime이 됨.
이 시점부터 docker <-> dockerd <-> containerd 의 구조가 만들어 짐. - dockerd는 rpc를 통해 containerd와 통신 하는 interface를 제공 함.
즉, docker는 단순 cli 만 제공 하고, 실제 runtime은 docker가 아닌 containerd 이다.
하지만, 통상적으로 아직도 docker 라고 표현하고 있고, 그러면 dockerd와 containerd 를 모두 얘기 하고 있다.
dockershim
docker는 OCI 표준이 만들어지기 전에 먼저 세상에 태어났다. Kubernetes에서는 꼭 품어야 하지만, 표준을 따르지 않아 골치아픈 container 가 된 셈이다.(사실 docker입장에선 억울한 면이....;;)
Kubernetes가 OCI표준을 모르고 세상에 태어난 Docker를 어떻게든 돌려 보려고 만든 Runtime..
runtime과 통신하는 단계를 하나 더 둠으로써 문제가 발생할 소지가 늘어나게 됨.
그래서 kubernetes v1.20에 dockershim이 deprecate 된다고 벌써 뉴스가 나옴…(이 글을 쓰는 시점에서는... 이것도 옛날 얘기.....;;)
표준에 따르지 않게 된 (갑자기 억울해진..) Docker는, 이제 Kubernetes로 부터 버림 받게 될 운명에 처함.
어쩌면 하늘이 두쪽나는 날이 올지도 모르겠음….
(docker+kubernetes의 조합이 깨질줄이야….)
public cloud를 안쓰면 cri-o 설치 부터 차근 차근 다시 해 봐야 할 판….. 하아…..ㅠㅠ
참고 :
- kubernetes v1.0 : 2015년도(https://en.wikipedia.org/wiki/Kubernetes)
- OCI 표준 : 2015년
- docker v1.11 : 2016년 4월 (containerd가 docker의 표준 runtime이 됨)
: https://docs.docker.com/engine/release-notes/prior-releases/#1110-2016-04-13
: https://github.com/moby/moby/pull/20662 - 이전까지는 docker execdrivers로 구동 했었음.
- dockerd는 rpc 를 통해 containerd와 통신 하는 Interface를 제공…
cgroups (control groups)
프로세스 그룹에 대한 자원 할당을 제어하는 커널 모듈
containerd의 하위 project.
Container Runtime의 Process 별 Resource를 할당하는 기능을 제공한다.
참고 링크 : https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/6/html/resource_management_guide/ch01
1장. 컨트롤 그룹 (Cgroups) 소개 | Red Hat Product Documentation
페이지 형식 선택 Multi-page Single-page
docs.redhat.com
> ls /sys/fs/cgroup/
> cat /proc/[PID]/cgroup
사실 Docker에 목을 맬 이유는 없다. 그냥 쓰면 되는거다.
docker-compose나 kubernetes 와 같은 orchestration 환경을 통해 container를 관리할 테니...
직접 container를 손댈일이... (물론 가끔 있지만) 거의 없다.
B. 설치 및 기동
설치 하지 않고 실행 해 볼수 있는 방법이 있다. 바로 PWD (Play-With-Docker)를 사용해 보는 것이다.
최대 4시간 까지 가상 환경을 임대해 사용해 볼 수 있다.
해당 사이트로 이동 후 회원 가입과 로그인을 거쳐 가운데 있는 Lab Environment 링크를 클릭하면 VM을 띄울 수 있는 화면으로 전환 된다.
다만, 사용량이 많은 경우에 이용이 어려울 수 있으니, 이점 참고 바란다.
그래서 가급적 설치 해서 사용하는게 정신건강에 이롭다.
1. 설치
Install Docker Engine | Docker Docs
Install Docker Engine
Learn how to choose the best method for you to install Docker Engine. This client-server application is available on Linux, Mac, Windows, and as a static binary.
docs.docker.com
(1) apt로 설치하는 방법
Install Docker Engine on Ubuntu | Docker Docs
Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.
docs.docker.com
- Repository 설정
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
(2) pkg로 설치하는 방법
Install Docker Engine on Ubuntu | Docker Docs
Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.
docs.docker.com
- deb package 다운로드
- 링크 이동 : https://download.docker.com/linux/ubuntu/dists/.
- pool/stable/ 경로로 이동 후 해당 Application Architecture(amd64, armhf, arm64, or s390x)를 선택 함.
- containerd.io__.deb 파을일 다운로드 함.
- 설치
sudo dpkg -i ./containerd.io_<version>_<arch>.deb
2 기동
sudo systemctl start containerd
C. 기본적인 명령어
- 도커 정보 확인:
도커 데몬에 대한 정보를 표시합니다.docker info
- 이미지 목록 보기:
docker images
- 이미지 다운로드
도커 이미지를 docker registry 에서 받아 옵니다.기본적인 이미지는 https://hub.docker.com/ 에서 찾아 보실 수 있습니다.docker pull [IMAGE_NAME:IMAGE_TAG]
- 이미지 삭제:
docker rmi [IMAGE_ID]
- 실행 중인 컨테이너 목록 보기:
docker ps
- 컨테이너 생성 및 실행:
예를 들어, nginx 이미지를 사용하여 컨테이너를 실행하려면:예를 들어 nginx 컨테이너를 백그라운드에서 실행하고, 호스트의 포트 80을 컨테이너의 포트 80에 매핑합니다.docker run -d -p 80:80 nginx
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 컨테이너 중지:
docker stop [CONTAINER_ID]
- 컨테이너 삭제:
docker rm [CONTAINER_ID]
- 컨테이너 로그 보기:
docker logs [CONTAINER_ID]
설치는 : docker pull 및 docker run으로
실행은 : docker start
중지는 : docker stop
삭제는 : docker rm (혹은 docker rm -f), docker rmi 로..
이런 명령들로 제어 가능 하니... 생각보다 심플 하다. 겁내지 말자!!
'Infra' 카테고리의 다른 글
docker-compose 에 대한 소개 및 사용법 (0) | 2024.08.28 |
---|---|
[IaC] vagrant로 virtualbox의 VM 관리하기 (2) | 2024.08.23 |
DuckDns + LetsEncrypt로 Nginx HTTPS설정 (0) | 2024.08.21 |
DevOps란? (0) | 2024.08.20 |
클라우드 서비스의 이해 (0) | 2024.08.20 |
- Total
- Today
- Yesterday
- vagrant kubernetes install
- nexus 도커 저장소 구축
- ssl 인증서 만들기
- 자체 서명 인증서 만들기
- kubernetes endpoint
- kubernetes taint
- calico 설치
- 무료도메인 duckdns
- k8s 설치
- vagrant 설치
- dockershim oci cri
- duckdns letsencrypt 인증서
- nexus docker 저장소 구축
- 무료인증서 letsencrypt
- duckdns letsencrypt
- vagrant kubernetws install
- k8s cluster
- vagrant virtualbox
- nginx https
- docker-compose 사용법
- 사설인증서 nginx에 설정
- private docker registry 구축
- nginx https letsencrypt
- letencrypt ssl 인증서
- k8s service
- nodeport service kubernetes
- service nodeport
- 도커 저장소
- docker compose install
- vagrant install
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |