Post

Docker 스터디

Docker 스터디

컨테이너 기반의 오픈소스 가상화 플랫폼



컨테이너

프로그램, 실행환경을 추상화 -> 프로그램의 배포 및 관리를 단순하게 해줌

  • 격리된 공간에서 프로세스가 동작하는 기술(가상화 기술의 일종): host와 다른 process
  • 기존에는 OS를 가상화했음. 가상머신에서 게스트 OS 전체를 가상화 / 사용법은 간단하지만 무겁고 느림
  • KVM(Kernel-based VM), Xen(반가상화 방식)의 등장: 게스트 OS가 필요는 하지만 전체 OS를 가상화하지는 않음 -> 클라우드 서비스의 가상 컴퓨팅 기술의 기반이 됨




이미지(Image)

  • 컨테이너 실행에 필요한 파일과 설정값(isolated filesystem)을 포함하고 있음. 상태값을 가지지 않고 변하지 않음(Immutable)
  • 컨테이너는 이미지를 실행한 상태라 볼 수 있음
  • 같은 이미지에서 여러개의 컨테이너를 생성할 수 있음
  • 컨테이너의 상태가 바뀌거나 삭제되어도 이미지는 변하지 않고 그대로 남아있음
  • 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더이상 의존성 파일을 컴파일하고 설치할 필요가 없음




Dockerfile

  • 이미지를 만들기 위한 파일
  • DSL(Domain-specific language) 언어를 이용하여 이미지 생성과정을 적음




Docker Tutorial

Docker Desktop을 설치했을 때 처음 나오는 튜토리얼

  1. image file을 깃헙에서 받아오기: docker run —name repo alpine/git clone {git_link}
  2. docker build하기(이게 이미지로부터 컨테이너를 만드는 작업?)
  3. container를 run하기
    1
    
    docker run -d -p 80:80 docker/getting-started
    

    -d: container를 detached mode로 실행

    -p 80:80: host의 80번 port를 container의 80번 포트에 map

    docker/getting-started: 사용할 image




Docker 따라하기

Dockerfile 생성하기: container image 만들기

  1. package.json과 같은 디렉토리에 Dockerfile이라는 이름의 파일을 생성
  2. 해당 디렉토리에서 docker build를 해준다
    1
    
    docker build -t getting-started .
    

    -t: flag tag(?)

    getting-started: container를 run할 때 참고하는 image

    .: current directory의 Dockerfile을 보란 뜻

Container 시작하기

  1. container 실행하기: 만들어진 image를 명시해주기!
    1
    
    docker run -dp 3000:3000 getting-started
    
  2. localhost:3000 을 들어가면 실행되어 있음!!

Multi-Container: MySQL

docker로 application을 실행하면서 MySQL도 같이 돌리려면 container를 networking해줘야 한다.

Container Networking Method

  1. 시작하는 시점에 assign
  2. 이미 존재하는 container에 연결
  1. MySQL image 받기
    1
    
    docker pull mysql
    

    m1 맥북의 경우 arm/64를 아키텍쳐 이미지를 기본으로 사용하기 때문에 다음 커멘드를 이용하여 image를 받아야 한다

    1
    
    docker pull --platform linux/amd64 mysql:latest
    

    다음 커멘드를 이용하여 image가 잘 받아졌는지 확인할 수 있다

    1
    
    docker images
    

    도커 image를 지우는 방법은 다음과 같다

    1
    
    docker rmi {image_id}
    
  2. Container 만들기 받아온 이미지로부터 container를 생성한다
    1
    
    docker run --platform linux/amd64 -p 3306:3306 --name {container_name} -e MYSQL_ROOT_PASSWORD={root_user_password} -e MYSQL_DATABASE={database_name} -d mysql --default-authentication-plugin=mysql_native_password
    

    --default-authentication-plugin=mysql_native_password: mysql8부터 authentication이 바뀌어서 이렇게 설정해줘야 connection이 되었음

    container 실행

    1
    
    docker start {container_name or container_id}
    

    container 재실행

    1
    
    docker restart {container_name or container_id}
    

    container 종료

    1
    
    docker stop {container_name or container_id}
    

    실행중인 container에 attach(접속)

    1
    
    docker attach {container_name or continaer_id}
    

    실행중인 container bash에 접속: bash에서 빠져나오고 싶을 땐 exit 명령어를 이용할 수 있다

    1
    
    docker exec -it {container_name} bash
    

    동작중인 container 확인

    1
    
    docker ps
    

    정지된 container 확인

    1
    
    docker ps -a
    

    container 삭제

    1
    
    docker rm {container_id}
    
This post is licensed under CC BY 4.0 by the author.

Trending Tags