본문 바로가기
CICD

Docker와 DockerFile

by 장중앙 2023. 4. 8.

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 등 명령어가 있음

[Docker] Dockerfile 구성 및 빌드

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를 업로드 및 다운로드 가능한 저장소

# 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

댓글