# Docker란 무엇인가

Edgegap에서는 컨테이너를 사용해 전 세계에 부하를 고르게 분산합니다. 게임을 밀리초 내에 시작해야 하기 때문에 컨테이너는 속도를 고려해 설계되어야 합니다. 여기서는 도커 이미지(컨테이너라고도 함)를 생성하는 과정을 안내합니다.

{% hint style="info" %}
컨테이너에 빠르게 익숙해지고 싶다면, 다음을 강력히 권장합니다 [이 짧은 동영상](https://www.youtube.com/watch?v=J0NuOlA2xDc\&ab_channel=Coderized).
{% endhint %}

<figure><img src="https://1562312210-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-e6111f686dccc8bebc29f2f10fe2ce093f9c2b9c%2Fdocker.png?alt=media" alt=""><figcaption></figcaption></figure>

### **서버용 컨테이너 생성**

* Docker는 OS 수준의 가상화를 가능하게 하는 PaaS(서비스형 플랫폼)입니다.

### **Docker Run 명령어란?**

* docker run 명령은 이미지를 기반으로 컨테이너를 생성하여 Docker 데스크톱 엔진이 컨테이너를 실행할 수 있게 합니다.

### **한번 시도해보세요**

먼저 첫 번째 컨테이너를 만들기 위해 컴퓨터에 필요한 도구를 추가하는 것부터 시작하겠습니다.

Docker 데스크톱에 명시된 설치 절차를 따라하실 수 있습니다.

실행 중인 경우 [Windows 10 Pro](https://docs.docker.com/docker-for-windows/install/) 실행 중인 경우 [Windows 10 Home Edition](https://docs.docker.com/docker-for-windows/install-windows-home/) 실행 중인 경우 [macOS](https://docs.docker.com/docker-for-mac/install/)

로컬 머신에서 Docker가 실행 중이면, 간단한 hello world부터 시작할 수 있습니다.

```sh
docker run -d -p 80:80 --name speedtest edgegap/speedtest-edge
```

명령 프롬프트로 가서 위 명령을 입력하면 됩니다.

단계가 자동으로 진행됩니다.

1. Edgegap 저장소에서 컨테이너 다운로드(처음 한 번만)
2. 컨테이너 시작
3. 이름은 speedtest(--name)가 됩니다
4. 컨테이너를 외부에 노출하려면 docker run 명령에서 지정해야 합니다. 이 예제에서는 외부의 포트 80을 컨테이너 내부의 노출된 80으로 포워딩(-p)합니다.
5. 웹 브라우저를 열고 다음을 입력해 시도해볼 수 있습니다 [http://localhost](http://localhost/)
6. 짜잔, 첫 번째 컨테이너를 실행했습니다.

컨테이너가 실행 중이면 상호작용할 수 있습니다. 다음 세션에서는 컨테이너를 재시작하고 중지하며 네트워크를 살펴보겠습니다. 우선 로컬에서 도커 엔진에서 어떤 것이 실행 중인지 보려면 명령줄에서 다음을 입력하세요.

```sh
docker ps
```

다음과 유사한 항목이 표시될 것입니다.

```
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES
dbf4d3734111        edgegap/speedtest-edge   "docker-php-entrypoi…"   29 minutes ago      Up 29 minutes       0.0.0.0:80->80/tcp   speedtest
```

컴퓨터에서 실행 중인 컨테이너 정보를 시각적으로 확인할 수 있습니다; 이 목록에 여러 컨테이너가 있을 수 있습니다.

`docker ps` 은(는) 간단한 명령입니다; 많이 사용하게 될 것입니다.

실행 중인 컨테이너에 대해 더 많은 정보를 알아야 한다고 가정해보겠습니다. 다음 명령을 실행하면 도커 엔진이 해당 컨테이너의 모든 세부 정보를 제공합니다:

```sh
docker container inspect speedtest
```

도커 엔진이 생성한 내부 네트워크를 보려면 다음 명령을 실행하면 됩니다.

```sh
docker network ls
```

다음과 유사한 결과를 얻을 것입니다:

```
NETWORK ID          NAME                DRIVER              SCOPE
67b24038b9ca        bridge              bridge              local
6f7fe43a489d        host                host                local
3d80cdb86a7e        none                null                local
```

네트워크 구성을 더 자세히 조사하려면 다음 명령을 실행할 수 있습니다:

```sh
docker network inspect 67b24038b9ca
# 여기서 678b24038b9ca는 컨테이너에 연결된 네트워크입니다
```

Docker 중지

이제 컨테이너를 시작했으므로 다음을 사용하여 중지할 수 있습니다:

```sh
docker container stop speedtest
```
