[section 4] Cloud - Docker

수경·2023년 2월 2일
0

코드스테이츠

목록 보기
53/57

Docker

배포 컨테이너 -> 실행환경에 구애받지 않고 애플리케이션 실행 가능

장점

의존성 충돌 문제 해결

  1. 개발과 배포 환경을 일치 시킴
  2. 수평 확장을 쉽게 해줌
  3. 각 서버에 새로운 내용을 배포하기 쉽게 해줌

구조

컨테이너

애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고 실행되도록 만든 애플리케이션 단위

이미지

애플리케이션 및 애플리케이션의 구성을 담은 템플릿
이미지로 여러 개의 컨테이너 생성

레지스트리

이미지를 저장하고 배포/공유하는 데 사용

Docker vs VM


Docker CLI

이미지 읽는 법

[Registry_Account/Repository_Name:Tag]

  • Repository : 레지스트리 내에 도커 이미지가 저장되는 공간
  • Tag : 주로 이미지의 버전 정보 (default: latest)

docker/whalesay:latest
➡️ Registry : docker Hub
➡️ Registry Account : docker
➡️ Repository Name : whalesay
➡️ Tag : latest

CLI

docker docs

# docker/whalesay의 최신 이미지 받아오기
docker image pull docker/whalesay:latest

# 이미지 리스트 출력
docker image ls

# 이미지 삭제
docker image rm {이미지 이름}

# 컨테이너 리스트 출력
docker container ps -a

# 컨테이너 삭제
docker container rm {컨테이너 이름}

# 컨테이너 실행
docker container start {컨테이너 이름}

# 컨테이너 중지
docker container stop {컨테이너 이름}

# 컨테이너 실행
# run : 컨테이너 실행. 이미지가 없다면 pull한 뒤 실행.
# cowsay boo -> arg
docker container run --name {컨테이너 이름} docker/whalesay:latest cowsay boo

# -rm : 컨테이너를 일회성으로 실행. 컨테이너가 중지/종료될 때 컨테이너와 관련된 리소스 모두 제거.
docker container run --name {컨테이너 이름} --rm docker/whalesay cowsay boo

# 실행
# -p : publish -> 로컬호스트의 포트와 컨테이너의 포트를 연결
docker container run --name {컨테이너 이름} -p {로컬호스트 포트번호}:{컨테이너 포트번호} {이미지}


# 컨테이너에서 bash shell 실행
# -i : interative -> 사용자의 입력을 받음
# -t : tty -> TTY모드(pseudo-TTY)를 사용 (bash 사용하기 위해 설정)
docker exec -it {컨테이너 이름} bash

구동하는 컨테이너를 이미지로 만들기

docker container commit {컨테이너 이름} {이미지 이름}:{태그}

Dockerfile

docker 이미지 빌드를 위한 파일

  • Dockerfile
# Dockerfile 예시
# httpd 이미지를 사용한다고 가정
# httpd -> /usr/local/apache2/htdocs/ 경로에 웹 서버와 관련된 파일이 저장

# 베이스 이미지
FROM httpd:2.4

# (optional) 컨테이너 내의 작업 디렉토리 설정
WORKDIR /user/local/apache2

# 지정한 경로에 있는 파일을 복사/붙여넣기
COPY {웹 서버 실행에 필요한 파일의 경로} /usr/local/apache/htdocs/
  • 빌드
# --tag : [name:tag] 형식의 이미지를 생성
# 지정한 경로에 있는 Dockerfile을 찾아서 build
docker build --tag {이미지 이름}:{tag} {경로}

두 개의 이미지를 다루는 경우

docker-compose.yaml (.yml) 파일 사용

docker compose-file docs

  • docker-compose.yaml 예시
version: "3"

services:
  app:
    build:
      context: ./01_FLASK_DOCKER
      dockerfile: Dockerfile
    links:
      - "db:mysqldb"
    ports:
      - "80:8080"
    container_name: appcontainer
    depends_on:
      - db
  db:
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=dgkcoding
      - MYSQL_DATABASE=dgkdb
    ports:
      - "3306:3306"
    container_name: dbcontainer
      
  • docker-compose 실행
# -d : 백그라운드 실행
docker-compose up -d

# docker-compose.yaml에 정의된 이미지로 실행된 컨테이너 종료
docker-compose down

# 특정 이미지만 컨테이너로 실행
docker-compose up {특정 이미지}
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글