기본 명령어와 컴포즈

HyeonWoo·2021년 7월 18일
0

도커

목록 보기
2/2
post-thumbnail

도커는 다음과 같이 Client - Server 구조로 이루어져 있음.

docker CLI는 도커 호스트에 명령을 전달하고 결과를 받아서 출력함.

도커 기본 명령어

run - 컨테이너 실행

docker run [OPTIONS] IMAGE[:TAG|@DIGEST][COMMAND] [ARG...]

OPTIONS기능
-ddetached mode(백그라운드 모드)
-p호스트와 컨테이너의 포트를 연결
-v호스트와 컨테이너의 디렉토리를 연결
-e컨테이너 내에서 사용할 환경변수 설정
--name컨테이너 이름 설정
--rm프로세스 종료시 컨테이너 자동 제거
-it-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
--network네트워크 연결

ex1) ubuntu 20.04 컨테이너 만들기

docker run ubuntu:20.04

run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드(pull)한 후 컨테이너를 생성(create)하고 시작(start)한다.

컨테이너는 정상적으로 실행됐지만 뭘 하라는 명령어를 전달하지 않았기 때문에 컨테이너는 생성되자마자 종료된다. 컨테이너는 프로세스이기 때문에 실행중인 프로세스가 없으면 컨테이너는 종료된다.

docker run --rm -it ubuntu:20.04 /bin/sh

컨테이너 내부에 들어가기 위해 sh를 실행하고 키보드 입력을 위해 -it 옵션을 줌.
추가적으로 프로세스가 종료되면 컨테이너가 자동으로 삭제되도록 --rm 옵션도 추가.

--rm 옵션이 없다면 컨테이너가 종료되더라도 삭제되지 않고 남아 있어 수동으로 삭제해야 함.

ex2) CentOS 실행

docker run --rm -it ubuntu:20.04 /bin/sh

도커는 다양한 리눅스 배포판을 실행할 수 있음. 공통점은 모두 동일한 커널을 사용한다는 점.

ex3) 웹 어플리케이션 실행하기

docker run --rm -p 5678:5678 hashicorp/http-echo -text="hello world"

-p 옵션을 주어 본인 호스트의 5678포트와 컨테이너 포트를 연결함.

ex4) Redis 실행하기

docker run --rm -p 1234:6379 redis

ex5) MySQL 실행하기

docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:5.7

mysql 접속 : docker exec -it mysql mysql

*exec 명령어는 run 명령어와 달리 실행중인 도커 컨테이너에 접속할 때 사용하며 컨테이너 안에서 ssh server등을 설치하지 않고 exec 명령어로 접속한다.

도커는 다양한 데이터베이스를 손쉽게 생성/삭제할 수 있기 때문에 개발할때도 많이 사용함.

ex6) 워드프레스 블로그 실행하기

docker run -d -p 8080:80 \
-e WORDPRESS_DB_HOST=host.docker.internal \
-e WORDPRESS_DB_NAME=wp \
-e WORDPRESS_DB_USER=wp \
-e WORDPRESS_DB_PASSWORD=wp \
wordpress

-e 옵션을 주어 환경변수를 설정할 수 있음.

ps 명령어

docker ps

실행중인 컨테이너 목록을 확인하는 명령어.

docker ps -a

중지된 컨테이너도 확인하려면 -a 옵션을 붙임.

stop 명령어

docker stop [OPTIONS] CONTAINER [CONTAINER...]

실행중인 컨테이너를 중지하는 명령어. 실행중인 컨테이너를 하나 또는 여러개(띄어쓰기)중지할 수 있음.

rm 명령어

docker rm [OPTIONS] CONTAINER [CONTAINER...]

종료된 컨테이너를 완전히 제거하는 명령어.

logs 명령어

docker logs [OPTIONS] CONTAINER

옵션 : -f, --tail

images 명령어

docker images [OPTIONS]REPOSITORY[:TAG]]

도커가 다운로드한 이미지 목록을 보는 명령어.

pull 명령어

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

이미지를 다운로드하는 명령어.

rmi 명령어

docker rmi [OPTIONS] IMAGE [IMAGE...]

이미지를 삭제하는 명령어. images 명령어를 통해 얻는 이미지 목록에서 이미지 ID를 입력하면 삭제가 된다. 단, 컨테이너가 실행중인 이미지는 삭제되지 않음.

network create 명령어

docker network create [OPTIONS] NETWORK

도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만든다.

ex) docker network create app-network

network connect 명령어

docker network connect [OPTIONS] NETWORK CONTAINER

기존에 생성된 컨테이너에 네트워크를 추가한다.

ex) docker network connect app-network mysql
mysql 컨테이너에 네트워크를 추가한다.

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을 이름으로 접근한다.

도커 compose

version: '2'
services:
  db:
    image: mysql:5.7
    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

up 명령어

docker-compose up

docker-compose 실행

down 명령어

docker-compose down

docker-compose 종료

도커 컴포즈 문법

version


version: '3'
  • docker-compose.yml 파일의 명세 버전

  • docker-compose.yml 버전에 따라 지원하는 도커 엔진 버전도 다름

services

services: 
  postgres:
   ... 
  django:
   ...
  • 실행할 컨테이너 정의

  • docker run --name django와 같다고 생각할 수 있음

image

services: 
  django:
    image: django-sample
  • 컨테이너에 사용할 이미지 이름과 태그

  • 태그를 생략하면 latest

  • 이미지가 없으면 자동으로 pull

ports

services: 
  django:
     ... 
     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.yml에 정의된 컨테이너를 실행

  • docker-compose up

  • docker-compose up -d : docker run의 -d 옵션과 동일

  • docker-compose up --force-recreat : 컨테이너를 새로 만들기

  • docker-compose up --build : 도커 이미지를 다시 빌드(build로 선언했을 때만)

start

멈춘 컨테이너를 재개

  • docker-compose start

  • docker-compose start wordpress : wordpress 컨테이너만 재개

restart

컨테이너를 재시작

  • docker-compose restart

  • docker-compose restart wordpress : wordpress 컨테이너만 재시작

stop

컨테이너 멈춤

  • docker-compose stop

  • docker-compose stop wordpress : wordpress 컨테이너만 멈춤

down

컨테이너를 종료하고 삭제

  • docker-compose down

logs

컨테이너의 로그

  • docker-compose logs

  • docker-compose logs -f : 로그 follow

ps

컨테이너 목록

  • docker-compose ps

exec

실행중인 컨테이너에서 명령어 실행

  • docker-compose exec {컨테이너 이름} {명령어}

  • docker-compose exec wordpress bash

build

컨테이너 build 부분에 정의된 내용대로 빌드

  • build로 선언된 컨테이너만 빌드됨

  • docker-compose build

  • docker-compose build wordpress : wordpress 컨테이너만 build


참고자료

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글