ݺߣ

ݺߣShare a Scribd company logo
DOCKER 교육
2017.05.29
SDP 오 대리 <jyoh@i-
on.net>
교육의 목적
- docker 개념잡기
- Image 와 Container 개념잡기
- 자주 쓰는 실무 명령어 친해지기
- docker 데몬 설정 변경하기
- Dockerfile 로 이미지 자동화하기
- docker 빌드 배포의 장점 이해하
기
- 적용점 생각해보기
Docker 란?
호스
트
각 개별 시스
템
공식 :
- 기존의 리눅스 가상머신보다
경량화
- 빠르고 가벼워
체험 :
- 잘못되도 호스트에 영향이 없
어 마음이 가벼움
- 서비스의 추가 / 제거가 용이
서버
사내서버 실황
docker 의 구조
LOCAL
docker hub
이미지 다운로
드
이미지 업로드
로컬에 저
장
이미지로부터
컨테이너 생성
컨테이너로부
터
이미지 업데이
트
[ 이미지 ]
- 변경 불가능(immutable)
- docker hub 로 업데이트 가
능
[ 컨테이너 ]
- 변경 가능(mutable)
- docker hub 로 업데이트 불가
능
- 이미지로 저장되지 않는 한 정
보가 보존되지 않음
docker 의 명령어 친해지기
1 : 다운로드에서 작업까지
docker pull centos:latest
- docker hub 로부터 이
미지를 내려받기
- <이미지명>:<태그
명>
docker run -d --name=test centos:latest
- 다운받은 이미지로부터 컨테이너 생
성하기
- -d 혹은 --detach : 데몬모드로 실행. -d
누락 시. 컨테이너의 상태가 Exited 로
전환됨
- --name : 생성한 컨테이너에 이름을
부여. 누락시 난수화된 컨테이너 ID로
작업을 해야하니 꼭 부여하기
docker exec -it test /bin/bash
- 만들어진 컨테이너에 접속
하기
- -i : interactive
- -t : tty 모드
- 제일 끝에는 명령어
docker 의 명령어 친해지기
2 : 작업 후 업로드
docker commit test testimg
- 컨테이너를 이미지로 커밋하는
작업
- 첫번째 인자는 컨테이너명
- 두번째 인자는 새로 등록할 이미
지명
1. docker tag testimg juneyoungoh/education:test
- 새로 등록할 이미지에 tag 를 부여하기
- 두번째 리파지토리명 인자는 반드시 <도커허브 유저
ID>/<리파지토리명>:<태그명> 일 것
- 하기 전에 docker login 하기
2. docker push juneyoungoh/education:test
- 새로 변경된 로컬 이미지를 허브에 등록하는 작업
- 인자는 1 번에서 두번째 인자와 동일
docker 의 명령어 친해지기
3 : 작업과 디버깅 1
[ 이미지와 컨테이너 ]
현재 로컬에 내려받아진 이미지 목록 조회하기 : docker images
현재 로컬에서 사용하는 컨테이너 목록 조회하기 : docker ps
호스트에서 컨테이너로 파일 전송하기 : docker cp <호스트 파일> <컨테이너ID>:<컨테이너 경로>
구동 중인 컨테이너 구동/멈추기 : docker start/stop <컨테이너ID>
컨테이너 삭제하기 : docker rm <컨테이너ID>
사용하지 않는 이미지 삭제 하기 : docker rmi <이미지 ID>
docker 의 명령어 친해지기
3 : 작업과 디버깅 2
[ 디버깅 ]
Case1. run 명령으로 컨테이너를 구동 후, ps 를 했는데 뜨자마자 Exited 로 상태가 표시
- docker logs <컨테이너 ID> : 컨테이너의 로그를 확인
Case2. docker 데몬이 <defunc> 상태에 돌입
- 노답. 장비 리부팅. docker 데몬은 부모의 pid 가 1 이기 때문에 <defunc> 상태로 빠지게 되면 장비 리
부팅 뿐이 답이 없음
docker 데몬 설정 변경하기
Case A.
열심히 작업하고 있는데 새로운 container 가 뜨지 않아 프로세스를 확인하니, 데몬이 <defunc> 상태로 빠짐.
이 부장님 왈, “/var/lib 은 용량이 적어서 docker 데이터 파일을 /data 로 옮겨야 됨”.
- 기본으로 잡히는 설정을 변경하려면 daemon.json 을 만들어줘야 함.(있으면 쓰면 됨)
- centos 에서는 /etc/docker 에 만들어 줘야 하는데 파일이 없으면 생성하면 됨
- daemon.json 작성법 공식 가이드
Case 2. 리눅스 default 를 붙여넣었는데 아예 뜨지도 않음
- stackoverflow 에서 알려줌
- 쓸 거 빼고는 json 에서 모두 제거해야 함.
docker 데몬 설정 변경하
기 :OSX
1. Preferences 누르기
2. Advanced 탭에서 json 작성
고오급 기술 : Dockerfile
docker build -t test .
- -t 다음에는 사용할 태그명을 넣으시오.
- . 대신에 Dockerfile 이 있는 경로를 넣음
됨
Dockerfile ?
- 기본적으로 쉘스크립트
- 이미지가 구동될 때 할 행동을 미리 정의할
수 있음
- 가령, 내가 test 이미지를 run 하면 자동으로
jdk 랑 톰캣을 깔아서 웹서버를 띄워줘
Dockerfile 활용하기
[ Dockerfile 키워드 ]
- FROM : 모든 도커파일을 FROM 으로 시작함. FROM 뒤에는 배경이 될 이미지가 명시. ex> FROM
centos
- ARG : docker build 명령시 --build-arg <ARG명>=<사용할 값> 으로 받을 수 있는 파라미터
- ENV : 생성된 docker image 내에서 사용할 환경 변수, 가령 JAVA_HOME 이라던가
CATALINA_HOME 이라던가…
- RUN : 이미지 내에서 실행될 명령
- EXPOSE : 도커 컨테이너에서 호스트로 개방될 포트를 명시
- VOLUME : 도커 컨테이너에서 호스트와 공유할 볼륨을 명시
- CMD : docker run 에 매핑되는 명령어 ● Dockerfile 예시는 참고자료 항목 참조
Dockerfile 활용하기
[ Dockerfile 디버깅 ]
CASE A.
갑돌이는 아래와 같이 Dockerfile 을 작성하였다. docker build 로 성공적으로 이미지를 생성하고 docker run
을 하였다. 당연히 상태가 Up 일 줄 알았지만 Exited 로 표기 되며 정상 구동이 되지 않는다.
StackOverflow 에 물어보기
docker 사용해보니 ...
장점
- 망쳐도 컨테이너 안에서 망침. 마음이 가볍다
- 한번 Dockerfile 만들면 배포하기 쉬움
- 레이어로 관리되서 업데이트가 빠르고 가벼움
- 신기하고 재미지다(?)
단점
- 설정하는 사람은 시스템을 다 알아야 함 (뭐는 루비고, 뭐는 파이썬이고)
- 한글 레퍼런스가 부족함
- <defunc> 문제는 노답
부록. Docker hub 사용하기
How to use
1. 도커허브 로그인
2. Create Repository +
3. 로컬에서 docker tag
4. 로컬에서 docker push
Question. 다른 repository 보
니까 Dockerfile 도 tab 으로
제공되던데…
1. 유료플랜에서 제공
2. 대부분 무료플랜은
github에 dockerfile 을
연동하는 방식으로 극
복● 무료 플랜 Dockerfile github 연동은 여기처럼 하
면 됨
참고 자료
- docker 공식 가이드 : 영어만 되면 제일 확실함
- pyrasis - 도커 무작정 따라하기 : 강추! 완전 이 PPT 를 보고나면 책을 살 필요성을 못느끼게 됨
- 교육에 사용되는 DockerHub
- 교육에 사용된 GitHub

