SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Introdcution to
Docker
2021
01 Docker란 무엇이며, 왜 필요한가?
02 Docker의 핵심 개념과 용어
03 Do(ckerize) it yourself
Docker란 무엇이며,왜 필요한가?
Docker란?
• 애플리케이션을 개발(developing)하고, 배포(shipping)하고, 실행(running)하기 위한 Open Platform
• OS-level Virtualization(Linux Container)를 제공하기 위한 구현 제품.
• 애플리케이션과 인프라스트럭처의 의존관계를 분리할 수 있는 방법
• 가상머신(Virtual Machine)의 단점을 극복할 수 있는 리눅스 컨테이너 기술의 구현
Docker는 왜 필요한가? (애플리케이션을구동하기위한동일한서버환경이필요한경우어떻게하는가?)
OPTION 1. Document 이용
그때는 맞고 지금은 틀리다
Docker는 왜 필요한가? (애플리케이션을구동하기위한동일한서버환경이필요한경우어떻게하는가?)
OPTION 2. Virtual Machine 이용
Virtual Machine Docker Container
VS
Host O/S 위에서 하드웨어를 에뮬레이션(Hypervisor, a.k.a.
VMM) 한 뒤, 그 위에 다시 Guest O/S를 구동하는 방식
단점 : Heavyweight, Limited performance, Memory
allocation etc.
Host O/S의 커널을 공유하면서 특수한 형태의 격리된
프로세스가 구동되는 방식
Docker는 왜 필요한가? (애플리케이션을구동하기위한동일한서버환경이필요한경우어떻게하는가?)
OPTION 2. Virtual Machine 이용
Host O/S 위에서 하드웨어를 에뮬레이션(Hypervisor, a.k.a.
VMM) 한 뒤, 그 위에 다시 Guest O/S를 구동하는 방식
단점 : Heavyweight, Limited performance, Memory
allocation etc.
Host O/S의 커널을 공유하면서 특수한 형태의 격리된
프로세스가 구동되는 방식
Docker는 왜 필요한가? (애플리케이션을구동하기위한동일한서버환경이필요한경우어떻게하는가?)
OPTION 3. AWS AMI(Amazon Machine Image) 이용
Amazon Machine Image Docker Container
VS
Root Volume을 포함한 Amazon EC2 instance의 이미지
단점 : Cloud 제공자 dependency, 로컬 개발 환경 적용
어려움. Host O/S 자체가 결정되어 있음. 하나의 Host
O/S에서 여러 개의 이미지를 동시에 사용 불가
Host O/S의 커널을 공유하면서 특수한 형태의 격리된
프로세스가 구동되는 방식
Docker의 핵심 개념과 용어
Docker Architecture
• Docker Client : 명령어를 통해 Docker Daemon에 API를 호출하여 Docker Image와 Container를 관리할 수 있는 프로그램
• Docker Daemon : Docker API 요청을 수신하여 Docker Object(Image, Container, Network, Volue 등)를 관리할 수 있는 프로세스
• Docker Registry : Docker Image를 저장하고 관리하는 공간. Public Registry(ex. Docker Hub)와 Private Registry가 있음.
• Dockerfile : Docker Image를 빌드하기 위한 정보 및 명령어가 작성된 파일 (Docker Image를 생성하는 방법 중 하나)
• Docker Image : Dockerfile, Docker Registry, 또는 다른 Docker Image로부터 생성된 컨테이너 생성을 위한 Read-only Template
• Docker Container : Docker Image 위에서 실행된 특수한 형태의 격리된 프로세스
https://docs.docker.com/get-
started/overview/
Docker Client Commands
Docker Daemon에 API를 호출하는 다양한 명령어들
변경 작업
Docker Container
ubuntu:latest
Docker Image
run
build
commit
pull
push
Docker Registry (Remote, Public)
ubuntu:custom
Docker Image
Docker File
FROM ubuntu:latest
RUN apt-get …
WORKDIR /xxx …
ubuntu:myimg
Docker Image docker images
Docker Registry (Local, Private)
start / restart / stop
ps / ps -a
rm
rmi
Do(ckerize) it yourself
1. Docker Download & Install (Mac OSX 기준)
• https://www.docker.com/products/docker-desktop
$> docker –version
Docker version 20.10.5, build 55c4c88
2. Shared Image를 이용한 Container 실행 (1/3)
변경 작업
Docker Container
ubuntu:latest
Docker Image
run
build
commit
pull
push
Docker Registry (Remote, Public)
ubuntu:custom
Docker Image
Docker File
FROM ubuntu:latest
RUN apt-get …
WORKDIR /xxx …
ubuntu:myimg
Docker Image docker images
Docker Registry (Local, Private)
start / restart / stop
ps / ps -a
rm
rmi
2. Shared Image를 이용한 Container 실행 (1/3)
$> docker pull ubuntu:latest
latest: Pulling from library/ubuntu
345e3491a907: Pull complete
57671312ef6f: Pull complete
5e9250ddb7d0: Pull complete
Digest: sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
$> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7e0aa2d69a15 12 days ago 72.7MB
$> docker run -it ubuntu:latest bash
root@20319b78ee46:/# exit
Exit
• -i(--interactive) : Keep STDIN open even if not attached
• -t(--tty) : Allocate a pseudo-tty
2. Shared Image를 이용한 Container 실행 (2/3)
변경 작업
Docker Container
ubuntu:latest
Docker Image
run
build
commit
pull
push
Docker Registry (Remote, Public)
ubuntu:custom
Docker Image
Docker File
FROM ubuntu:latest
RUN apt-get …
WORKDIR /xxx …
ubuntu:myimg
Docker Image docker images
Docker Registry (Local, Private)
start / restart / stop
ps / ps -a
rm
rmi
2. Shared Image를 이용한 Container 실행 (2/3)
$> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c6c5bba0428 ubuntu:latest "bash" 44 seconds ago Exited (0) 39 seconds ago sweet_pasteur
$> docker start -i 8c6c5bba0428
root@8c6c5bba0428:/# git --version
bash: git: command not found
root@8c6c5bba0428:/# apt-get update
...
root@8c6c5bba0428:/# apt-get install git
...
root@8c6c5bba0428:/# git --version
git version 2.25.1
root@8c6c5bba0428:/# exit
exit
2. Shared Image를 이용한 Container 실행 (3/3)
변경 작업
Docker Container
ubuntu:latest
Docker Image
run
build
commit
pull
push
Docker Registry (Remote, Public)
ubuntu:custom
Docker Image
Docker File
FROM ubuntu:latest
RUN apt-get …
WORKDIR /xxx …
ubuntu:myimg
Docker Image docker images
Docker Registry (Local, Private)
start / restart / stop
ps / ps -a
rm
rmi
2. Shared Image를 이용한 Container 실행 (3/3)
$> docker diff 8c6c5bba0428
C /usr
C /usr/share
A /usr/share/gitweb
A /usr/share/gitweb/gitweb.cgi
A /usr/share/gitweb/index.cgi
A /usr/share/gitweb/static
...
$> docker commit 8c6c5bba0428 ubuntu:git
sha256:0b5f76111343b32caa95823e7635e50c0fb2ca65aae5333c2986e5f975091cc2
$> docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu git 0b5f76111343 13 minutes ago 202MB
ubuntu latest 7e0aa2d69a15 2 weeks ago 72.7MB
• sha256:0b5f76111343b32ca... : 일종의 commit hash
2. Shared Image를 이용한 Container 실행 (3/3)
$> docker run -it ubuntu:git
root@1bf72ef870c8:/# git --version
git version 2.25.1
exit
$> docker push ubuntu:git
The push refers to repository [docker.io/library/ubuntu]
17b604a4a937: Preparing
2f140462f3bc: Preparing
63c99163f472: Preparing
ccdbb80308cc: Preparing
denied: requested access to the resource is denied
$> docker login
Login with your Docker ID to ...
Username: xxxxxxxx
Password: xxxxxxxx
Login Succeeded
• Docker image를 로그인 한 계정의 private repository로 push 해야 함.
2. Shared Image를 이용한 Container 실행 (3/3)
$> docker tag ubuntu:git logispot/ubuntu:git
$> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu git 0b5f76111343 52 minutes ago 202MB
logispot/ubuntu git 0b5f76111343 52 minutes ago 202MB
ubuntu latest 7e0aa2d69a15 2 weeks ago 72.7MB
$> docker push logispot/ubuntu:git
The push refers to repository [docker.io/logispot/ubuntu]
17b604a4a937: Pushed
2f140462f3bc: Mounted from library/ubuntu
63c99163f472: Mounted from library/ubuntu
ccdbb80308cc: Mounted from library/ubuntu
git: digest: sha256:1fcf3a274a16215b92c4bd86c95e11fbc86bd3b0e69ccda21c017fe68b8bd04b size: 1155
$> docker rmi ubuntu:latest
Error response from daemon: conflict: ...
$> docker rm 8c6c5bba0428
8c6c5bba0428
$> docker rmi ubuntu:latest
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93
2. Shared Image를 이용한 Container 실행 (3/3)

