도커 설치하기
- 도커는 기본적으로 리눅스 운영체제에 사용됨
- MacOS와 Windows에서 사용하기 위해서 Docker for Mac / Docker for Windos 설치 필요
- 설치 확인 : docker version
- Client - Server 구조 : docker CLI는 도커 호스트 명령을 전달하고 결과를 받아서 출력함

도커 기본 명령어
run : 컨테이너 실행
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
| -d | detached mode (백그라운드 모드) 이 옵션을 사용하면 docker 컨테이너가 백그라운드에서 실행되며, 컨테이너의 출력이 터미널에 표시되지 않음 |
| -p | 호스트와 컨테이너의 포트를 연결 |
| -v | 호스트와 컨테이너의 디렉토리를 연결 |
| -e | 컨테이너 내에서 사용할 환경변수 설정 |
| --name | 컨테이너 이름 설정 |
| --rm | 프로세스 종료 시 컨테이너 자동 제거 |
| -it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
| --network | 네트워크 연결 |
예1) docker run ubuntu:20.04
- run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고, 없다면 다운로드(pull) 한 후 컨테이너를 생성(create)하고 시작(start) 한다.
예2) docker run -rm -it ubuntu:20.04 /bin/sh
- 컨테이너 내부에 들어가기 위해 sh를 실행하고 키보드 입력을 위해 -it 옵션을 부여
- -rm 옵션으로 프로세스가 종료되면 컨테이너 자동 삭제
예3) docker run --rm -p 5678:5678 hashicorp/http-echo -text="hello world"
- -p 옵션을 추가하여 컨테이너 포트를 호스트의 포트로 연결함
exec 명령어
exec 명령어는 run 명령어와 달리 실행 중인 도커 컨테이너에 접속할 때 사용하며 컨테이너 안에 ssh server등을 설치하지 않고 exec명령어로 접속함
도커 기본 명령어
| ps | docker ps | 실행 중인 컨테이너 목록 확인 |
| docker ps -a | 중지된 컨테이너도 확인 | |
| stop | docker stop [OPTIONS] CONTAINER [CONTAINER...] | 실행 중인 컨테이너 중지 (여러개 중지 가능) |
| rm | docker rm [OPTIONS] CONTAINER [CONTANER...] | 종료된 컨테이너 완전 제거 |
| logs | docker logs [OPTIONS] CONTAINER | 컨테이너 로그 출력 명령어로 컨테이너가 정상적으로 동작하는지 확인 가능 |
| images | docker images [OPTIONS] [REPOSITORY[:TAG]] | 도커가 다운로드한 이미지 목록 확인 |
| pull | docker pull [OPTIONS] NAME[:TAG|@DIGEST] | 이미지 다운로드 |
| rmi | docker rmi [OPTIONS} IMAGE [IMAGE...] | 이미지 삭제 |
| network create | docker network create [OPTIONS] NETOWRK | 도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크 생성 |
| network connect | docker network connect [OPTIONS] NETWORK CONTAINER | 기존에 생성된 컨테이너에 네트워크를 추가 |
| network option | docker run -d -p 8080:80 --network=app-network -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_NAME=wp -e WORDPRESS_DB_USER=wp -e WORDPRESS_DB_PASSWORD=wp wordpress |
워드프레스를 app-network에 속하게 하고 mysql을 이름으로 접근함 |
| v | -v /my/own/datadir:/var/lib/mysql | 컨테이너 삭제 시에도 마운트하여 연결해서 불러올 수 있는 명령어 |
도커 컴포즈 (docker compose)
도커 컴포즈(Docker Compose)는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구임
컴포즈를 사용하면 여러 개의 컨테이너를 하나의 서비스로 묶어서 관리할 수 있습니다.
예를 들어, 웹 애플리케이션을 개발하는 경우, 데이터베이스 컨테이너와 웹 서버 컨테이너를 따로 띄우지 않고, 컴포즈를 사용하여 하나의 서비스로 묶어서 실행할 수 있음
docker-compose.yml
version: '2'
services:
db:
image: mariadb:10.9
volumes:
- ./mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
image: wordpress:latest
volumes:
- ./wp:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
컴포즈는 YAML 파일 형식으로 정의됨
이 파일 안에는 서비스에 대한 정보, 컨테이너를 실행할 때 필요한 환경 변수, 데이터베이스 볼륨 등의 설정 정보가 포함되며,
컴포즈를 사용하면 이러한 설정 정보를 정의하고, 컴포즈 명령어를 실행하면 여러 개의 컨테이너를 동시에 실행할 수 있습니다.
도커 컴포즈 문법
| version | version: '3' | docker-comppse.yml 파일의 명세 버전 '3'는 docker compose v3.x 이상에서 작동해야 함을 의미 (버전에 따라 지원하는 도커 엔진 버전이 달라짐) |
| service |
services:
django: |
실행할 컨테이너 정의 아래와 같은 속성 정의 가능 - image, build, ports, volumes, environment, depends_on |
| image |
services:
django: image: django-sample |
컨테이너에 사용할 도커 이미지 이름과 태그 |
| port | ports: - "8000:8000" |
컨테이너와 연결할 포트 {호스트 포트}:{컨테이너 포트} |
| environment |
services:
mysql: environment: - MYSQL_ROOT_PASSWORD=somewordpress: '3' |
컨테이너에서 사용할 환경변수 {환경변수 이름}:{값} |
| volumes |
services:
django: volumes: - ./app:/app |
마운트하려는 디렉터리 {호스트 디렉터리}:{컨테이너 디렉터리} |
| restart |
services:
django: restart: always |
컨테이너의 재시작 정책 컨테이너가 비정상적으로 종료될 때 동작을 지정 |
| build |
django:
build: context: . dockerfile: ./compose/django/Dockerfile-dev |
이미지를 자체 빌드 후 사용 image 속성 대신 사용함 이곳에 사용할 별도의 도커 파일이 필요함 |
도커 컴포즈 명령어
| up | docker-compose up -d | docker-compose.yml에 정의된 컨테이너를 실행 |
| start | docker-compose start | 중지된 컨테이너 실행 |
| restart | docker-compose restart | 컨테이너 재시작 |
| stop | doocker-compose stop | 컨테이너 멈춤 |
| down | docker-compose down | 컨테이너 종료하고 삭제 |
| logs | docker-compose logs | 컨테이너 로그 출력 |
| ps | docker-compose ps | 컨테이너 목록 출력 |
| exec | docker-compose exec {컨테이너 이름} {명령어} | 실행 중인 컨테이너에서 명령어 실행 |
| build | docker-compose build | 컨테이너 build 부분에 정의된 내용대로 빌드 |
[참고 강의]
[인프런] 초보를 위한 도커 안내서
'Docker' 카테고리의 다른 글
| [Docker] Docker 란? (0) | 2023.03.24 |
|---|