More Related Content

What's hot (20)

Docker swarm introduction
Docker swarm introductionDocker swarm introduction
Docker swarm introduction
Evan Lin
Docker
DockerDocker
Docker
A.K.M. Ahsrafuzzaman
Docker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersDocker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and Containers
Yajushi Srivastava
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
Instruqt
Docker intro
Docker introDocker intro
Docker intro
Oleg Z
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
fazalraja
Introduction to Docker storage, volume and image
Introduction to Docker storage, volume and imageIntroduction to Docker storage, volume and image
Introduction to Docker storage, volume and image
ejlp12
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
Docker, Inc.
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
Edureka!
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
Valerio Radice
Docker Basics
Docker BasicsDocker Basics
Docker Basics
DuckDuckGo
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
Jeffrey Ellin
Intro To Docker
Intro To DockerIntro To Docker
Intro To Docker
Jessica Lucci
Docker introduction
Docker introductionDocker introduction
Docker introduction
dotCloud
Kubernetes
KubernetesKubernetes
Kubernetes
Lhouceine OUHAMZA
Linux Container Technology 101
Linux Container Technology 101Linux Container Technology 101
Linux Container Technology 101
inside-BigData.com
Intro dockerIntro docker
Intro docker
Fedir RYKHTIK
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
TIMEGATE
Understanding docker networking
Understanding docker networkingUnderstanding docker networking
Understanding docker networking
Lorenzo Fontana
Containerization and Docker
Containerization and DockerContainerization and Docker
Containerization and Docker
Megha Bansal
Docker swarm introduction
Docker swarm introductionDocker swarm introduction
Docker swarm introduction
Evan Lin
Docker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and ContainersDocker 101 : Introduction to Docker and Containers
Docker 101 : Introduction to Docker and Containers
Yajushi Srivastava
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
Instruqt
Docker intro
Docker introDocker intro
Docker intro
Oleg Z
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
fazalraja
Introduction to Docker storage, volume and image
Introduction to Docker storage, volume and imageIntroduction to Docker storage, volume and image
Introduction to Docker storage, volume and image
ejlp12
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
Edureka!
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
Valerio Radice
Docker introduction
Docker introductionDocker introduction
Docker introduction
dotCloud
Intro dockerIntro docker
Intro docker
Fedir RYKHTIK
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
TIMEGATE
Understanding docker networking
Understanding docker networkingUnderstanding docker networking
Understanding docker networking
Lorenzo Fontana
Containerization and Docker
Containerization and DockerContainerization and Docker
Containerization and Docker
Megha Bansal

