01 Docker란 무엇이며, 왜 필요한가?
02 Docker의 핵심 개념과 용어
03 Do(ckerize) it yourself
Docker란?
애플리케이션을 개발(developing)하고, 배포(shipping)하고, 실행(running)하기 위한 Open Platform
OS-level Virtualization(Linux Container)를 제공하기 위한 구현 제품.
애플리케이션과 인프라스트럭처의 의존관계를 분리할 수 있는 방법
가상머신(Virtual Machine)의 단점을 극복할 수 있는 리눅스 컨테이너 기술의 구현
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 위에서 실행된 특수한 형태의 격리된 프로세스
01 Docker란 무엇이며, 왜 필요한가?
02 Docker의 핵심 개념과 용어
03 Do(ckerize) it yourself
Docker란?
애플리케이션을 개발(developing)하고, 배포(shipping)하고, 실행(running)하기 위한 Open Platform
OS-level Virtualization(Linux Container)를 제공하기 위한 구현 제품.
애플리케이션과 인프라스트럭처의 의존관계를 분리할 수 있는 방법
가상머신(Virtual Machine)의 단점을 극복할 수 있는 리눅스 컨테이너 기술의 구현
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 위에서 실행된 특수한 형태의 격리된 프로세스
01 Docker란 무엇이며, 왜 필요한가?
02 Docker의 핵심 개념과 용어
03 Do(ckerize) it yourself
Docker란?
애플리케이션을 개발(developing)하고, 배포(shipping)하고, 실행(running)하기 위한 Open Platform
OS-level Virtualization(Linux Container)를 제공하기 위한 구현 제품.
애플리케이션과 인프라스트럭처의 의존관계를 분리할 수 있는 방법
가상머신(Virtual Machine)의 단점을 극복할 수 있는 리눅스 컨테이너 기술의 구현
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 위에서 실행된 특수한 형태의 격리된 프로세스
데브시스터즈의 Cookie Run: OvenBreak 에 적용된 Kubernetes 기반 다중 개발 서버 환경 구축 시스템에 대한 발표입니다.
Container orchestration 기반 개발 환경 구축 시스템의 필요성과, 왜 Kubernetes를 선택했는지, Kubernetes의 개념과 유용한 기능들을 다룹니다. 아울러 구축한 시스템에 대한 데모와, 작업했던 항목들에 대해 리뷰합니다.
*NDC17 발표에서는 데모 동영상을 사용했으나, 슬라이드 캡쳐로 대신합니다.
데브시스터즈의 Cookie Run: OvenBreak 에 적용된 Kubernetes 기반 다중 개발 서버 환경 구축 시스템에 대한 발표입니다.
Container orchestration 기반 개발 환경 구축 시스템의 필요성과, 왜 Kubernetes를 선택했는지, Kubernetes의 개념과 유용한 기능들을 다룹니다. 아울러 구축한 시스템에 대한 데모와, 작업했던 항목들에 대해 리뷰합니다.
*NDC17 발표에서는 데모 동영상을 사용했으나, 슬라이드 캡쳐로 대신합니다.
2016 아이펀팩토리 Dev Day 발표 자료
강연 제목 : Docker 로 Linux 없이 Linux 환경에서 개발하기
발표자 : 김진욱 CTO
<2016>
- 일시 : 2016년 9월 28 수요일 12:00~14:20
- 장소 : 넥슨 판교 사옥 지하 1층 교육실
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
도커 무작정 따라하기
- 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커의 기본 개념부터 설치와 사용 방법까지 설명합니다.
더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
[17.01.19] docker introduction (Korean Version)Ildoo Kim
Docker(도커) 소개를 위해 사용했던 자료입니다.
제가 속한 개발팀에서는 도커 컨테이너를 기반으로 개발부터 배포까지 가능한 환경 및 인프라를 구축하여 개발팀에서 대다수의 오퍼레이션까지 관여하면서 Devops 형태로 운영합니다.
Docker(도커)를 처음 사용하거나 개념적으로 익숙하지 않은 초보를 위해 만든 자료입니다.
슬라이드에서 사용된 스크립트/코드는 아래에 있습니다.
https://github.com/ildoonet/docker_introduction
----
김일두, Software Engineer @ Kakao
Github : https://github.com/ildoonet
Linkedin : https://www.linkedin.com/in/ildoo-kim-56962034/
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
저희 팀에서 Docker Swarm을 처음 도입한 계기는 사실 배포 자동화 프로세스 구축하고 싶었기 때문이었습니다.
처음엔 서버가 하나 뿐이여서 컨테이너 오케스트레이션의 묘미를 느끼지 못했는데 관리자, 푸시, 이벤트, 테스트 등등 여러 서버가 붙으면서 여러개의 서버를 관리해야 했는데
미리 구축해놓은 Docker Swarm이 많은 편의 기능을 제공하고 있어서 여러개의 서버를 관리하는 것도 개발자가 부담없이 할 수 있게 되었습니다.
이 슬라이드는 제가 서버를 구축하는 과정에서 겪었던 어려움들을 여러분은 겪지 않길 바라며 제작하게 되었습니다.
만약 이 슬라이드를 보시는 분이 Docker및 Docker Swarm을 처음 접해보시는 거라면 이 자료가 좋은 가이드가 될 수 있을 것 같습니다.
감사합니다.
이도현 드림
도커의 근간 기술을 이해하기 위해 도커의 역사를 살펴보고, 클러스터 환경으로 컨테이너 환경을 운영하는 쿠버네티스에 대한 핵심 개념에 대해 알아봅니다. 마지막으로 쿠버네티스 클러스터를 손쉽게 생성하고 관리할 수 있는 네이버 클라우드 플랫폼 Kubernetes service를 데모를 통해 소개해드립니다 | To understand Docker's underlying technology, we look at Docker's history and learn about the core concepts of Kubernetis, which operates a container environment in a cluster environment. Lastly, I will introduce Naver's cloud platform Kubernetes service, which allows you to easily create and manage Kubernetes clusters, through a demo.
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Docker Seoul Meetup #2에서 발표한 자료입니다.
CoreOS에서 confd와 sidekick service를 이용한 서비스 배포에 대한 내용입니다.
http://www.youtube.com/watch?v=5ixJCM6pAcg
영상과 함께 보시면 더 좋습니다 :)
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
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