Mais conteúdo relacionado

Mais procurados

Introduce Docker
Introduce DockerIntroduce Docker
Introduce DockerYongbok Kim
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
docker-based remote desktop
docker-based remote desktopdocker-based remote desktop
docker-based remote desktopHyeong-Kyu Lee
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08Nomad Connection, Inc.
 
Docker introduction
Docker introductionDocker introduction
Docker introductionDaegwon Kim
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_startSukjin Yun
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101Daegwon Kim
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXpressEngine
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편negabaro
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Dockerpyrasis
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google KubernetesYongbok Kim
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법pyrasis
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례NAVER LABS
 
CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개충섭 김
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료Juneyoung Oh
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Tae Young Lee
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 KubernetesTommy Lee
 

Mais procurados (20)

Introduce Docker
Introduce DockerIntroduce Docker
Introduce Docker
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
DevOps with Docker
DevOps with DockerDevOps with Docker
DevOps with Docker
 
docker-based remote desktop
docker-based remote desktopdocker-based remote desktop
docker-based remote desktop
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
Devfair kubernetes 101
Devfair kubernetes 101Devfair kubernetes 101
Devfair kubernetes 101
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
 
도커 학습과 Boot2Docker
도커 학습과 Boot2Docker도커 학습과 Boot2Docker
도커 학습과 Boot2Docker
 
