티스토리 뷰

 

🔗 컨테이너와 호스트 사이에 파일 복사    

### 기본적으로 docker cp 원본경로 복사할경로 ###

# 호스트 -> 컨테이너로 파일 복사
# docker cp 호스트_경로 컨테이너_이름:컨테이너_경로
docker cp C:\Users\woori\Documents\index.html exapache:/usr/local/apache2/htdocs/

# 컨테이너 -> 호스트로 파일 복사
# docker cp 컨테이너_이름:컨테이너_경로 호스트_경로
docker cp exapache:/usr/local/apache2/htdocs/index.html C:\Users\woori\Documents

 

 

🔒 스토리지 마운트

  - 볼륨이란? 스토리지의 한 영역을 분할한 것. 즉, 하드디스크나 SSD를 분할한 하나의 영역임

  - 마운트란? 연결하다 그 의미 그 자체

  - 그럼 볼륨마운트란? 대상을 연결해 운영체제 또는 스프트웨어의 관리하에 두는 일.
    ex) USB랑 PC는 연결되어있지 않지만 USB를 PC에 꽂으면 연결되어 사용할 수 있는거랑 비슷함

  • 바인드 마운트
    • 컨테이너와 파일을 연동하는 데 많이 사용됨. *LAMP 스택을 실무에 활용할 때 필수적임
    • 도커가 설치된 컴퓨터의 문서 폴더 등 도커엔진에서 관리하지  않는 영역의 기존 디렉터리를 컨테이너에 마운트하는 방식이다.
    • 디렉터리가 아닌 파일 단위로도 마운트가 가능하다.
    • 자주 사용하는 파일을 두는 데 사용한다.
    • 기존과 동일한 방식으로 파일을 사용할 수 있다.
  • 볼륨 마운트
    • 도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 컨테이너에 디스크 형태로 마운트한다.
    • 이름만으로 관리가 가능해서 다루기 쉽지만
    • 볼륨에 비해 직접 조작하기 어려움.
    • 임시목적으로 사용하거나 자주는 쓰지 않지만 지우면 안되는 파일들을 목적으로 많이 사용함
    • 운영체제 또는 환경에 따라 명령어가 달라지는 등의 의존성 문제가 일어나지 않는다.(ex. 윈도우->macOS로 변경했을 때 경로 수정 안해도 됨)
    • 볼륨에 접근할 때 무조건 도커 컨테이너를 경유해야 한다. 백업의 절차도 매우 복잡함
    • Tip. 볼륨에 직접 접근
      리눅스에서는 볼륨은 /var/lib/docker/volumes/ 에 위치한다. 단, 볼륨에 직접 접근하여 수정할 경우 볼륨 자체가 깨질 수 있다.
항목 볼륨 마운트 바인드 마운트
스토리지 영역 볼륨 디렉터리 또는 파일
물리적 위치 도커 엔진의 관리 영역 어디든지 가능
마운트 절차 볼륨을 생성한 후 마운트 기존 파일 또는 폴더를 마운트
내용 편집 도커 컨테이너를 통해서 일반적인 파일과 같이
백업 절차가 복잡함 일반적인 파일과 같이

* LAMP스택 ? : 웹 개발에서 널리 사용되는 오픈소스소프트웨어 세트로, Linux(운영체제), Apache(웹서버), Mysql(데이터베이스 관리시스템), PHP(서버 사이드 스크립팅 언어)로 구성되어있음.

 

🧵 Image 만들기

  •   방법1. commit 커맨드로 컨테이너를 이미지로 변환
    • 도커환경에서 사용하고있는 컨테이너를 commit 명령어를 사용해서 이미지로 변환한다.
docker commit 컨테이너_이름 새로운_이미지_이름

 

  • 방법2. Dockerfile 스크립트로 이미지 만들기
    • 바인드 마운트 한 로컬 폴더에서 Dockerfile을 작성하고, docker환경에서 build한다.
docker build -t 생성할_이미지_이름 재료_폴더_경로

## 여기서 -t는 태그를 주는 옵션
# Dockerfile 스크립트의 예시

FROM 이미지_이름
COPY 원본_경로 대상_경로
RUN 리눅스_명령어
...

 

🧾 도커 컴포즈

  ✔ 도커 컴포즈의 개념

      - 시스템 구축과 관련된 명령어를 하나의 텍스트파일(YAML)에 기재해 명령어 한 번에 시스템 전체를 실행하고 종료, 폐기한다.

      - 데이터베이스와 애플리케이션 컨테이너를 함께 시작하고 싶다거나, 환경을 대량으로 생성해야 할 때 유용

      - 산출물이 텍스트 파일 형태로 남는다 (관리에 유용함)

      - 도커 컴포즈는 도커 엔진과는 별개로 따로 설치해야한다 (Windows, macOs는 아마 docker 다운로드하면서 같이 받아졌을거임. Linux만 별개 설치)

      - 도커 컴포즈를 사용하려면 docker-compose.yml 이름을 사용해야 한다.

      - docker-componse.yml파일은 한 폴더에 하나만 있을 수 있다.

 

  ✔ 도커 컴포즈 커맨드

      -  up command  : (≒ docker run) 이미지를 내려받고 컨테이너를 생성 및 실행

      -  down command  : (≒ docker rm) 컨테이너와 네트워크를 정지 및 삭제. 볼륨과 이미지는 삭제하지 않는다

 

  ✔ 도커 컴포즈 vs Dockerfile

      - 도커 컴포즈 : 네트워크, 볼륨을 포함하여 컨테이너 run 명령어를 모아놓은 파일

      - Dockerfile : 네트워크나 볼륨은 포함하지 않고, 이미지를 만들기 위한 파일

 

  ✔ 도커 컴포즈 파일의 항목

항목 설명
version Docker Compose 파일의 버전을 정의합니다. 예: version: '3.8'
services 어플리케이션의 각 서비스를 정의하는 섹션입니다.
image 사용할 Docker 이미지의 이름과 태그를 지정합니다.
build Dockerfile을 사용하여 이미지를 빌드하는 설정입니다.
ports 컨테이너의 포트를 호스트와 매핑합니다. 예: "호스트포트:컨테이너포트"
volumes 호스트와 컨테이너 간의 데이터 공유를 위한 볼륨을 정의합니다.
environment 컨테이너에서 사용할 환경 변수를 설정합니다.
depends_on 서비스 간의 의존성을 정의합니다.
networks 사용자 정의 네트워크를 설정하여 서비스 간의 통신을 관리합니다.
restart 컨테이너가 종료되었을 때 자동으로 재시작할 정책을 설정합니다.
command 서비스 시작 시 실행할 명령어를 지정합니다.
healthcheck 컨테이너의 상태를 확인하기 위한 헬스 체크를 정의합니다.

 

  ✔ docker-compose.yml 파일 예시

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./data:/app/data
    environment:
      - NODE_ENV=production
    restart: always
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

 

  ✔ 작성한 docker-compose.yml파일 실행

# docker-compose -f 파일경로/docker-compose.yml up 옵션
docker-compose -f C:\Users\***\Documents\com_folder\docker-compose.yml up -d

# docker-compose -f 파일경로/docker-compose.yml down 옵션
docker-compose -f C:\Users\***\Documents\com_folder\docker-compose.yml down

 

 

 

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
250x250