PostIT

[Docker] Docker 설치 및 기본 실행하기 - 1 본문

DevOps/Docker

[Docker] Docker 설치 및 기본 실행하기 - 1

shun10114 2017. 6. 27. 11:03

[Do4cker] Docker 설치 및 기본 실행하기 - 1

- OS : OSX Sierra (10.12.3)

- Docker : Docker version 17.06.0-ce, build 02c1d87

## 1. Docker에 대해서

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. 
Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.

가상 서버의 환경이 증가하면서, 서버의 설정을 계속 잡아줘야 하는 문제가 발생하였습니다. 같은 서버인데도 다른 설정이 큰 문제로 제기되면서, 기존 환경을 그대로 유지하며 쉽게 적용시키기 위해 Docker가 등장하게 되었습니다. 
이는 쉽게 서버(OS) 위에 Application에 적용시킬 File들을 배(고래)에 Container를 실어 어디서든 쉽게 관리/적용 할 수 있게 만든 기술입니다. 어느 환경에서나 Container로 보관되어있어 어디서든 같은 동작을 할 수 있는 것을 보장합니다.
'Docker guarantees that apps will work the same everywhere.'

VM .vs. Docker

  1. VM : Linux 위에 가상화 환경을 처리한 Hypervisor가 뜨고, 그 위에 다시 Linux OS가 올라갑니다.

  2. Docker : Linux 위에 Docker Engine이 있고 그 위에 OS 없이 바로 파일이 올라갑니다. ( 속도 빠름 )

http://static1.squarespace.com/static/4ff3e918e4b03ec22b113d00/t/53cb75cae4b0cb413c8933d4/1405842891457/

  • VM에서의 가상머신은 항상 Guest OS가 올라가야 합니다. 하지만 Docker는 해당 OS에 '격리'를 통해 새로운 가상환경이 아닌 해당 OS의 격리를 통해 Guest OS를 설치하지 않아도 되는 이점을 챙겨갈 수 있습니다.

  • 컨테이너를 통해 가상공간을 만들어 실행파일을 호스트에서 직접 실행합니다.


Docker Image

  1. Docker Image는 서비스 운영에 필요한 서버 프로그램, 소스 코드, 컴파일 된 실행 파일을 묶은 형태입니다. (Linux(Host OS)위에 뜰 Linux File들의 집합입니다.)

  2. 해당 Docker 이미지는 수정이 불가능 한 Read Only 상태이다.

  3. Docker 이미지를 이용하면, 똑같은 환경의 여러 Linux를 띄울 수 있다.


  • Github처럼 DockerHub를 사용해 해당 Image를 클라우드 중앙 저장소에 저장/관리 할 수 있습니다.

  • Docker Image는 Image를 처리할 때, 바뀐 부분만 Image로 재생성하며, Container로 실행할 때, 기존 것과 바뀐 것을 합처서 실행


Docker Container


 - Docker Image를 실행시킨 상태입니다.(Host OS:Docker Engine) - (Image는 실행파일, Container는 프로세스 쉽게)

 - 실제 동작중인 Docker 컨테이너에 접속하여 파일을 추가하거나, 삭제, 서버 실행 등을 할 수 있습니다.

 - Docker 컨테이너에서, Apache 서버를 띄우게 되면, 그 프로세스는 실제로는 Host OS의 자원을 사용하게 됩니다.

 - Docker 컨테이너가 종료되면, Docker 컨테이너에서 실행되던 모든 프로세스가 죽습니다.

 - Docker 컨테이너가 종료된다고 해도, 편집된 파일들은 컨테이너에 그대로 유지 된됩니다.

 - 종료된 Docker 컨테이너를 살릴 수도 있습니다. 살린 후 접속해 보면, 편집된 파일들이 유지 됨을 알 수 있습니다.

 - 다만, 이전에 실행 되었던 모든 프로세스가 죽었으므로 다시 살려줘야 합니다.

- 컨테이너가 다시 살아 날 때 기본적으로 수행해야 하는 명령어를 설정해 줄 수 있습니다.

- 이를 이용해 컨테이너가 뜨자마자 서버를 실행하는 등의 작업을 할 수 있습니다.

## 2. 설치 순서

* mac에서 Package 툴인 brew로 설치하였을 때, Docker-cli가 작동되지 않았습니다. 여러가지 찾아본 결과 env설정을 잡아줘야하는 것 같은데 생각보다 정형화 되어있지 않아, 공식 홈페이지에 Install file을 통해 설치하는 것이 더 편할것으로 판단됩니다.

1. Docker Install


https://docs.docker.com/docker-for-mac/install/ : Official Docker Home

https://docs.docker.com/toolbox/overview/ : Toolbox



2. Docker Run(Check version)


다음 명령어를 실행 했을 때, 아래와 같이 버전이 나온다면 설치가 정확히 완료된 것입니다.

$ docker --version
Docker version 17.03.0-ce, build 60ccb22

$ docker-compose --version
docker-compose version 1.11.2, build dfed245

$ docker-machine --version 
docker-machine version 0.10.0, build 76ed2a6


3. Docker hello-world Image Test Run


$ docker run hello-world


To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces

the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

1. Docker 클라이언트가 Docker 데몬에 접속합니다.

2. Docker 데몬은 Docker Hub에서 "hello-world"이미지를 가져옵니다.

3. Docker 데몬은 해당 현재 읽고있는 결과물(output) 생성하는 실행할 수 있는 파일에 이미지로부터 새 컨테이너를 작성합니다.

4. Docker 데몬이 해당 결과물(output)을 Docker 클라이언트로 스트리밍하여 Docker 클라이언트로 보냅니다.


4. Docker Test Run


다음 명령어를 통해 nginx를 가져오고 실행해보겠습니다.

docker ps -a 로 현재 Container들을 확인할 수 있습니다.

localhost를 클릭하여 확인해보세요.

$ docker run hello-world run -d -p 80:80 --name webserver nginx

$ docker ps -a

http://localhost/

## 3. Github To Study

제 깃허브 주소입니다.

참고자료 보면서 정리하고 있어요.

https://github.com/Seolhun/docker-test 

## 4. 참조 

https://docs.docker.com/

https://aws.amazon.com/ko/docker/


Comments