[프로그래머스] 데브코스 데이터엔지니어링 TIL Day 48

주재민·2023년 12월 20일
0
post-thumbnail

📖 학습주제

개발환경 구축을 위한 Docker와 K8S 실습 (3)


Docker 명령 정리

Image 관련

  • docker build --platform=linux/amd64 -t ~~~ : 이미지 빌드
  • docker images or docker image ls : 현재 로컬에 저장된 이미지 목록
  • docker rmi or ocker image rm : 이미지 삭제

Docker Hub 관련

  • docker login -u 사용자ID -p 사용자PW : 로그인
  • docker pull ~~~ : Docker Hub에 있는 이미지를 로컬에 다운
  • docker push ~~~ : 만든 이미지를 Docker Hub에 업로드

Container 관련

  • docker create
  • docker run --name -p -v 이미지이름
  • docker ps
  • docker ps -a
  • docker ps -q
  • docker stop 컨테이너이름 (혹은 컨테이너ID)
  • docker start 컨테이너이름 (혹은 컨테이너ID)
  • docker restart 컨테이너이름 (혹은 컨테이너ID)
  • docker kill 컨테이너이름 (혹은 컨테이너ID)
  • docker pause 컨테이너이름 (혹은 컨테이너ID)
  • docker unpause 컨테이너이름 (혹은 컨테이너ID)
  • docker rm 컨테이너이름 (혹은 컨테이너ID)

Container logs

  • docker logs -f 컨테이너이름 (혹은 컨테이너ID) : 컨테이너 내부에서 생기는 로그를 실시간으로 보여줌(-f 없으면 모든 로그 보여줌)
  • docker logs --tail 100 컨테이너이름 (혹은 컨테이너ID) : 최근 100개의 로그를 보여줌

exec

  • docker run --name=hangman ~~~
  • docker exec hangman cat /etc/hosts
    127.0.0.1 localhost
    ::1 localhost ip6-localhost ip6-loopback

Container detach & attach

  • docker run ~~~
  • docker run -d ~~~
    a043d40*********
  • docker attach a043

Docker Container의 일생

Docker Volume

Docker Volume 정의

  • 호스트 파일 시스템 폴더를 Docker Container 파일 시스템의 폴더로 마운트하는 것
    - 호스트쪽에서 내용을 바꾸면 바로 Docker Container쪽에도 반영됨
       ◦ 반대도 사실이지만 Volume의 속성을 잡기 나름임 (예를 들면 읽기 전용)
    - 이를 통해 Docker Container의 상태와 관계없이 데이터를 영구적으로 보관
  • 파일 시스템에서 마운트란?
    - 원래 마운트란 디스크와 같은 물리적인 장치를 파일 시스템의 특정 위치(폴더)에 연결해주는 것을 말함
    - 예를 들어 윈도우에서 USB를 꼽으면 내 컴퓨터에 새로운 :D 혹은 :E와 같은 식으로 새로운
    폴더가 생기는 것이 바로 마운트임

Docker Volume 예

  • Container와 Host 시스템이 특정 폴더를 공유
    - Container가 사라지더라도 데이터는 남게 하는 것

Container로 MySQL을 실행하는 경우 데이터가 저장되는 공간을 Docker Volume으로 설정

Docker Volume의 필요성

  • Docker Container가 실행되었다가 중단되면 데이터들은 어떻게 될까?
    -> 특정 소프트웨어가 Docker Container를 통해 일회성으로 동작하는 것이 아니라 계속해서 동작해야 한다면 데이터가 영구적으로 보관되어야함
    - e.g.) 데이터베이스가 Docker Container안에서 동작한다면?
  • 이를 보장하는 기능이 Docker Volumes => Data Persistence
  • Docker Container내의 가상 파일 시스템과 호스트 시스템의 파일 시스템을 맵핑
    - e.g.) 호스트 파일 시스템의 /home/trick/logs를 Docker Container의 /var/lib/airflow/logs로 맵핑
    - 이 경우 Docker Container가 중단되더라도 모든 Airflow logs는 기록이 남게 됨

Docker Volume 타입

  • Host Volumes: docker run -v를 실행할 때 페어로 지정
    - docker run -v /home/trick/logs:/var/lib/airflow/logs
    - :앞이 호스트 파일 시스템 패스이고 뒤가 컨테이너 파일 시스템 패스임
  • Anonymous Volumes: docker run -v를 실행할 때 컨테이너 패스만 지정
    - docker run -v /var/lib/mysql/data
    - 이 방식이 Dockerfile에서 사용되는 방식으로 호스트쪽에 액세스되지는 않지만 재시작해도
    유지됨
  • Named Volumes: docker run -v를 실행할 때 이름과 컨테이너 패스를 지정
    - docker run -v name:/var/lib/mysql/data
    - 가장 선호되는 방식임. 이 방식이 하나의 Volume을 다수의 컨테이너에서 공유하는 것도 가능하게 해줌
    - 이 포맷으로 뒤에서 살펴볼 docker-compose에서도 사용됨
  • Volume을 Readonly로 지정하고 싶다면?
    - name:/var/lib/mysql/data:ro

이미지 생성시 Docker Volume 사용법

Dockerfile

  • VOLUME 명령을 통해 Anonymous Volumes만 지정 가능

docker-compose

  • Host Volumes이나 Named Volumes을 사용하는 것이 일반적

Docker Volume 명령들

  • docker volume ls
  • docker volume rm
  • docker volume prune
  • docker volume inspect

Docker 환경 클린업

커맨드라인

  • Docker Desktop에서 모든 삭제하는 것이 가장 직관적
    - Image를 삭제하려면 먼저 실행 중인 Container가 없어야함. 따라서 맞는 순서는 먼저 Container를 중단하고 다음으로 Image를 삭제
  • 컨테이너 삭제
    - 원래는 docker container ls를 하고 Container ID를 개별적으로 docker container rm 뒤에 추가해야함. 하지만 한번에 이를 실행하는 것이 더 좋음
    $ docker container rm -f $(docker container ls -aq)
  • 이미지 삭제
  • 원래는 docker image ls를 하고 Image ID를 개별적으로 docker image rm 뒤에 추가해야함. 하지만 한번에 이를 실행하는 것이 더 좋음
    $ docker image rm -f $(docker image ls -q)
  • 정말 다 삭제되었는지 확인
    - ocker ps
    - ockerimages

Desktop에서 Troubleshoot 메뉴

0개의 댓글