TIL docker

sundays·2022년 9월 30일
0

Docker 구성 요소

  • docker engine - docker를 이용한 애플리케이션 실행 환경 및 관리
  • docker hub - docker image를 저장하고 공유하는 공식 public docker registry
  • docker compose - 의존성있는 독립된 container에 대한 구성정보를 YAML 형식으로 작성하여 일원화된 애플리케이션 관리 도구
  • docker swarm - 여러 docker host를 클러스터로 구축하여 관리할 수 있는 docker orchestration 도구
  • docker registry - docker image 저장소, public/private registry로 구분
  • docker kitematic - container를 이용한 작업을 수행할 수 있는 GUI 도구
  • docker machine - VM 및 cloud VM과 같은 가상 컴퓨터 환경에 도커 환경을 구성하는 시스템

Docker Container Command Line

  • container는 격리된 환경( 가상 환경 )에서 동작하는 Linux 프로세스
  • container 생성 과정( 생명 주기 )
    • docker image pull( 다운로드 ) / docker image 생성( build )
    • -> docker container 생성( create ) => 격리된 프로세스 생성
    • -> docker container 실행( start ) => application 실행
    • -> docker container 중지( stop ) -> 재시작( restart )
    • -> docker container 삭제( remove ) => application 종료
  • container 생성은 application 실행과 같은 의미
  • container는 격리된 환경( 가상 환경 )에서 동작하는 Linux 프로세스
  • container 프로세스는 Linux 프로세스로서 관리가 되지만 container 프로세스는 완전 격리된 프로세스로 동작하며 현재 시스템의 kernel 기능을 공유한다.

docker image save [ 옵션 ] <image명> <파일명>

  • docker image를 tar 파일로 저장

docker image load [ 옵션 ] <파일명>

  • docker image를 저장한 파일 내용으로 image 복원

docker create <image이름> [ 옵션 ]

  • it
    -i - 대화식 모드 사용
    -t - tty( 단말 디바이스 ) 사용
  • docker create -it --name test-mysql1 mysql:5.7

docker start <container ID/이름>

  • container 실행

docker restart <container ID/이름>

  • container 재시작

docker stop <container ID/이름>

  • container 중지

docker attach <container ID/이름>

  • 동작 중인 container에 접속

docker exec [ 옵션 ] <container ID/이름> <명령>

  • 동작 중인 container에 명령 실행

docker container rm <container ID/이름>

  • container 삭제 - application 실행 종료
  • 실행중인 container는 삭제할 수 없다.
  • 실행중인 container를 삭제할 때는 먼저 docker stop 명령으로 container를 중지후에 삭제

docker run [ 옵션 ] <image 이름> [ container에서 동작 명령 ]

  • [ image download ], 생성, 실행을 일괄적으로 수행하는 명령
  • [ docker pull 명령 ] + docker create 명령 + docker start 명령을 차례대로 입력한 것과 같은 결과 수행
  • 옵션
    • -i - 대화식 모드 사용
    • -t - tty( 단말 디바이스 ) 사용
    • -d - 백그라운드에서 컨테이너 실행, container를 데몬 프로세스로 생성
    • --name <container에 부여할 이름> - container 이름 부여
    • -h <host 이름> - container의 hostname 설정
    • -rm - container 종료후 삭제
    • -p : - host port와 container port 연결( 포트 포워딩 )
    • -v <host 경로>:<container 경로> - host 경로와 container 경로의 공유 볼륨 설정
    • -e <환경변수이름>=<값> - container내의 환경 변수 등록
    • --net=네트워크 이름 - container를 네트워크에 연결

docker system prune

  • 실행중인 container를 제외한 회수 가능한 자원 회수

docker stats <container ID/이름>

  • container 리소스 상태 실시간 확인
  • 시각적으로 확인시에는 google cAdvisor 사용

docker top <container ID/이름>

  • container의 실행중인 프로세스 상태 확인

docker cp <원본 파일> <container ID/이름>:<복사 위치 및 파일 이름>

  • host에 있는 파일을 container에 지정된 위치에 복사