Introduce Google Kubernetes
Introduce Google KubernetesIntroduce Google Kubernetes
Introduce Google Kubernetes
 
Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법Docker란 무엇인가? : Docker 기본 사용법
Docker란 무엇인가? : Docker 기본 사용법
 
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
Docker + Kubernetes를 이용한 빌드 서버 가상화 사례
 
CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개CoreOS를 이용한 Docker 관리툴 소개
CoreOS를 이용한 Docker 관리툴 소개
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
 

Semelhante a Introduction to Docker - LOGISPOT

왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법GeunCheolYeom
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Steve Shim
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)Ji-Woong Choi
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)CONNECT FOUNDATION
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container DayAmazon Web Services Korea
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기raccoony
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
 
[TeamStudy-022] Docker
[TeamStudy-022] Docker[TeamStudy-022] Docker
[TeamStudy-022] DockerWonjun Hwang
 

Semelhante a Introduction to Docker - LOGISPOT (20)

왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
 
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
Docker Container
Docker ContainerDocker Container
Docker Container
 
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
K8s in action02
K8s in action02K8s in action02
K8s in action02
 
Docker Intro
Docker IntroDocker Intro
Docker Intro
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
 
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
[9월 런치 세미나] 도커와 쿠버네티스 기술에 스며들다
 
Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기Docker (Compose) 활용 - 개발 환경 구성하기
Docker (Compose) 활용 - 개발 환경 구성하기
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
 
[TeamStudy-022] Docker
[TeamStudy-022] Docker[TeamStudy-022] Docker
[TeamStudy-022] Docker
 

