Docker Compose 사용해 보기 (1)
Docker 명령 정리
Image 관련
- 이미지 빌드 : docker build --platform=linux/amd64 -t "image_name":"version"
- 이미지 목록 : docker images / docker image ls
- 이미지 삭제 : docker rmi / docker image rm
Docker Hub 관련
- 로그인 : docker login -u "사용자ID" -p "사용자PW" / docker login --username="사용자ID"
- 다운로드 : docker pull "image_name"
- 업로드 : docker push "image_name":"version"
Container 관련
- docker create
- docker run --name -p -v "image_name"
- --name : 컨테이너 실행 이후 ID가 아닌 지정한 이름으로 사용 가능
- -p : 포트 매핑, 해당 서버와 호스트를 연결
- -v : 해당 서버의 폴더와 호스트 서버의 폴더를 연결
- docker ps / docker -a / docker / -q
- docker stop "container_name(id)" / docker start "container_name(id)" / docker restart "container_name(id)"
- docker kill "container_name(id)" / docker pause "container_name(id)" / docker unpause "container_name(id)"
- docker rm "container_name(id)"
Container logs
- 전체 로그 확인 : docker logs -f "container_name(id)"
- 최근 로그 확인 : docker logs --tail 100 "container_name(id)"
exec
- 컨테이너에서 명령 실행 : docker exec "container_id" "command"
Container detach & attach
- 백그라운드에서 실행(detach) : docker -d run "container_name(id)"
- 포어그라운드에서 실행(attach) : docker attach "container_name(id)"
Docker Volume
Docker Volume의 필요성
- 특정 소프트웨어가 Docker Container를 통해 계속 동작해야 한다면 데이터가 영구적으로 보관돼야 함
- 이를 보장하는 기능이 Docker Voumes => Data Persistence
- Docker Container 내의 가상 파일 시스템과 호스트 시스템의 파일을 매핑
Docker Volume 정의
- 호스트 파일 시스템 폴더를 Docker Container 파일 시스템의 폴더로 마운트 하는 것
- 호스트에서 내용을 바꾸면 Docker Container에도 반영
- Docker Container의 상태와 관계없이 데이터를 영구적으로 보관
- 마운트 : 디스크와 같은 물리적인 장치를 파일 시스템의 특정 위치(폴더)에 연결해 주는 것
Docker Volume 종류
- Host Volumes : docker run -v를 실행할 때 페어로 지정
- docker run -v "Host Path":"Docker Container Path"
- ':' 앞이 호스트 파일 시스템 경로, 뒤가 컨테이너 파일 시스템 경로
- Anonymous Volumes : docker run -v를 실행할 때 컨테이너 패스만 지정
- docker run -v "Docker Container Path"
- Dockerfile에서 사용되는 방식으로 호스트 쪽에 액세스 되지는 않지만 재시작해도 유지
- Named Volumes : docker run -v를 실행할 때 이름과 컨테이너 경로를 지정
- docker run -v "name":"Docker Container Path"
- 가장 선호되는 방식으로 하나의 Volume을 다수의 컨테이너에서 공유하는 것도 가능
- Volume을 ReadOnly로 지정하고 싶다면 뒤에 ':ro'를 붙이면 됨
- docker run -v "name":"Docker Container Path":ro
- Container 내에서 변동 내용이 적용되지 않음
Docker Volume 사용법
- Dockerfile : VOLUME 명령을 통해 anonymous volume만 지정 가능
- docker-compose : Host Volume이나 Named Volume을 사용하는 것이 일반적
Docker 환경 클린업
Docker 환경 클린업 - 커맨드라인
- 컨테이너 삭제
- 원래 docker container ls 후 개별적으로 docker container rm으로 삭제
- docker container -f $(docker container ls -aq)로 모든 컨테이너 삭제 가능
- 이미지 삭제
- 원래 docker image ls 후 개별적으로 docker image rm으로 삭제
- docker image rm -f $(docker image ls -q)로 모든 이미지 삭제 가능
- 삭제 확인
- docker ps
- docker images
Docker 환경 클린업 - Desktop의 Troubleshoot 메뉴
다수의 Container로 구성된 소프트웨어 실행
실행해 볼 프로그램
- 투표 프로그램 : 고양이 or 강아지
하나씩 빌드
- redis와 postgres는 공식 이미지라서 빌드할 필요 X
docker build -t vote ./vote
docker build -t result ./result
docker build -t worker ./worker
docker images
하나씩 실행
docker run -d --name=redis redis
docker run -d -e POSTGRES_PASSWORD=password --name=db postgres
docker run -d --name=vote -p 5001:80 vote
docker run -d --name=result -p 5002:80 result
docker run -d --name=worker worker
네트워크 이슈
- 각 컨테이너는 독립적으로 실행되므로 네트워크 연결이 필요
- docker의 network 기능 사용
- network를 하나 만들고 모든 컨테니어를 해당 네트워크 안으로 지정
docker container rm -f $(docker container ls -aq)
docker network create mynetwork
docker run -d --name=redis --network mynetwork redis
docker run -d --name=db -e POSTGRES_PASSWORD=password --network mynetwork postgres
docker run -d --name=vote -p 5001:80 --network mynetwork vote
docker run -d --name=result -p 5002:80 --network mynetwork result
docker run -d --name=worker --network mynetwork worker
'[프로그래머스] 데이터 엔지니어링 데브코스 3기 > TIL(Today I Learn)' 카테고리의 다른 글
[TIL - 50일 차] Docker & K8S 실습 (4) (0) | 2024.05.31 |
---|---|
[TIL - 49일 차] Docker & K8S 실습 (5) (0) | 2024.05.30 |
[TIL - 47일 차] Docker & K8S 실습 (2) (0) | 2024.05.28 |
[TIL - 46일 차] Docker & K8S 실습 (1) (0) | 2024.05.27 |
[TIL - 45일 차] 데이터 파이프라인과 Airflow (5) (0) | 2024.05.24 |