docker ps [ 옵션 ]

  • 실행중인 container 목록 출력
  • -a : 생성/종료된 container도 모두 출력
  • 출력 내용
    • CONTAINER ID - container 생성시 부여된 임의의 ID, 64자리
    • IMAGE - container 생성시 사용한 image
    • COMMAND - container 생성시 실행한 명령
    • CREATED - container 생성 시간
    • STATUS - 현재 container 상태
    • PORTS - container에 port forward 정보
    • NAMES - 임의로 부여된 container 이름, container 생성시 사용자가 이름을 지정할 수도 있다.

docker rm -f <container ID/이름>

  • 동작중인 container도 강제 삭제

docker container pause <container ID/이름>

  • container 일시 중지

docker container unpause <container ID/이름>

  • container 일시 중지 해제

docker container inspect <container ID/이름>

  • container 세부 정보 확인

  • docker container inspect webserver | grep Pid
    inspect 결과에 대하여 pipe와 grep을 활용하여 검색

  • docker container inspect webserver --format "{{.State.Pid}}"
    --format 옵션을 이용하여 원하는 내용 검색 -> Pid 검색

  • docker container inspect webserver --format "{{.NetworkSettings.IPAddress}}"
    --format 옵션을 이용하여 원하는 내용 검색 -> IP Address 검색

container 모니터링 도구

  • 서비스 운영을 하면서 필요한 시스템 metric( CPU/memory 사용률, 네트워크 트래픽 등 )을 모니터링 하면서 특이사항이 있을 때 대응하기 위해 모니터링 수행
  • container 환경하에서는 기존 모니터링 도구로는 container 모니터링 진행이 어렵다.
  • 구글 제공 cAdvisor( container Advisor )를 사용하면 GUI 방식으로 container에 대한 모니터링을 쉽게 수행할 수 있다.
    https://github.com/google/cadvisor

Docker Image 생성

  • Docker image는 container를 생성하기 위한 목적으로 사용
  • Docker Image 생성 방법
    • docker commit 명령 이용
    • Dockerfile을 통해 직접 생성

Dockerfile

  • docker image 생성, 즉 필요로 하는 개발 환경을 제공하기 위한 여러 명령 집합
  • FROM
    생성하려는 image의 base image 지정
  • RUN
    설정된 기본 이미지에 패키지 업데이트, 각종 패키지 설치, 명령 실행등을 작성
  • CMD
    생성된 Docker image를 container로 생성하여 실행할 때 실행되는 명령 기술
  • ENTRYPOINT
    생성된 Docker image를 container로 실행할 때 실행되는 명령
  • COPY
    Host에 있는 파일을 Docker image에 복사하는 명령
  • EXPOSE
    container가 host 네트워크를 통해 들어오는 트래픽을 listening하는 포트와 프로토콜 지정
  • WORKDIR
    container상에서 작업할 경로 전환을 위해 사용

Docker Image 예시

  • image 생성을 위해 필요한 파일 저장 디렉토리 생성
    mkdir calc-ubuntu

  • image 생성시 필요한 파일을 생성한 디렉토리에 복사
    index.html
    calc.js

  • ubuntu 배포판( base image )에 apache web server를 설치하고 계산기 web application 을 실행하는 image 생성

# base image 지정
FROM ubuntu:18.04
 
# Apache web server 설치
RUN apt-get update && \
    apt-get install -y apache2
 
# web service를 위한 프로그램 복사
COPY ./index.html /var/www/html
COPY ./calc.js /var/www/html
 
# 사용 포트 지정
EXPOSE 80
 
# 명령 실행
CMD [ "/usr/sbin/apache2ctl", "-DFOREGROUND" ]
  • image 생성
    docker build . -t calc-ubuntu:0.1

  • 만들어진 image로 container를 생성하여 실행 확인
    docker run -dit -p 80:80 --name calc-web calc-ubuntu:0.1

profile
develop life

0개의 댓글