1. Docker 란?

Docs에서 말하는 Docker는 클라우드 또는 온-프레미스로 실행될 수 있는 이식 가능하고 문제를 스스로 해결할 수 있는 컨테이너로서 애플리케이션 배포를 자동화하기 위한 오픈 소스 프로젝트입니다. 라고 설명하고 있습니다.
쉽게 말하면 도커는 애플리케이션을 컨테이너 기반 배포 및 공유하는 오픈 소스 가상화 플랫폼입니다. 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다. 도커는 2013년 파이콘에서 처음 소개되어 현재까지 많은 기업에서 사용되고 있습니다. 왜 도커를 사용하는지에 대해 알아보기 위해 도커의 여러 개념에 대해 알아봅시다.
🐳 컨테이너(container) 란?
컨테이너는 애플리케이션 또는 서비스와 그에 해당하는 구성이 컨테이너 이미지로 패키지되는 소프트웨어 개발 방법입니다.

위의 그림처럼 각 컨테이너는 애플리케이션 또는 서비스를 실행할 수 있습니다. VM은 os를 포함하고 있어 os가 두개가 되지만 컨테이너는 실행하려는 os에 Docker Engine이 올라가 컨테이너를 구축, 시작 또는 중단하는 데 사용할 수 있는 간단한 명령 세트를 제공합니다.
하드웨어를 가상화하고 운영체제를 가상화 하는 곳 자체가 없기 때문에 메모리 접근 속도, 파일시스템 사용 속도, 네트워크 속도 등에서 VM에 비해 월등히 빠른 속도를 가집니다.

🐳 도커 이미지(image) 란?
Docker 이미지는 컨테이너를 정의하는 읽기 전용 템플릿입니다. 이 이미지에는 코드에 필요한 라이브러리 및 종속성에 대한 정의를 비롯해 실행되는 코드가 포함되어 있습니다.
Docker 컨테이너는 인스턴스화(실행한 상태)가 된 Docker 이미지가 됩니다.
도커이미지는 hub.docker.com/에서 배포 및 다운을 받을 수 있습니다
Docker Hub
We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy
hub.docker.com
🐳 도커 설치
이제 도커를 설치해보겠습니다.
www.docker.com/products/docker-desktop
Docker Desktop for Mac and Windows | Docker
Learn why Docker Desktop is the preferred choice for millions of developers building containerized applications. Download for Mac or Windows.
www.docker.com
mac os 와 windows 는 위의 도커홈페이지에서 설치 가능합니다.
리눅스에서 설치는 밑의 명령어로 설치 가능합니다.
curl -fsSL https://get.docker.com/ | sudo sh
🐳 Dockerfile
도커파일로 이미지 만들기 (Dockerizing)
도커파일 명령어에는 아래와 같은 것들이 있습니다.
NAME | Description | ex) |
FROM | 사용할 이미지를 지정하는 명령어. :뒤에 특정 버전을 지정하여 사용할 수 있다. |
FROM ubuntu:18.04 FROM node |
RUN | 내려받은 이미지에 설치할 패키지 또는 shell 명령어를 입력할 수 있다. | RUN npm install -g typescript:[version] |
EXPOSE | 실행한 container외부에 노출할 포트를 지정하는 명령어 | EXPOSE 8080 |
ENV | 환경변수를 지정하는 것으로 파일내부에서 변수처럼 활용이 가능 | ENV test 123 |
WORKDIR | cd의 명령어와 비슷합니다. RUN과 CMD과 같은 명령어가 실행될 이미지 내부에 위치를 지정해주는 명령어 | WORKDIR /app/ |
ADD | 빌드 중 호스트의 디렉토리에서 파일을 가져와서 이미지에 파일을 더하는 것. 빌드되는 디렉토리 밖에 위치하는 파일들은 가져오지 않는다. | ADD test.txt / |
ENTRYPOINT | 컨테이너를 실행했을때 실행할 명령. 도커파일에서 한번만 사용가능 | ENTRYPOINT ["npm", "run", "serve"] |
CMD | docker run 실행 시 사용할 default 명령을 설정 | CMD ["npm", "run", "serve"] |
VOLUME | 호스트의 디렉토리를 docker 컨테이너에 연결하는 명령어 | VOLUME ["/data", "/var/log"] |
USER | 해당 docker 이미지를 실행할 user를 지정하는 명령어 | USER user USER [uid]:[gid] |
LABEL | 이미지에 라벨을 다는 명령어 | LABEL "abcd@gmail.com" |
ARG | 도커파일 빌드시에 설정하는 옵션들을 지정할 수 있는 명령어 | ARG arg1 ARG arg2=value |
🐳 도커 주요 명령어
Docker build 명령어
docker build [OPTIONS] PATH | URL | -
options | description |
-t, --tag | -t [저장소 이름] / [이미지 이름] : [태그] 설정 |
Docker 실행 명령어
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
options | description |
-d | detached mode, 보통 데몬 모드라고 부르며 컨테이너가 백그라운드로 실행 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
--name | 컨테이너 이름 설정 |
-e, --env | 컨테이너 내에서 사용할 환경변수 설정 |
-v | 호스트와 컨테이너의 디렉토리를 연결(마운트) |
--it | -i -t를 동시에 사용한것으로 표준 입력(stdin)을 활성화, 터미널 입력을 위한 옵션 |
--rm | 프로세스 종료시 컨테이너 자동 제거 |
--link | 컨테이너 연결 [컨테이너 명 : 별칭] |
이미지 목록 보기
$ docker images
이미지 검색
$ docker search [이미지 이름]
이미지 받기
$ docker pull [이미지 이름]:[버전]
- 버전을 latest 로 쓰면 최신 버전으로 받을수 있습니다.
이미지 삭제
$ docker rmi [이미지 id]
- -f 옵션을 붙히면 컨테이너도 강제 삭제가 가능합니다.
컨테이너 목록 보기
$ docker ps
- -a 옵션을 사용하면 모든 컨테이너를 출력합니다.