가상화(Virtualization)
- 하드웨어 기능을 소프트웨어로 분리하고 추상화하는 기술
- 하나의 물리적 시스템에서 여러 개의 가상 시스템 실행 가능
동작 원리

pull, build, run 등의 명령어 사용도커는 리눅스 컴퓨터에서 사용
- 종류와 상관 없이 리눅스 운영체제가 사용됨.
- 윈도우, macOS에서도 도커 구동은 가능하지만, 내부적으로 리눅스가 사용됨
WSL(Window Subsystem for Linux)
- 별도의 가상머신 또는 이중 부팅 없이 윈도우에서 리눅스를 사용할 수 있게 하는 Window 기능
도커 허브(Docker Hub)
명령어 정리
docker search [키워드] : 이미지 검색docker pull [이미지 이름]:[태그] : 이미지 내려받기docker images [이미지 이름] : 도커 허브에서 내려받은 이미지 목록 확인docker image inspect [이미지 ID] : 이미지 세부 정보 출력docker save -o [추출할 파일 이름] [이미지 이름]:[태그] : 이미지를 파일로 추출docker load -i [추출된 파일 이름] : 추출한 이미지 로드docker rmi [이미지 이름, 이미지 ID] : 이미지 삭제docker commit [옵션] [컨테이너 이름] [이미지 이름]:[태그] : 이미지 생성컨테이너의 핵심 기술 요소
가상화 공간 생성을 위해 리눅스 자체 기능인 chroot, namespace, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만듦 → 성능 손실 x
chroot: 파일 시스템 루트 변경 → 격리된 디렉토리 환경 제공namespace: 프로세스, 네트워크, 사용자 ID 등을 격리cgroup: 리소스(CPU, 메모리 등) 사용 제한 및 할당 관리명령어 정리
docker run [옵션] [이미지 이름] : 컨테이너 생성 및 실행docker ps [옵션] : 컨테이너 목록 조회(실행 중)docker ps [옵션] - a : 컨테이너 목록 조회(모든 컨테이너)docker stop [컨테이너 이름 / 컨테이너 ID] : 컨테이너 종료docker exec [컨테이너 이름 / 컨테이너 ID] [명령] : 테이너에서 특정 명령을 실행docker rm [옵션] [컨테이너 이름] : 컨테이너 삭제 / 실행 중인 컨테이너는 삭제할 수 없음(중지 후 삭제 or -f 추가docker logs [컨테이너 이름] : 컨테이너 로그 출력 / --tail(마지막 로그 줄부터 출력할 줄의 수를 설정) / -f (컨테이너에서 실시간으로 출력되는 로그를 확인 가능) / -t(날짜 시간)명령어
docker -v [호스트 디렉토리] : [컨테이너 디렉토리] : 컨테이너 생성 시 호스트와 볼륨 공유docker volume create --name 볼륨 이름 : 도커 볼륨 생성도커파일 작성
[명령어] [매개값] 의 형태로 작성Dockerfile 작성 후 빌드할 경우 Docker는 나열된 명령문을 차례로 수행해서 DockerImage를 생성함.FROM ubuntu:latest : ubuntu 이미지에서 새 계층 생성RUN apt-get update : Ubuntu 패키지 관리자인 apt를 이용해 패키지 업데이트RUN apt-get install sudo : 시스템에 sudo 명령어 설치 -> 일반 사용자에게 임시로 관리자 권한 부여RUN sudo apt-get install net-tools : net-tools : 네트워크 관리 도구 모음 -> ifconfig 명령어 사용 가능CMD ifconfig : CMD : 컨테이너 시작 시 실행될 기본 명령어 지정 -> ifconfig 실행도커 파일 빌드
docker build --no-cache -f [도커파일 이름] -t [생성할 이미지 이름]:[태그] [도커파일 경로] : 파일 빌드 → 이미지 생성-f : 생략할 경우 지정한 경로에서 DockerFile 이란 이름의 파일을 찾음-t : 생략할 경우 16진수 형태의 이름의 이미지가 생성됨--no-cache : 빌드 시 캐시 사용하지 않도록 설정컨텍스트명령어
FROM : 도커 파일로 생성할 이미지 기반 이미지를 설정LABEL : 생성 이미지에 메타 데이터 추가RUN : 생성되는 컨테이너 내부에서 명령어 실행ADD : 이미지에 파일 추가COPY : 이미지에 파일 추가WORKDIR : 작업 디렉토리 설정 → cd 명령어와 동일한 기능EXPOSE : 생성된 이미지로 컨테이너 실행 시 노출할 포트CMD : 컨테이너 시작 시 실행할 명령어 설정ENTRYPOINT : 컨테이너 시작 시 실행할 명령어 설정CMD, ENTRYPOINT 둘 중 하나는 반드시 설정VOLUME : 볼륨을 사용해 빌드된 이미지로 컨테이너를 생성했을 때 호스트와 공유할 컨테이너 디렉토리를 설정ENV : 생성된 이미지에서 사용할 수 있는 환경 변수 설정ARG : 내부로 값을 전달받을 수 있는 변수를 선언