Docker는 컨테이너 기반의 오픈 소스 가상화 플랫폼으로, 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있게 해준다. 컨테이너는 가상 머신과 유사하지만, 더 가벼우며 시스템 자원을 효율적으로 사용한다. Docker의 핵심 목표는 “어디서나 동일하게 실행되는 소프트웨어”를 제공하는 것이며, 이를 통해 개발, 테스트, 프로덕션 환경 간의 격차를 줄이고 DevOps 및 CI/CD(지속적 통합 및 지속적 배포) 워크플로우를 용이하게 한다.
Docker 이미지는 애플리케이션과 그 의존성, 라이브러리, 도구 등이 포함된 읽기 전용 템플릿이다. 이미지는 컨테이너 실행의 기반이 되며, Dockerfile이라는 스크립트를 통해 생성된다. Dockerfile은 이미지를 어떻게 구축할지에 대한 지침을 담고 있다.
컨테이너는 Docker 이미지를 기반으로 실행되는 가벼운, 실행 가능한 패키지다. 각 컨테이너는 서로 격리되어 있으며, 자체 파일시스템을 가지고 독립적으로 실행된다. 이는 컨테이너가 호스트 OS를 공유하면서도 서로 영향을 주지 않는다는 것을 의미한다.
Docker Hub는 Docker 이미지를 저장하고 공유할 수 있는 클라우드 기반 저장소 서비스다. 개발자는 자신의 이미지를 Docker Hub에 업로드하고 다른 사용자와 공유할 수 있으며, 또한 다른 사람이 만든 이미지를 다운로드하여 사용할 수 있다.
docker build 명령을 사용하여 Dockerfile로부터 이미지를 생성합니다.docker run 명령을 사용하여 이미지로부터 컨테이너를 생성하고 실행합니다.효율성과 속도: 컨테이너는 빠르게 시작되며, 가상 머신보다 적은 자원을 사용한다.
이식성: 어떤 환경에서도 동일한 동작을 보장한다. 로컬에서 작동하는 것은 프로덕션에서도 작동한다.
버전 관리와 재현성: 이미지는 버전 관리가 가능하며, 같은 이미지를 사용함으로써 어디서든 동일한 환경을 재현할 수 있다.
개발과 운영의 일관성: 모든 환경에서 동일한 도커 이미지를 사용함으로써, 개발에서 발생할 수 있는 "작동하지 않습니다" 문제를 줄일 수 있다.
마이크로서비스 아키텍처 지원: 각 컨테이너는 하나의 서비스를 실행할 수 있어, 마이크로서비스 아키텍처를 쉽게 구현할 수 있다.
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull ubuntu:18.04docker build [OPTIONS] PATH | URL | -
docker build -t myapp . (현재 디렉토리의 Dockerfile 사용)docker images
docker rmi [OPTIONS] IMAGE [IMAGE...]
docker rmi myappdocker run [OPTIONS] IMAGE [COMMAND][ARG...]
docker run -d -p 8080:80 --name webserver nginx (백그라운드 실행, 포트 매핑)docker ps [OPTIONS]
-a 옵션을 사용하면 중지된 컨테이너도 보여준다.docker ps -adocker stop [OPTIONS] CONTAINER [CONTAINER...]
docker stop webserverdocker start [OPTIONS] CONTAINER [CONTAINER...]
docker start webserverdocker restart [OPTIONS] CONTAINER [CONTAINER...]
docker restart webserverdocker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm webserverdocker network create [OPTIONS] NETWORK
docker network create my-netdocker network ls
docker network rm NETWORK [NETWORK...]
docker network rm my-netdocker volume create [OPTIONS][VOLUME]
docker volume create my-volumedocker volume ls
docker volume rm VOLUME [VOLUME...]
docker volume rm my-volumedocker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it webserver bash (컨테이너 내부에서 bash 쉘 실행)docker logs [OPTIONS] CONTAINER
docker logs webserverdocker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker inspect webserver