Similar to Docker 사내교육 자료 (20)

Introduce Docker
Introduce DockerIntroduce Docker
Introduce Docker
Yongbok Kim
[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
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
negabaro
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
Ji-Woong Choi
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
Hosang Jeon
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
Sukjin Yun
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
LOGISPOT
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
David Lee
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
Ji-Woong Choi
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
Amazon Web Services Korea
GDGoC_Backend_GoServer_5주차 발표자료.pdf
GDGoC_Backend_GoServer_5주차 발표자료.pdfGDGoC_Backend_GoServer_5주차 발표자료.pdf
GDGoC_Backend_GoServer_5주차 발표자료.pdf
dpfls5645
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
XpressEngine
Docker
DockerDocker
Docker
Hongmin Park
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
Open Source Consulting
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Jude Kim
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
CONNECT FOUNDATION
[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
Nomad Connection, Inc.
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
Steve Shim
[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
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
negabaro
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
Ji-Woong Choi
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
Hosang Jeon
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
LOGISPOT
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
David Lee
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
[오픈소스컨설팅]Docker on Cloud(Digital Ocean)
Ji-Woong Choi
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day
Amazon Web Services Korea
GDGoC_Backend_GoServer_5주차 발표자료.pdf
GDGoC_Backend_GoServer_5주차 발표자료.pdfGDGoC_Backend_GoServer_5주차 발표자료.pdf
GDGoC_Backend_GoServer_5주차 발표자료.pdf
dpfls5645
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
XpressEngine
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Jude Kim
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
CONNECT FOUNDATION
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
iFunFactory Inc.
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
Steve Shim

More from Juneyoung Oh (7)

Docker introduction for the beginners
Docker introduction for the beginnersDocker introduction for the beginners
Docker introduction for the beginners
Juneyoung Oh
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치
Juneyoung Oh
How to build a slack-hubot with js
How to build a slack-hubot with jsHow to build a slack-hubot with js
How to build a slack-hubot with js
Juneyoung Oh
Github 의 release 기능
Github 의 release 기능Github 의 release 기능
Github 의 release 기능
Juneyoung Oh
Html5 canvas6 week6n7n8
Html5 canvas6 week6n7n8Html5 canvas6 week6n7n8
Html5 canvas6 week6n7n8
Juneyoung Oh
Html5 canvas study week1n2
Html5 canvas study week1n2Html5 canvas study week1n2
Html5 canvas study week1n2
Juneyoung Oh
Tizen installation guide for OSX
Tizen installation guide for OSXTizen installation guide for OSX
Tizen installation guide for OSX
Juneyoung Oh
Docker introduction for the beginners
Docker introduction for the beginnersDocker introduction for the beginners
Docker introduction for the beginners
Juneyoung Oh
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치
Juneyoung Oh
How to build a slack-hubot with js
How to build a slack-hubot with jsHow to build a slack-hubot with js
How to build a slack-hubot with js
Juneyoung Oh
Github 의 release 기능
Github 의 release 기능Github 의 release 기능
Github 의 release 기능
Juneyoung Oh
Html5 canvas study week1n2
Html5 canvas study week1n2Html5 canvas study week1n2
Html5 canvas study week1n2
Juneyoung Oh
Tizen installation guide for OSX
Tizen installation guide for OSXTizen installation guide for OSX
Tizen installation guide for OSX
Juneyoung Oh

Docker 사내교육 자료

  • 1. DOCKER 교육 2017.05.29 SDP 오 대리 <jyoh@i- on.net>
  • 2. 교육의 목적 - docker 개념잡기 - Image 와 Container 개념잡기 - 자주 쓰는 실무 명령어 친해지기 - docker 데몬 설정 변경하기 - Dockerfile 로 이미지 자동화하기 - docker 빌드 배포의 장점 이해하 기 - 적용점 생각해보기
  • 3. Docker 란? 호스 트 각 개별 시스 템 공식 : - 기존의 리눅스 가상머신보다 경량화 - 빠르고 가벼워 체험 : - 잘못되도 호스트에 영향이 없 어 마음이 가벼움 - 서비스의 추가 / 제거가 용이
  • 5. docker 의 구조 LOCAL docker hub 이미지 다운로 드 이미지 업로드 로컬에 저 장 이미지로부터 컨테이너 생성 컨테이너로부 터 이미지 업데이 트 [ 이미지 ] - 변경 불가능(immutable) - docker hub 로 업데이트 가 능 [ 컨테이너 ] - 변경 가능(mutable) - docker hub 로 업데이트 불가 능 - 이미지로 저장되지 않는 한 정 보가 보존되지 않음
  • 6. docker 의 명령어 친해지기 1 : 다운로드에서 작업까지 docker pull centos:latest - docker hub 로부터 이 미지를 내려받기 - <이미지명>:<태그 명> docker run -d --name=test centos:latest - 다운받은 이미지로부터 컨테이너 생 성하기 - -d 혹은 --detach : 데몬모드로 실행. -d 누락 시. 컨테이너의 상태가 Exited 로 전환됨 - --name : 생성한 컨테이너에 이름을 부여. 누락시 난수화된 컨테이너 ID로 작업을 해야하니 꼭 부여하기 docker exec -it test /bin/bash - 만들어진 컨테이너에 접속 하기 - -i : interactive - -t : tty 모드 - 제일 끝에는 명령어
  • 7. docker 의 명령어 친해지기 2 : 작업 후 업로드 docker commit test testimg - 컨테이너를 이미지로 커밋하는 작업 - 첫번째 인자는 컨테이너명 - 두번째 인자는 새로 등록할 이미 지명 1. docker tag testimg juneyoungoh/education:test - 새로 등록할 이미지에 tag 를 부여하기 - 두번째 리파지토리명 인자는 반드시 <도커허브 유저 ID>/<리파지토리명>:<태그명> 일 것 - 하기 전에 docker login 하기 2. docker push juneyoungoh/education:test - 새로 변경된 로컬 이미지를 허브에 등록하는 작업 - 인자는 1 번에서 두번째 인자와 동일
  • 8. docker 의 명령어 친해지기 3 : 작업과 디버깅 1 [ 이미지와 컨테이너 ] 현재 로컬에 내려받아진 이미지 목록 조회하기 : docker images 현재 로컬에서 사용하는 컨테이너 목록 조회하기 : docker ps 호스트에서 컨테이너로 파일 전송하기 : docker cp <호스트 파일> <컨테이너ID>:<컨테이너 경로> 구동 중인 컨테이너 구동/멈추기 : docker start/stop <컨테이너ID> 컨테이너 삭제하기 : docker rm <컨테이너ID> 사용하지 않는 이미지 삭제 하기 : docker rmi <이미지 ID>
  • 9. docker 의 명령어 친해지기 3 : 작업과 디버깅 2 [ 디버깅 ] Case1. run 명령으로 컨테이너를 구동 후, ps 를 했는데 뜨자마자 Exited 로 상태가 표시 - docker logs <컨테이너 ID> : 컨테이너의 로그를 확인 Case2. docker 데몬이 <defunc> 상태에 돌입 - 노답. 장비 리부팅. docker 데몬은 부모의 pid 가 1 이기 때문에 <defunc> 상태로 빠지게 되면 장비 리 부팅 뿐이 답이 없음
  • 10. docker 데몬 설정 변경하기 Case A. 열심히 작업하고 있는데 새로운 container 가 뜨지 않아 프로세스를 확인하니, 데몬이 <defunc> 상태로 빠짐. 이 부장님 왈, “/var/lib 은 용량이 적어서 docker 데이터 파일을 /data 로 옮겨야 됨”. - 기본으로 잡히는 설정을 변경하려면 daemon.json 을 만들어줘야 함.(있으면 쓰면 됨) - centos 에서는 /etc/docker 에 만들어 줘야 하는데 파일이 없으면 생성하면 됨 - daemon.json 작성법 공식 가이드 Case 2. 리눅스 default 를 붙여넣었는데 아예 뜨지도 않음 - stackoverflow 에서 알려줌 - 쓸 거 빼고는 json 에서 모두 제거해야 함.
  • 11. docker 데몬 설정 변경하 기 :OSX 1. Preferences 누르기 2. Advanced 탭에서 json 작성
  • 12. 고오급 기술 : Dockerfile docker build -t test . - -t 다음에는 사용할 태그명을 넣으시오. - . 대신에 Dockerfile 이 있는 경로를 넣음 됨 Dockerfile ? - 기본적으로 쉘스크립트 - 이미지가 구동될 때 할 행동을 미리 정의할 수 있음 - 가령, 내가 test 이미지를 run 하면 자동으로 jdk 랑 톰캣을 깔아서 웹서버를 띄워줘
  • 13. Dockerfile 활용하기 [ Dockerfile 키워드 ] - FROM : 모든 도커파일을 FROM 으로 시작함. FROM 뒤에는 배경이 될 이미지가 명시. ex> FROM centos - ARG : docker build 명령시 --build-arg <ARG명>=<사용할 값> 으로 받을 수 있는 파라미터 - ENV : 생성된 docker image 내에서 사용할 환경 변수, 가령 JAVA_HOME 이라던가 CATALINA_HOME 이라던가… - RUN : 이미지 내에서 실행될 명령 - EXPOSE : 도커 컨테이너에서 호스트로 개방될 포트를 명시 - VOLUME : 도커 컨테이너에서 호스트와 공유할 볼륨을 명시 - CMD : docker run 에 매핑되는 명령어 ● Dockerfile 예시는 참고자료 항목 참조
  • 14. Dockerfile 활용하기 [ Dockerfile 디버깅 ] CASE A. 갑돌이는 아래와 같이 Dockerfile 을 작성하였다. docker build 로 성공적으로 이미지를 생성하고 docker run 을 하였다. 당연히 상태가 Up 일 줄 알았지만 Exited 로 표기 되며 정상 구동이 되지 않는다. StackOverflow 에 물어보기
  • 15. docker 사용해보니 ... 장점 - 망쳐도 컨테이너 안에서 망침. 마음이 가볍다 - 한번 Dockerfile 만들면 배포하기 쉬움 - 레이어로 관리되서 업데이트가 빠르고 가벼움 - 신기하고 재미지다(?) 단점 - 설정하는 사람은 시스템을 다 알아야 함 (뭐는 루비고, 뭐는 파이썬이고) - 한글 레퍼런스가 부족함 - <defunc> 문제는 노답
  • 16. 부록. Docker hub 사용하기 How to use 1. 도커허브 로그인 2. Create Repository + 3. 로컬에서 docker tag 4. 로컬에서 docker push Question. 다른 repository 보 니까 Dockerfile 도 tab 으로 제공되던데… 1. 유료플랜에서 제공 2. 대부분 무료플랜은 github에 dockerfile 을 연동하는 방식으로 극 복● 무료 플랜 Dockerfile github 연동은 여기처럼 하 면 됨
  • 17. 참고 자료 - docker 공식 가이드 : 영어만 되면 제일 확실함 - pyrasis - 도커 무작정 따라하기 : 강추! 완전 이 PPT 를 보고나면 책을 살 필요성을 못느끼게 됨 - 교육에 사용되는 DockerHub - 교육에 사용된 GitHub

Editor's Notes