반응형

도커란

: 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼

 

컨테이너: 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술. VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다.

source: https://kubernetes.io/ko/docs/concepts/overview/

 

이미지컨테이너 실행에 필요한 파일과 설정 값 등을 포함하고 있는 것으로 상태 값을 가지지 않고 변하지 않습니다(Immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됩니다. 같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다. 도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백메가MB에 이릅니다.

hub: https://hub.docker.com/

  • 레이어 저장 방식: 컨테이너를 생성할 때도 레이어 방식을 사용하는데 기존의 이미지 레이어 위에 읽기/쓰기read-write 레이어를 추가합니다. 이미지 레이어를 그대로 사용하면서 컨테이너가 실행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러개의 컨테이너를 생성해도 최소한의 용량만 사용합니다.

 

참고: 초보를 위한 도커 안내서

 

 

Docker 사용하기

1. docker container생성

DockerFile: 컨테이너 정의서

from  # image import

run  # linux bash command (build시 init!)

env  # linux 환경변수

expose  # port forwarding

entrypoint  # /bin/sh (bash file)

cmd  # bash arguments → pending 되는 command line을 적어야함(server로 사용하려면), 아니면 exit으로 바로 컨테이너 꺼짐

cp  # ex) {local_path} {container_path}

 

** 참고1: docker compose up -d —build 시 file이 변경된 부분부터 다시 실행됨 (file이 변경되도 다시 실행됨)

** 참고2: cmd에서 실행하고자하는 파일이 bash file일 경우는 실행 권한 필요: chmod +x {file_name}.sh

 

2. Container 여러개 생성 & 다른 Container 연결

docker-compose.yaml: 컨테이너s를 오케스트레이션

version: '1'

services:
  test-container:  # services 이름
    container_name: test-container
    hostname: test-container
    build:
      context: .
      dockerfile: DockerFile
    volumes:
      - ./src:/src  # code 싱크 맞추기(=copy) ex) {local_path}:{container_path}

  postgress:
    container_name: postgres
    hostname: postgres
    image: postgres:13  # docker image file 이미 있는 경우 (from hub.docker.com)
    environment:
      POSTGRES_PASSWORD: password
    ports:
      - 8080:8080  # conainer간의 port 연결 {local_port}:{container_port}

* 참고: yaml file 에서는 tab을 쓸 수 없음, “ 쌍따움표 쓸 수 없음

 

3. Docker 명령어

$ docker run

$ docker image ls -a

$ docker compose up -d --build  # -d: log background, --build: 새로 만들어 놓은 이미지로 변경 (해당 folder에서 실행하기)

$ docker compose down

$ docker logs {container_name}

$ docker container ps -a  # 전체 docker 작업 확인

$ docker compose ps -a  # docker-compoase.yaml 안에 있는 작업 확인

$ docker rm -f {container_name}

$ docker exec {service_name} {command}

$ docker exec {service_name} bash # ssh 연결 환경

$ docker volume prune

$ docker logs -tf {service_name}

 

작성한 예시 Docker Code : https://github.com/jaxgxxnxee/docker-test

반응형

+ Recent posts