수평 확장을 쉽게 하고, 각 서버에 새로운 내용을 배포하기 쉽게 만들어 준다.
⇒ 실행 환경의 일치
컨테이너는 애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자이다.
이미지는 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿으로, 이를 이용해 즉시 컨테이너를 만들 수 있다. 이미지를 이용해 여러 개의 컨테이너를 생성할 수 있어 애플리케이션의 수평 확장이 가능하다. 이미지는 기본 이미지(base image)로부터 (마치 git을 사용하는 것처럼) 변경 사항을 추가/커밋해서 또 다른 이미지를 만들 수도 있다.
레지스트리는 이미지가 저장되는 곳이다. 대표적인 이미지 레지스트리로는 Docker Hub, Amazon ECR이 있다. 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면, 기본 레지스트리로부터 다운로드 받게 된다.(Pull)
Docker docs : https://docs.docker.com/engine/reference/commandline/container_run/
latest
태그를 붙인 이미지를 가져옴)docker image pull docker/whalesay:latest
# 레지스트리에서 이미지 혹은 레포지토리를 가져옴(pull)
docker container run --name 컨테이너_이름 [IMAGE] [COMMAND] [ARG...]
# 컨테이너_이름을 이름으로 갖는 컨테이너를 실행
# 이미지 -> 컨테이너
# -it : -i, -t를 동시에 사용한 옵션. 사용자와 컨테이너 간에 인터렉션이 필요할 때 사용.
docker container ps -a
# 모든 컨테이너의 리스트를 출력
docker container rm 컨테이너_이름
# 컨테이너_이름이라는 컨테이너 삭제
docker image ls
# 이미지 리스트를 출력, 용량 확인
docker image rm 이미지_이름
# 이미지_이름이라는 이미지 삭제 (docker rmi도 같은 기능 수행)
로컬에 있는 파일과 도커 이미지를 연결하는 방법
docker container run --name 컨테이너_이름 -p 818:80 httpd
# httpd를 실행
# httpd(http daemon)은 Apache HTTP Server를 실행할 수 있는 오픈소스 웹 서버 소프트웨어
# -p : 로컬호스트의 포트와 컨테이너의 포트연결. 818포트가 로컬호스트의 포트이고, 80번은 컨테이너의 포트
# -d : 컨테이너를 백그라운드에서 실행.
docker container cp ./ 컨테이너_이름:/usr/local/apache2/htdocs/
# 로컬호스트에 있는 파일을 컨테이너에 복사하여 전달.
# httpd 는 /usr/local/apache2/htdocs/ 경로에 웹 서버와 관련된 파일들이 저장되어 있다면, 해당 파일을 기반으로 웹 서버가 실행됨.
docker exec -it 컨테이너_이름 bash
# 컨테이너 내부 터미널로 접속.
컨테이너를 이미지 파일로 변환
# docker container commit 명령어 이용
docker container commit 컨테이너_이름 이미지_이름
# docker images로 확인 가능
FROM httpd:2.4
# 베이스 이미지를 httpd:2.4 로 사용.
COPY ./ /usr/local/apache2/htdocs/
# 호스트의 현재 경로에 있는 파일을 생성할 이미지 /usr/local/apache2/htdocs/ 에 복사.
# --tag 는 name:tag 형식으로 이미지를 생성할 수 있다.
# 지정한 경로에 있는 Dockerfile을 찾아서 빌드.
docker build --tag 이미지_이름 .
# "."을 명령어에 꼭 포함해야 됨!
https://docs.docker.com/compose/reference/ - 두 개 이상의 Docker Image를 다루는 방법
docker-compose up
# docker-compose.yaml에 정의된 이미지를 컨테이너로 실행. -d 붙이면 컨테이너 백그라운드 실행.
docker-compose down
# docker-compose.yaml에 정의된 이미지를 이용해 실행된 컨테이너를 종료.
docker-compose up {특정 이미지}
# 특정 이미지만 컨테이너 실행
# 뭔가 바꾼 것을 적용하고 싶을 때
# docker compose build 후 docker compose up 을 실행
docker-compose.yaml
docker run
명령과 다르게 docker-compose
파일 안에서 기본 network가 사용.Node.js 웹 앱의 컨테이너화 - node.js 앱을 컨테이너화(도커라이징)하는 방법