Docker
애플리케이션 환경에 구애 받지 않고 실행하는 기술
코드 전달 및 운영 환경 표준화에 장점
Linux 기반의 OS에서만 동작이 가능
VM과는 다르게 하드웨어까지 가상화하지 않음 → 가벼움
window환경에서 docker 사용 시 제어판 -> 프로그램 켜기/끄기 -> HyperV 체크 작업 권장
Docker와 VM의 차이
게스트OS의 유무
VM에는 위에서 언급한 Guest OS가 깔리지만 도커 컨테이너에는 Guest OS를 설치하지 않는다.
- 자원의 효율성 측면에서 차이가 난다.
- Docker의 경우 Host os를 공유
VM는 하나씩 늘 때마다 OS를 위한 자원을 할당하지만 도커는 어플리케이션을 구동하는데 필요한 패키지로만 구성하여 컨테이너를 구동
Dockerfile
Docker Image를 생성하기 위한 스크립트
- 일반적으로 Dockerfile은 프로젝트 최상위 디렉토리에 위치
- “Dockerfile”이란 파일명으로 생성해야함(확장자 X)
- 작성한 스크립트를 빌드하여 Docker Image 생성
Docker file의 기본적인 예시
FROM openjdk:11\\
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"] #Java 프로그램 실행
FROM : 기반 이미지
ARG : 컨테이너 내부에서 사용할 번수를 지정
COPY : ARG로 선언한 변수 JAR_FILE을 컨테이너 내부의 app.jar로 복사
ENTRYPOINT : 컨테이너가 시작되었을 때 실행할 스크립트
이외에 VOLUME 등 명령어가 있음
Dockerfile을 이용한 이미지 생성
docker build 명령어를 사용하여 docker 이미지 생성 가능
docker build -t [이미지 명]:[태그명] [Dockerfile 위치(일반적으로 프로젝트 최상위 디렉토리)]
만들어진 이미지는 docker image ls 명령어로 확인 가능
이미지를 이용한 컨테이너 생성
docker run 명령어로 컨테이너 생성 가능
# 명령어 인자의 경우 docker 컨테이너를 생성하면서 실행할 shell script
docker run ([옵션]) [이미지명] ([명령어]) ([인자])
docker run 명령어 옵션
-it | 컨테이너의 표준 입력(stdin)을 활성화 -i -t 주로 같이 사용 |
-d | 컨테이너를 백그라운드에 실행 |
--name | 컨테이너 이름 지정 |
-p | 포트포워징 80:8080 으로 생성 시, 8888로 접속하면 컨테이너 내부 80포트로 자동 접속 |
-v | 볼륨 마운트 |
--restart | 컨테이너 종료 시, 재시작 정챙 --restart=”always” → 항상 재시작 --restart=”on-failure” → 정상종료가 아닐때 재시작 |
Docker Hub
만들어진 docker image를 업로드 및 다운로드 가능한 저장소
- cmd내에 로그인 필요 (docker hub회원가입)
# docker hub 로그인
docker login
## docker image 업로드 ##
# docker image에 태그 부착
docker tag [이미지명] [docker hub id(최상위 리포지토리)]/[리포지토리 명]:[태그명]
# 업로드
docker push [docker hub id]/[리포지토리 명]:[태그명]
## docker image 다운로드 ##
docker pull [docker hub id(최상위 리포지토리)]/[리포지토리 명]:[태그명]
'CICD' 카테고리의 다른 글
jenkins container - Vue 프로젝트 EC2 배포 (0) | 2024.03.03 |
---|---|
docker-compose (0) | 2023.04.08 |
[Kubernetes] Autoscaler(HPA) (0) | 2022.02.17 |
[Kubernetes] Ingress(Controller) (0) | 2022.02.08 |
[Kubernetes] StatefulSet(Controller) (0) | 2022.02.08 |
댓글