← Back

[공부] 도커에 대한 기본기

말그대로 기본기
썸네일

⚠️ 이 블로그는 다른 사람이 보고 따라하라고 적은 게 아닌 작성자의 복기만을 위한 블로그입니다

한달 전에는 이론적인것만 배웠다면 이번에는 실전에서 쓸만한 지식들을 정리해보겠습니다.

기본 개념

  • 호스트 : Docker 데몬(dockerd)이 실행되어 컨테이너를 관리하는 물리/가상 머신 (내 컴퓨터)
  • 컨테이너 : 이미지를 기반으로 격리된 프로세스로 실행된 애플리케이션 인스턴스
  • 네트워크 : 컨테이너 간 및 컨테이너↔호스트 통신을 위한 가상 네트워크
  • 외부포트/내부포트 : 호스트포트:컨테이너포트 형태로 호스트와 컨테이너 포트를 연결
  • 도커 컴포스 : YAML 파일 하나로 다중 컨테이너(서비스)를 정의·실행하는 도구
  • 커밋 : 실행 중인 컨테이너의 파일 변경사항을 새 이미지로 저장하는 명령
  • 이미지 : 컨테이너 실행에 필요한 파일·라이브러리·설정을 패키징한 읽기 전용 템플릿
  • 도커파일 : 이미지 빌드 스크립트
  • 볼륨 / 바인드 마운트 : 데이터 영구화를 위한 호스트-컨테이너 파일시스템 연결
  • 레포지토리 : 이미지 저장/공유 장소
  • 태그 : 이미지의 버전·변형을 식별하는 레이블
  • 레이어 : 이미지가 나누어 저장되는 계층 구조

docker 기본 명령어

  • docker ps: 실행 중인 컨테이너 목록을 표시
  • docker ps -a: 모든 컨테이너(중지된 것 포함)를 표시
  • docker images: 로컬에 있는 모든 이미지를 나열
  • docker image pull [NAME[:TAG]]: 레지스트리에서 이미지를 다운로드
  • docker image push [NAME[:TAG]]: 로컬 이미지를 레지스트리에 업로드
  • docker build [OPTIONS] PATH: Dockerfile로부터 이미지를 빌드
  • docker run [OPTIONS] IMAGE: 새 컨테이너를 생성·실행
  • docker exec -it CONTAINER CMD: 실행 중인 컨테이너 안에서 명령 실행
  • docker stop [OPTIONS] CONTAINER: 실행 중인 컨테이너를 정상 중지
  • docker rm [OPTIONS] CONTAINER: 하나 이상의 컨테이너를 제거
  • docker volume ls: Docker 볼륨 목록을 표시
  • docker compose up: docker-compose.yml 기반으로 모든 서비스(컨테이너) 일괄 실행
  • docker compose down: Compose로 띄운 모든 컨테이너·네트워크·볼륨 정리 및 중지

도커를 쓰는 목적에 대한 생각

  1. 가상환경을 간편하게 만들 수 있다
  2. 이미 올라온 이미지로 환경설정을 간편하게 할 수 있다
  3. 내가 이미지를 올려서 다른 컴퓨터에서도 똑같은 환경으로 프로그램을 구동시킬 수 있다
  4. Docker compose로 환경설정 딸깍이 가능하다

Docker compose - YAML 작성법

기본 구조

  • services : 서비스 이름 아래에 image, build, ports, environment, volumes, networks 등을 지정합니다​
  • networks : 브리지 기본 네트워크 외에 커스텀 네트워크를 설정하고, 각 서비스에서 연결할 네트워크를 지정할 수 있습니다​
  • volumes : 서비스 아래 volumes 키로 호스트 디렉토리 혹은 named volume을 마운트하거나, 최상위 volumes 섹션에서 외부(external) 볼륨을 참조할 수 있습니다​
  • environment : 리스트(- VAR=value) 또는 매핑(VAR: "value") 문법을 지원합니다​
  • env_file : 단일 문자열 또는 리스트로 여러 파일을 병합할 수 있습니다​
  • ports : 호스트포트:컨테이너포트 형식으로 외부포트를 내부포트에 매핑해, 외부 접근을 가능하게 합니다​
  • build : build 섹션에 Dockerfile 경로(context, dockerfile) 및 빌드 인자(args)를 지정해 이미지를 자동 생성할 수 있습니다​

예시 yaml 파일

version: '3.8'

services:
  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    image: example/web:latest
    depends_on:
      - db
    ports:
      - "8080:80"
    environment:
      - DEBUG=true
    env_file:
      - .env
    volumes:
      - web_data:/var/www/html
    networks:
      - frontend

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - backend

volumes:
  web_data:
  db_data:

networks:
  frontend:
  backend:

실전에서 도커를 사용해보자

[공부] OpenGL vs WebGL vs Three.js

그래픽 렌더링 기술의 이해

[공부] 전역 상태 관리 라이브러리 개념 정리

(Recoil Jotai) (Zustand Redux-Toolkit) (React Query)