애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
위의 내용이 AWS 사이트에서 확인할 수 있는 Docker 설명이다.
설명만 보아서는 이해가 잘 안 될 수도 있는데, 밀키트를 예로 들어보자.
┌──────────────────────────────────────────────┐
│ Docker Image │
│ (밀키트: 조리법과 재료가 다 준비됨) │
│ │
│ - 음식 만드는 방법 (설명서) │
│ - 필요한 재료와 도구 │
└──────────────────────────────────────────────┘
│
│ 밀키트를 가지고 조리
▼
┌─────────────────────────────────────────────┐
│ Docker Container │
│ (완성된 음식: 실제로 만들어진 실행 환경) │
│ │
│ - 조리법에 따라 완성된 음식 │
│ - 실행되는 상태 (서버, 앱 등) │
└─────────────────────────────────────────────┘
│
│ 향신료나 재료를 새롭게 추가하여
▼
┌─────────────────────────────────────────────┐
│ 새로운 Docker Image 제작 │
│ (나만의 밀키트: 재료를 더하고 새롭게 만듦) │
│ │
│ - 나만의 개선 사항 반영 │
│ - 도커 허브에 배포 가능 │
└─────────────────────────────────────────────┘
추가 비유 설명
┌─────────────────────────────────────────────┐
│ 냄비, 후라이팬 = 환경변수 설정 │
│ (이미지가 실행되기 위해 필요한 기본 조건) │
└─────────────────────────────────────────────┘
Docker Image는 밀키트, Docker Container는 이 밀키트를 이용해서 만든 음식이라고 생각하면 된다. 우리는 밀키트의 재료를 어디서 얻어서 어떻게 다듬고 잘랐는지는 굳이 알 필요 없다. 그저 설명서에 적힌 대로 냄비 혹은 후라이팬 등 적절한 조리 도구에 넣어 조리하면 끝이다.
여기서 냄비 혹은 후라이팬은 해당 이미지를 사용하기 위해 기본적으로 요구하는 환경변수정도로 보면 되겠다. 환경변수라고 칭하는 이유는 아래의 MariaDB 실습을 참고
만약 다른사람이 만든 레시피에서 나만의 향신료나 재료를 더 첨가하여 새로운 밀키트로 만들어 도커 허브에서 사람들에게 배포한다면, 이게 바로 내가 만든 이미지가 되는 것이다. 도커 허브에 관한 설명은 여기(클릭) 에서 설명

그렇다면 가상머신또한 독릭접인 실행환경을 구성할 수 있도록 도와주는데, 가상머신과 Docker Container의 차이점은 뭘까?
| Container | Virtual Machine |
|---|---|
| 하나의 Host OS위에서 마치 각각의 독립적인 프로그램처럼 관리되고 실행된다. | HyperVisor가 컴퓨터가 가지고 있는 인프라 리소스를 VM별로 배분한다. 또한 각 VM에서는 독립적인 Guest OS를 가지고 있다. |
| 불필요한 OS만드는작업 및 Infra를 독립적으로 나눌 필요가 없어 확장성이 좋고 가상머신보다 빠르다. | 독립적인 플랫폼을 하나씩 증가시킬 때마다 불필요한 OS를 만드는 작업에 대해서 계속해서 해야 하므로 확장성이 떨어진다. 또한 메모리나 자원에 관해서 유동적으로 관리 되는게 아니라 처음부터 정해놓고 실행하기에 비효율적이다. |
| 컨테이너는 리눅스만 실행 가능하다. | 대부분의 OS를 실행 가능하다. |

Google 에 Docker Desktop을 검색하면 위와 같이 Docker 사이트가 나온다.

자신의 운영체제에 맞는 버전을 선택한 후 다운받는다.

설치가 완료된 Docker Desktop의 모습
Docker Hub에 접속하여 Officail Images를 받아보자

Google에 Docker Hub를 접속하면 위와 같은 사이트를 찾을 수 있다.

위와 같이 검색창을 통해 필요한 Docker Image를 검색해서 찾을 수 있다. (Docker Desktop에서도 상단의 검색창을 이용해 마찬가지로 검색을 할 수 있다.)


필요한 이미지를 찾았으면 Pull을 눌러 Images에 추가한다.
여기서 잠깐, MariaDB의 사용방법을 확인해보면

다음과 같이 MARIADB_ROOT_PASSWORD를 지정해야한다고 나온다.
이를 설정하지 않으면 DB가 컨테이너에서 제대로 작동하지 않고 그냥 꺼진다.

환경변수를 설정하는 방법은 위처럼 Images 목록에서 실행할 컨테이너의 재생버튼을 누른 다음, 바로 Run하지 않고 Optional settings를 누르면 설정값을 세팅하는 창을 열 수 있다.

환경변수 외에도 포트 번호나 컨테이너의 데이터를 저장할 Volumes 등도 설정할 수 있다.
볼륨을 아직 모른다면?(클릭)

정상적으로 작동되는 MariaDB Container의 모습
MariadbTest라는 컨테이너가 9999번 포트에서 동작하는 걸 확인할 수 있다.
9999:3306은 무슨 뜻일까?
MariaDB는 기본적으로 3306 포트를 사용한다. 그러므로 위의 컨테이너의 경우 내 PC에서는 9999번 포트를 이용하지만 컨테이너 내부적으로는 MariaDB가 3306 포트와 연결되어있음을 의미한다. (포트포워딩)

환경변수 설정에서 함께 세팅했던 web이라는 database도 자동적으로 생성된 걸 볼 수 있다.

nignx와 mariaDB를 동시에 실행시킨 모습
