Doker란?
- APP 실행환경을 코드로 작성할 수 있고 OS를 격리화하여 관리하는 기술
환경 표준화
- 엔지니어는 개발하는 APP이 어떤 환경에서 구동될 지 생각한 후 개발해야 한다.
수작업으로 일치시키는 환경 구성
- 컴퓨터에 다양한 설정 작업을 수작업으로 하게된다면 많은 시간이 걸릴뿐만 아니라 설정들이 뒤엉킬 수 있다.
리소스 격리성
Web server 1은 IP는 A로 하고 포트 번호는 A-1로 하고, 방화벽 규칙은 a의 규칙을 이용하세요.
Web server 2은 IP는 B로 하고 포트 번호는 B-1로 하고, 방화벽 규칙은 b의 규칙을 이용하세요.
- 이와 같은 요구가 생긴다면 리소스 격리성이 필요하다.
- 리소스 격리성을 제공하는 기술로 가상머신, Docker 등이 있다.
- 가상머신 : VB, VM과 같은 가상머신은 개발 혹은 사용하는 환경을 Image로 저장하고 Host OS 위에 게스트 OS를 띄우는 방식
- 가상화 방법과 Docker는 격리성을 제공하기 때문에 각 APP 마다 다른 컴퓨터에서 실행되는 것처럼 IP, Port 등을 다르게 설정할 수 있다.
- Docker는 가상머신만큼 견고한 격리성을 제공하지는 않는다.
- Docker는 Linux의 Container를 이용한 기술로 OS 위에 다른 OS를 실행하는 것이 아니기 때문에 가상머신보다 좋은 성능을 낼 수 있다.
Linux Container
What is?
- Linux 기반의 기술 중 하나로 필요한 라이브러리와 APP을 모아 마치 별도의 server처럼 구성한 것
- Container를 이루는 Network 설정, 환경 변수 등 시스템 자원은 각 Container가 독립적으로 소유
- Process 구획화
- 특정 Container에서 작동하는 process는 기본적으로 그 Container 안에서만 Access 할 수 있다.
- Container 안에서 실행되는 process는 다른 Container의 process에게 영향을 줄 수 없다.
- Network의 구획화
- 기본으로 Container 하나에 IP 주소가 할당되어 있다.
- 파일 시스템의 구획화
- 해당 Container에서의 명령이나 파일 등의 액세스를 제한할 수 있다.
Docker만의 특징
- APP에 대한 환경을 격리성을 중심으로한 VM의 관점 보다는 Container의 관점에서 빠르고, 개발자와 사용자 커뮤니티를 중심으로 혜택을 제공
- Docker HUB
Docker CLI
- Docker docs
- 사용법 : Docker CLI, Docker-Compose CLI, API Reperence
- 환경 및 빌드 파일 구성 : DockerFile, Docker-Compose File
Use to Docker
docker/whalesay
- Image가 제공되었을 때 읽는 법
- Registry 계정, repo 이름, tag 세 가지 정보로 구성
- Registry
- Docker image가 관리되는 공간
- Docker Hub을 기본 registry로 설정
- Docker Hub, Private Docker Hub, 회사 내부용 Registry 등으로 나뉨
- Repository
- Registry 내 Docker image가 저장되는 공간
- Image 이름이 사용되기도 한다.
- Github의 repo와 유사
- Tag
- 같은 image라고 할 지라도 version 별로 내용이 조금 다를 수 있다.
- 해당 image를 설명하는 version 정보를 주로 입력
- 다른 것을 지정하지 않은다면
latest
tag를 붙힌 image를 가져온다.
- docker/whalesay : Docker Hub라는 registry에서 docker라는 분이 올리신 whalesay image 혹은 repository에서 latest tag를 가진 image
Docker Example 수행하기 : docker/whalesay
1 |
|
image pull
: registry에서 image 혹은 reopsitory를 가져온다.image ls
: image list- 받아온 image 실행(image -> container)
1 |
|
container run
: container를 실행- OPTION
--name
: container의 이름을 할당
- COMMAND
cowsay
: container에서 cowsay를 호출(python을 호출하듯 이용하는 것)
- ARG
boo
: COMMAND 인 cowsay 에 넘겨질 파라미터
1 |
|
1 |
|
container ps
: container list-a
: Default로는 실행되는 container지만 종료 된 container를 포함하여 모든 container를 출력
container rm
: container를 지칭해서 삭제. container를 명시할 때는 ps 명령을 통해 확인할 수 있는 NAMES 혹은 CONTAINER ID 를 사용
1 |
|
- image를 받아오고, container로 실행하고, container와 관련된 리소스를 지우는 작업을 한번에 실행
1 |
|
container run
: container 실행. image가 없다면 image를 받아온 뒤(pull) 실행--rm
: container를 일회성으로 실행. container가 종료될 때 container와 관련된 리소스를 모두 제거
1 |
|
image rm
: 지정된 docker image 삭제
Docker Example 수행하기 : danielkraic/asciiquarium
1 |
|
-it
: -i, -t 를 통시에 사용한 것으로 터미널 입력을 위한 옵션. 사용자와 container 간에 interaction이 필요하다면 해당 옵션을 사용. 본 예제에서는 지속적으로 출력되는 화면을 사용자가 보기 위해서 사용. 예를들어 Python 명령이 필요하거나, 추가적으로 다른 입력을 받는다면 해당 옵션을 지정한 뒤 사용.
1 |
|
Docker CP & DockerFIle
Docker container에 파일 복사
- 게임 server, Web server와 같이 사용할 도구가 docker image에 모두 구성되어 있지 않은 경우도 있다.
- Web server는 docker container로 실행
- Web server를 구성하는 파일은 만들거나 가져온 구성
- 장점
- Server에 문제가 생기는 것을 Host와 별개로 파악
- 문제가 생긴 server를 끄고, 마치 공장초기화를 하듯 docker image로 server를 재구동하기 용의함
- Local에 있는 파일과 docker image를 연결하는 방법은 CP와 Docker Volume 기능을 이용하는 방법으로 나뉜다.
- CP : 호스트와 container 사이의 파일을 복사
- Volume : 호스트와 container 사이의 공간을 마운트
httpd Web server
1 |
|
-p
: Local(호스트)의 포트와 container의 포트와 연결127.0.0.1:818
혹은localhost:818
을 통해 Web server가 작동하고 있는지 확인
1 |
|
cp
: 앞에 인수의 경로를 뒤에 인수의 경로에 복사- 경로는 반드시 복사할 곳으로 이동할 것
Make Doker Image
- Image로 만들어 놓으면 이전에 작업했던 내용을 다시 한번 수행하지 않아도 된다는 점과 배포 및 관리가 유용하다.
1. 구동한 Docker container를 image로
1 |
|
- 생성된 image를 이용해서 900 포트에 웹server 구동
127.0.0.1:900
혹은localhost:900
을 통해 Web server가 작동하고 있는지 확인
2. 빌드를 위한 파일인 Dockerfile로
- Dockerfile documentation
- Dockerfile을 만들고, Dockerfile대로 image를 build
1 |
|