Introduction to Docker - LOGISPOT

  • 1. Introdcution to Docker 2021 01 Docker란 무엇이며, 왜 필요한가? 02 Docker의 핵심 개념과 용어 03 Do(ckerize) it yourself
  • 3. Docker란? • 애플리케이션을 개발(developing)하고, 배포(shipping)하고, 실행(running)하기 위한 Open Platform • OS-level Virtualization(Linux Container)를 제공하기 위한 구현 제품. • 애플리케이션과 인프라스트럭처의 의존관계를 분리할 수 있는 방법 • 가상머신(Virtual Machine)의 단점을 극복할 수 있는 리눅스 컨테이너 기술의 구현
  • 4. Docker는 왜 필요한가? (애플리케이션을구동하기위한동일한서버환경이필요한경우어떻게하는가?) OPTION 1. Document 이용 그때는 맞고 지금은 틀리다
  • 5. Docker는 왜 필요한가? (애플리케이션을구동하기위한동일한서버환경이필요한경우어떻게하는가?) OPTION 2. Virtual Machine 이용 Virtual Machine Docker Container VS Host O/S 위에서 하드웨어를 에뮬레이션(Hypervisor, a.k.a. VMM) 한 뒤, 그 위에 다시 Guest O/S를 구동하는 방식 단점 : Heavyweight, Limited performance, Memory allocation etc. Host O/S의 커널을 공유하면서 특수한 형태의 격리된 프로세스가 구동되는 방식
  • 6. Docker는 왜 필요한가? (애플리케이션을구동하기위한동일한서버환경이필요한경우어떻게하는가?) OPTION 2. Virtual Machine 이용 Host O/S 위에서 하드웨어를 에뮬레이션(Hypervisor, a.k.a. VMM) 한 뒤, 그 위에 다시 Guest O/S를 구동하는 방식 단점 : Heavyweight, Limited performance, Memory allocation etc. Host O/S의 커널을 공유하면서 특수한 형태의 격리된 프로세스가 구동되는 방식
  • 7. Docker는 왜 필요한가? (애플리케이션을구동하기위한동일한서버환경이필요한경우어떻게하는가?) OPTION 3. AWS AMI(Amazon Machine Image) 이용 Amazon Machine Image Docker Container VS Root Volume을 포함한 Amazon EC2 instance의 이미지 단점 : Cloud 제공자 dependency, 로컬 개발 환경 적용 어려움. Host O/S 자체가 결정되어 있음. 하나의 Host O/S에서 여러 개의 이미지를 동시에 사용 불가 Host O/S의 커널을 공유하면서 특수한 형태의 격리된 프로세스가 구동되는 방식
  • 9. Docker Architecture • Docker Client : 명령어를 통해 Docker Daemon에 API를 호출하여 Docker Image와 Container를 관리할 수 있는 프로그램 • Docker Daemon : Docker API 요청을 수신하여 Docker Object(Image, Container, Network, Volue 등)를 관리할 수 있는 프로세스 • Docker Registry : Docker Image를 저장하고 관리하는 공간. Public Registry(ex. Docker Hub)와 Private Registry가 있음. • Dockerfile : Docker Image를 빌드하기 위한 정보 및 명령어가 작성된 파일 (Docker Image를 생성하는 방법 중 하나) • Docker Image : Dockerfile, Docker Registry, 또는 다른 Docker Image로부터 생성된 컨테이너 생성을 위한 Read-only Template • Docker Container : Docker Image 위에서 실행된 특수한 형태의 격리된 프로세스 https://docs.docker.com/get- started/overview/
  • 10. Docker Client Commands Docker Daemon에 API를 호출하는 다양한 명령어들 변경 작업 Docker Container ubuntu:latest Docker Image run build commit pull push Docker Registry (Remote, Public) ubuntu:custom Docker Image Docker File FROM ubuntu:latest RUN apt-get … WORKDIR /xxx … ubuntu:myimg Docker Image docker images Docker Registry (Local, Private) start / restart / stop ps / ps -a rm rmi
  • 12. 1. Docker Download & Install (Mac OSX 기준) • https://www.docker.com/products/docker-desktop $> docker –version Docker version 20.10.5, build 55c4c88
  • 13. 2. Shared Image를 이용한 Container 실행 (1/3) 변경 작업 Docker Container ubuntu:latest Docker Image run build commit pull push Docker Registry (Remote, Public) ubuntu:custom Docker Image Docker File FROM ubuntu:latest RUN apt-get … WORKDIR /xxx … ubuntu:myimg Docker Image docker images Docker Registry (Local, Private) start / restart / stop ps / ps -a rm rmi
  • 14. 2. Shared Image를 이용한 Container 실행 (1/3) $> docker pull ubuntu:latest latest: Pulling from library/ubuntu 345e3491a907: Pull complete 57671312ef6f: Pull complete 5e9250ddb7d0: Pull complete Digest: sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93 Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest $> docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 7e0aa2d69a15 12 days ago 72.7MB $> docker run -it ubuntu:latest bash root@20319b78ee46:/# exit Exit • -i(--interactive) : Keep STDIN open even if not attached • -t(--tty) : Allocate a pseudo-tty
  • 15. 2. Shared Image를 이용한 Container 실행 (2/3) 변경 작업 Docker Container ubuntu:latest Docker Image run build commit pull push Docker Registry (Remote, Public) ubuntu:custom Docker Image Docker File FROM ubuntu:latest RUN apt-get … WORKDIR /xxx … ubuntu:myimg Docker Image docker images Docker Registry (Local, Private) start / restart / stop ps / ps -a rm rmi
  • 16. 2. Shared Image를 이용한 Container 실행 (2/3) $> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES $> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8c6c5bba0428 ubuntu:latest "bash" 44 seconds ago Exited (0) 39 seconds ago sweet_pasteur $> docker start -i 8c6c5bba0428 root@8c6c5bba0428:/# git --version bash: git: command not found root@8c6c5bba0428:/# apt-get update ... root@8c6c5bba0428:/# apt-get install git ... root@8c6c5bba0428:/# git --version git version 2.25.1 root@8c6c5bba0428:/# exit exit
  • 17. 2. Shared Image를 이용한 Container 실행 (3/3) 변경 작업 Docker Container ubuntu:latest Docker Image run build commit pull push Docker Registry (Remote, Public) ubuntu:custom Docker Image Docker File FROM ubuntu:latest RUN apt-get … WORKDIR /xxx … ubuntu:myimg Docker Image docker images Docker Registry (Local, Private) start / restart / stop ps / ps -a rm rmi
  • 18. 2. Shared Image를 이용한 Container 실행 (3/3) $> docker diff 8c6c5bba0428 C /usr C /usr/share A /usr/share/gitweb A /usr/share/gitweb/gitweb.cgi A /usr/share/gitweb/index.cgi A /usr/share/gitweb/static ... $> docker commit 8c6c5bba0428 ubuntu:git sha256:0b5f76111343b32caa95823e7635e50c0fb2ca65aae5333c2986e5f975091cc2 $> docker images $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu git 0b5f76111343 13 minutes ago 202MB ubuntu latest 7e0aa2d69a15 2 weeks ago 72.7MB • sha256:0b5f76111343b32ca... : 일종의 commit hash
  • 19. 2. Shared Image를 이용한 Container 실행 (3/3) $> docker run -it ubuntu:git root@1bf72ef870c8:/# git --version git version 2.25.1 exit $> docker push ubuntu:git The push refers to repository [docker.io/library/ubuntu] 17b604a4a937: Preparing 2f140462f3bc: Preparing 63c99163f472: Preparing ccdbb80308cc: Preparing denied: requested access to the resource is denied $> docker login Login with your Docker ID to ... Username: xxxxxxxx Password: xxxxxxxx Login Succeeded • Docker image를 로그인 한 계정의 private repository로 push 해야 함.
  • 20. 2. Shared Image를 이용한 Container 실행 (3/3) $> docker tag ubuntu:git logispot/ubuntu:git $> docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu git 0b5f76111343 52 minutes ago 202MB logispot/ubuntu git 0b5f76111343 52 minutes ago 202MB ubuntu latest 7e0aa2d69a15 2 weeks ago 72.7MB $> docker push logispot/ubuntu:git The push refers to repository [docker.io/logispot/ubuntu] 17b604a4a937: Pushed 2f140462f3bc: Mounted from library/ubuntu 63c99163f472: Mounted from library/ubuntu ccdbb80308cc: Mounted from library/ubuntu git: digest: sha256:1fcf3a274a16215b92c4bd86c95e11fbc86bd3b0e69ccda21c017fe68b8bd04b size: 1155 $> docker rmi ubuntu:latest Error response from daemon: conflict: ... $> docker rm 8c6c5bba0428 8c6c5bba0428 $> docker rmi ubuntu:latest Untagged: ubuntu:latest Untagged: ubuntu@sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93
  • 21. 2. Shared Image를 이용한 Container 실행 (3/3)