이 포스트는 2018년 1월 17일 수요일에 진행됐던 세미나 강의 영상을 시청하고 작성했습니다.
세미나 강의는 이 곳을 눌러 시청하실 수 있습니다.
노트 필기식으로 작성한 내용이기에, 존댓말을 사용하지 않은 점 참고하시기 바랍니다.
* 발표자 : 김대권 (Docker Meetup Seoul 운영자) 님
Docker의 등장
Hello World 찍어보기
로컬/호스트 시스템에서 Hello World 출력
1
2echo "Hello World"
Hello WorldDocker를 통해 Hello World 출력
1
2
3
4docker run -it ubuntu:latest echo "Hello World"
# root@d2af7da4b97d:/
# Hello World
# root@d2af7da4b97d:/
겉으로는 똑같아보이지만 실환경은 서로 다르다.
컨테이너
컨테이너는 가상 환경인가요?
각각의 VM = 서로 다른 환경, 각각의 컨테이너 = 서로 다른 환경
컨테이너는 VM인가요?
Virtual Machine 은 하드웨어 가상화
- 소프트웨어로 구현된 하드웨어
컨테이너는 하드웨어 가상화가 아님.
- OS에서 지원하는 기능을 사용
- 격리된 환경에서 프로세스를 실행
즉, 컨테이너는 하드웨어 가상화 없는 격리된 환경에서 실행되는 프로세스이다.
Docker와 chroot 명령어는 매우 유사하다. chroot는 Root Directory를 바꿔주는 명령어다.
컨테이너 사용예시
MySQL
Docker로 MySQL 설치
1
docker run -d -p 3306:3306 --name mysql mysql:5.7
설치 확인
1
2telnet 0.0.0.0:3306
미설치시 Mac환경은, brew install telnet
WordPress
- (MySQL Container가 실행된 이후)
1
docker run --name wordpress --link mysql:mysql -p 8080:80 -d wordpress
이미지
1. 특정 프로세스를 실행하기 위한 환경
- 계층화된 파일 시스템
- 이미지는 파일들의 집합
- 프로세스가 실행되는 환경도, 결국 파일들의 집합이다.
2. 작동되는 상태
Docker 아키텍쳐
리눅스 머신에서의 Docker
- 컨테이너를 네이티브하게 지원
- 컨테이너 = 호스트의 프로세스
- 배포판에 따라 차이는 있지만, 대부분은 지원된다.
- 실제 Docker Container 배포에는 리눅스 머신을 사용
Docker for macOS
- xhyve 와 교신
- macOS의 가상화 방식 (경량 가상 머신)
- 컨테이너 = xhyve에서 실행된 프로세스
- 호스트 머신과 자연스럽게 결합
- 네트워크 / 볼륨 등
- 호스트 머신 처럼 사용 가능
Virtual Machine on macOS (macOS <-> Virtualbox)
- 일반적인 가상 머신
- 컨테이너 = 가상 머신의 프로세스
- 네트워크 / 볼륨 설정이 까다로움
- 클라이언트는 환경 변수를 참조해서 서버에 접속
Local Client & Remote Docker Server (macOS <-> Linux Server)
- 원격 리눅스 서버에 존재한 Docker와의 연결
컨테이너가 필요한 이유
여러가지의 상황과 환경의 기반의 컴퓨터와 하드웨어 환경에서 동일한 환경내로 변경 또는 관리를 수월해야하는 필요성에 대해 등장.
Dockerfile 이란
깨끗한 환경으로부터 애플리케이션 실행 환경까지 최단경로