개요
2023-09-12 2회차 SaaS 강의 에대해서 내용정리를한다.
내용
어제 내용 이어서…
- drupal 이랑 postgresql
Docker 옵션
- docker run의 —rm 옵션
docker run --rm <image>- 컨테이너가 종료되면서 바로 삭제됨 (일회성으로 사용하기위한 옵션임)
도커 볼륨에 대해
- 호스트 경로에 폴더나 경로가 만들어져있지않다고해도 자동으로 만들어진다.
도커 에러
docker pullacessdenied
- 실습중 docker run으로 이미지를 docker hub에서 pull해서 가져올때 보통 발생하는 에러인데 문제는 버전을 명시안해줘서 postgresql:latest라고 명시해주면 해결된다.
docker pull postgresql:latest
Docker Run 옵션
docker run -it <image>- 콘솔을 어플리캐이션에서 붙여서 실행하고 꺼지지않게함.
볼륨 컨테이너의 볼륨 공유
- 이렇게 컨테이너끼리 하나의 볼륨을 공유해서 사용 할 수 있다.

- 장점 : 여러개의 컨테이너가 하나의 볼륨 사용해서 초기화 작업이 빨라지고, 실행시간 단축, 비용 관련해서 장점이 있음.
도커의 Inspect
docker inspect <container_id/name>- 도커는 이렇게 어떤 리소스의 inspect를 하면 해당 정보를 JSON으로 볼 수 있게 잘 되어있다.

리눅스 호스트에서 도커의 볼륨 데이터 저장 위치

사용하지 않는 볼륨 삭제
docker volume prune자동 볼륨 생성
docker run -v /path/to/volume- 볼륨 자동으로 생성됨 이상한 이름으로
컨테이너 자원 할당 제한
# 메모리 제한
docker run -d --memory="1g" --name container_name
# CPU 공유 설정
docker run -it --name container_name --cpu-shares=512- (cpu 공유는 정확하게 되지는 않는다. VM의 그 cpu 갯수 지정하는 것과는 다르다!)
Docker Image Push 해보기
# 이미지에 태그 추가
docker tag <image> username/repository:tag
# 이미지 푸시
docker push username/repository:tag
실습
# Apache 웹서버 이미지 생성
docker commit <container_id> username/apache:tag
# Jupyter 이미지 생성
docker commit <container_id> username/jupyter:tag
# 이미지 pull
docker pull username/repository:tag
# 이미지 실행
docker run -d username/repository:tag주피터 실습
docker run -p 8888:8888 -v /notebooks jupyter/notebook --ip=0.0.0.0 --allow-root
도커 오케스트레이션
- docker swarm
- 쿠버네티스
Private Registry
- 비밀번호도 없고, 인가된 사용자만 사용 가능하다. 공공이나 은행 등에서 내부에 이렇게 Private Registry를 구축해서 사용하면 됨.
- 완전 기본적인 기능만 존재함. 실습은 안 함.
Dockerfile
- 청사진이라고 보면
- RUN은 컨테이너 안에서의 명령어 실행에는 -y를 모두 붙여서 멈추지 않게 해야 함.
- EXPOSE는 port에 대한 메타정보임. 실제로 포트를 열어주지는 않음.
- CMD의 옵션 저렇게 포그라운드로 반드시 실행해야 한다.
도커 파일 작성 시 도커 레퍼런스 참조
-

-
반드시 도커 파일을 실제로 구동 잘 되는지 테스트해봐야 함.
-
도커 파일 작성 시 명령어 문법은 두 가지가 있다.
- CMD
- 둘 중 하나 이상은 반드시 있어야 함.
- LABEL
- 그냥 메타정보.
- ADD
- 소스 원천 > 타겟으로 복사함.
- COPY나 ADD나 똑같음. 그냥 ADD 쓰자.
- ENTRYPOINT
- CMD는 하나 이상 반드시 있어야 한다.
- ENTRYPOINT는 OVERRIDE가 안 된다.

- SHELL
- 쉘도 지정해서 사용할 수 있다. 운영체제별로 powershell도 가능.

- 쉘도 지정해서 사용할 수 있다. 운영체제별로 powershell도 가능.
- CMD
도커 파일 실습
- Dockerfile로 jupyter 이미지를 생성하고 docker hub에 push한다. /notebooks를 볼륨으로 붙여서 실행한다(실습).
도커 네트워크
# 네트워크 목록 확인
docker network ls
# 네트워크 검사
docker network inspect bridge
# host 네트워크 사용
docker run --network host <image>
# none 네트워크 사용
docker run --network none <image>네트워크 Alias 설정
# 네트워크 alias 설정
docker run --network-alias <alias_name> <image>컨테이너 로깅
# 로그 확인
docker logs <container_id>
# 실시간 로그 확인
docker logs -f <container_id>
# CloudWatch 로깅 드라이버 사용
docker run --log-driver=awslogs --log-opt awslogs-region=ap-northeast-2 <image>도커 이미지 관리
# 이미지 검색
docker search <image_name>
# 이미지 저장
docker save <image> > image.tar
# 이미지 로드
docker load < image.tar
# 이미지 삭제
docker rmi <image>Private Registry 관련
# 프라이빗 레지스트리 로그인
docker login <registry_url>
# 프라이빗 레지스트리로 푸시
docker push <registry_url>/<image>:<tag>
# 프라이빗 레지스트리에서 풀
docker pull <registry_url>/<image>:<tag>Dockerfile 예시
FROM ubuntu:20.04
LABEL maintainer="[email protected]"
RUN apt-get update && apt-get install -y \
python3 \
python3-pip
COPY ./app /app
WORKDIR /app
EXPOSE 8080
CMD ["python3", "app.py"]도커 네트워크 관련 추가 명령어
# 새 네트워크 생성
docker network create my_network
# 컨테이너를 네트워크에 연결
docker network connect my_network container_name
# 컨테이너를 네트워크에서 분리
docker network disconnect my_network container_name
# 사용하지 않는 네트워크 정리
docker network prune도커 볼륨 고급 사용법
# 명명된 볼륨 생성
docker volume create my_volume
# 볼륨 정보 확인
docker volume inspect my_volume
# 여러 컨테이너에서 볼륨 공유
docker run -v my_volume:/data container1
docker run -v my_volume:/data container2
# 읽기 전용 볼륨 마운트
docker run -v my_volume:/data:ro container_name도커 컨테이너 관리
# 컨테이너 상태 확인
docker stats
# 컨테이너 프로세스 확인
docker top container_name
# 컨테이너 업데이트
docker update --memory 2G --cpus 2 container_name
# 컨테이너 이름 변경
docker rename old_name new_name질문 정리
-
인터넷이 안 되는 환경에서의 도커
- 프라이빗 레지스트리 구축 필요
- 이미지 저장/이동을 위한 절차 필요
- 커널 버전 호환성 고려 필요
-
MSA 구축 시 고려사항
- 서킷 브레이커 패턴 적용
- 컨테이너 간 네트워크 설정
- 로깅 및 모니터링 전략
참고 자료
- Docker 공식 문서: https://docs.docker.com/
- Docker Hub: https://hub.docker.com/
- Docker Compose 문서: https://docs.docker.com/compose/