[도커] 기초
도커란?
개발을 할 때 내 컴퓨터에서는 되는데 서버에서는 안되는 상황, 즉 버전이나 설정이 꼬이는 상황을 해결할 수 일종의 표준화된 컨테이너이다. 어떤 프로그램과 그 실행에 필요한 모든 라이브러리, 설정 등을 컨테이너에 넣어서 실행시키면 어디서든 똑같이 돌아가는 개념이다.
이미지(image) vs 컨테이너(container)
| 구분 | 비유 (붕어빵) | 비유 (게임) | 설명 |
|---|---|---|---|
| 이미지 (Image) | 붕어빵 틀 | 게임 설치 CD | 프로그램 실행에 필요한 파일과 설정값 등을 저장해 둔 설계도 (불변) |
| 컨테이너 (Container) | 구워진 붕어빵 | 실행 중인 게임 | 이미지를 바탕으로 실제로 실행되어 메모리에 올라간 프로세스 (생성/삭제 가능) |
undefined
이미지 만들기 (Build)
Dockerfile
- FROM : 베이스 이미지, 어떤 OS/환경인지
- WORKDIR : 작업 폴더
- COPY . . : 파일 복사 (내 컴퓨터 파일을 컨테이너로)
- CMD : 실행 명령어
1
2
3
4
5
6
7
8
9
10
11
12
13
FROM python:3.9 AS builder
WORKDIR /app
COPY . .
# python:3.9-slim 은 불필요한 도구를 뺀 초경량 버전
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /app .
CMD ["python", "main.py"]
명령어 : docker build - t [이미지 이름] . (마지막 점(.) 있어야함)
1
2
3
4
5
6
7
FROM myslq:latest
# mysql root 비밀번호 설정
ENV MYSQL_ROOT_PASSWORD=0323
COPY ./init.sql /docker-entrypoint-init.d/
# 포트 지정
EXPOSE 3306
CMD ["mysqld"]
Multi-stage Build
- Build와 Run분리
- 불필요한 빌드 도구를 뺀 초경량 이미지 생성 가능
- 위의 COPY –from=builder /app . 이 build 과정만 가져오는 것
.dockerignore
1
2
3
4
5
6
7
# .dockerignore 내용
.git
venv/
__pycache__/
*.md
secret_key.txt
- .gitingnore와 같은 역할로, 필요없는 파일을 제외시켜준다
- COPY . . 시 무시된다
데이터 지키기 (Volume)
컨테이너는 휘발성(삭제하면 데이터 증발)이다
- Volume 마운트로 해결 가능
- -v [내 컴퓨터 경로]:[컨테이너 경로]
- 내 컴퓨터의 특정 폴더와 컨테이너 내부 폴더를 일종의 개구멍으로 연결하는 것. 컨테이너가 삭제되어도 내 컴퓨터 파일은 안전
- 예) docker run –rm -v “${pwd}:/data” alpine touch /data/secret_file.txt
- 맥은 {pwd}, 윈도우는 {PWD}
- alpine : 이미지 이름
Docker Compose
컨테이너가 2개 이상 (예 : 웹 서버 + DB)일 때 사용
- 파일 docker-compose.yml
- 예) 워드프레스 블로그 만들기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
> services:
> db:
> image: mysql:5.7
> platform: linux/amd64 # 맥은 이거 필요
> environment:
> MYSQL_ROOT_PASSWORD: password
> MYSQL_DATABASE: wordpress
> volumes:
> - ./db_data:/var/lib/mysql
>
> wordpress:
> image: wordpress:latest
> ports:
> - "8000:80"
> depends_on:
> - db
> environment:
> WORDPRESS_DB_HOST: db:3306
> WORDPRESS_DB_USER: root
> WORDPRESS_DB_PASSWORD: password
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
services:
db:
image: mysql:5.7
platform: linux/amd64 # 맥은 이거 필요
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
volumes:
- ./db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
ports:
- "8000:80"
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
- 실행 : docker compose up -d (일괄 실행)
- 종료 / 삭제 : docker compose down (일괄 종료 및 네트워크 삭제)
This post is licensed under CC BY 4.0 by the author.