본문 바로가기

Docker

[Docker] 도커 기본 명령어 및 도커 컴포즈

도커 설치하기

  • 도커는 기본적으로 리눅스 운영체제에 사용됨
  • 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