codestates / codestates/ds-blog

[윤현태] What is docker?

Open
#235 1 comment 1 reaction 0 assignees View on GitHub
Dominant language
No language data
Stars
2
Forks
4
PR merge metrics
No merged PRs in 30d

Description

# 시작하기 전에

컴퓨터를 작동 시키는 것은 무엇일까? 컴퓨터는 사실 매우 멍청해서, 딱 두마디 밖에 할 줄 모른다. 0, 그리고 1. 그러니까 컴퓨터가 1+1을 100101010001000110 같은 걸로 표현해봤자, 인간인 우리가 이걸 이해할 수는 없다. 그래서 등장한 것이 프로그래밍 언어이다. 프로그래밍 언어를 통해서, 우리는 우리가 하고 싶은 말을 순식간에 기계어로 번역해서 기계와 소통할 수 있게 된다. 자, 우리는 컴퓨터와 얘기할 수 있는, 프로그래밍 언어를 손에 넣었다. 그렇다면 OS는 어떤 역할을 하고 있을까?
OS는 인간의 신체로 치면 **자율 신경계**(동물 내부의 환경을 일정하게 유지하는 역할을 하는 말초 신경계)가 되겠다. 우리가 신경써주지 않아도 어떤 프로그램들을 우선적으로 처리해줄지, 어떤 입출력 장치들을 사용할 것인지, 어떻게 파일을 저장할지 등을 정해준다. 이걸 간단하게 표현하면 이런식이 될 것이다.


바로 저 OS가 있기 때문에, 우리는 아무 의심없이 마우스로 클릭하고, 키보드를 두드리며, 데이터를 다운로드하고, 게임,쇼핑,영화감상,그래픽작업등을 할 수 있는 것이다. 하지만 여기서 문제가 생긴다.

**운영체제가 모두 다르다!**

인종을 생각하면 조금 더 이해가 쉬울지도 모르겠다. 크게는 백인종,흑인종,황인종등으로 차이가 나지만, 더 세세하게 나아가면 각 지역, 그 사람이 먹는 음식, 그 사람이 사는 환경으로 각 나라별, 지역별등으로 점점 세분화 된다. 그렇다면 프로그램을 우유라고 놓고 본다면, 대부분의 서양인들은 우유를 소화할 수 있는 요소가 몸에 기본적으로 있기 때문에 동양인보다 우유를 더 많이 소비하고, 더 잘 소화시킨다. 이런 것 처럼, 어떤 프로그램은 특정 OS,특정 시스템 환경에서 잘 돌아가는데, 다른 OS, 다른 시스템 환경에서는 작동을 하지 않는다.

필자는 과거, 리시프(~~리눅스시스템프로그래밍~~)를 하기 위해 Linux OS가 필요했지만, windows의 노예가 되어버린 나머지 windows를 포기할 수 없었다. 그래서 선택하게 된 것이 VMware 같은 가상 머신이었다. 구조를 나타내면 이렇게 된다.

![image](https://user-images.githubusercontent.com/70379885/99037115-73b62000-25c6-11eb-9f01-bd6d719272d5.png)

하지만 문제는, **너무 무겁다!** 일단 OS를 설치하는 iso도 가볍게 몇GB를 넘어가고, 설치하는데 따로 메모리같은 것들을 할당해줘야 한다. 하지만 이런 문제들을 한방에 해결해준 고마운 도구가 개발 되었으니... 바로 Docker 되시겠다.

# Docker
![image](https://user-images.githubusercontent.com/70379885/99038067-479b9e80-25c8-11eb-9de7-d2d7f974bf0c.png)

도커의 컨테이너는 위와 같은 문제를 해결하기 위해 나왔다. 개발사 홈페이지에서는 도커를 workflow를 단순화시켜, 개발자에게 각 프로젝트의 도구, 애플리케이션 stack 및 배포 환경을 선택할 수 있는 자유를 주는 혁신적인 도구라고 소개한다. All in one 이지만 프로그램을 구동시키기 위해 꼭 필요한 것만 담은, 다이어트 버전이라고 할 수 있다. 무엇보다 간편하다는 것은 동의할 수 있다.

![image](https://user-images.githubusercontent.com/70379885/99038645-2f784f00-25c9-11eb-8227-9ef00b3c23bc.png)

위의 이미지 처럼, VMware 같은 vartual machine은 우리가 설정해야할 것, 해야할 것들이 너무 많은 반면에, docker은 Dockerfile을 Docker image로 변환시키기만 하면 된다.

![image](https://user-images.githubusercontent.com/70379885/99037799-c9d79300-25c7-11eb-9fad-4c0b785d28dc.png)

그리고 구조를 살펴봐도, VM과는 확실히 다르다. VM 은 머신과 Guest OS가 모두 필요한 반면, Docker은 Docker Engine만 있으면 아무것도 필요가 없다. 그야말로 압도적인 효율성이다. 여기서 이미지는 운영체제가 이미 설치된 컴퓨터에 설치할 준비가 된 보조 읽기 전용 하드디스크, 그리고 컨테이너는 이미지로 된 하드 디스크가 설치된 컴퓨터라고 생각하면 된다.

먼저, docker의 버전을 확인해보자.

```py
Client: Docker Engine - Community
Cloud integration: 1.0.2
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:36 2020
OS/Arch: linux/amd64
Experimental: false

Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:07:04 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
```

Docker는 기본적으로 server-client로 작동한다. 즉, client는 요청만 하고 build, run push는 모두 다 서버가 수행을 한다. 서버는 시스템을 제공하고, 클라이언트는 시스템,서비스를 사용한다. 그러니까 우리는 단지 요청만 하고, Docker server가 우리가 원하는 서비스를 제공해주는 것은 마치 OS와 흡사하다고 보면 되겠다. 요청을 하면, 안에 어떤 작용이 일어나는지 모르겠지만, 어쨌든 내가 원하는 결과를 준다. 우리가 메모리 관리라던가 주변기기와의 통신을 신경쓰지 않아도 되는 것이다.

# 마치며

docker을 공부하면서 시대가 굉장히 빠르게 변하고 있다는 것을 느꼈다. 예전에 VMware깔면서 좋지도 않은 사양의 노트북에서 ubuntu를 낑낑거리며 돌릴 때가 엊그제 같은데... 이런 강력하고 간편한, 그리고 마이크로소프트가 지원하는 프로그램을 열심히 배워서 앞으로 잘 써먹어야겠다!

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.