본문 바로가기

WEB개발/Cloud

[Docker] 도커(docker)

  1. 효율적인 배포와 확장:
    • 도커는 컨테이너화 기술을 사용하여 애플리케이션과 모든 종속성을 포함하는 가상 환경을 만듭니다. 이는 배포가 훨씬 빠르고 간단해지며, 확장성이 뛰어납니다.
  2. 환경 일관성 유지:
    • 도커 컨테이너는 모든 종속성과 환경 설정을 포함하기 때문에, 개발, 테스트, 스테이징, 프로덕션 등 모든 환경에서 동일한 환경을 유지할 수 있습니다.
  3. 리소스 분리와 격리:
    • 도커는 호스트 시스템에서 각 컨테이너를 격리시켜 서로 영향을 주지 않고 독립적으로 실행할 수 있도록 합니다. 이는 성능을 최적화하고 보안을 강화하는 데 도움이 됩니다.
  4. 유연한 개발 및 테스트 환경:
    • 도커는 로컬 환경에서 개발 및 테스트를 쉽게 할 수 있도록 도와줍니다. 개발 환경을 컨테이너로 패키지하고 간단히 공유할 수 있으며, 다양한 환경에서 실행할 수 있습니다.
  5. 마이크로서비스 아키텍처:
    • 도커는 각 마이크로서비스를 독립적인 컨테이너로 실행하여 애플리케이션을 더 작고 모듈화된 형태로 유지할 수 있도록 도와줍니다.
  6. 클라우드 네이티브 애플리케이션 개발:
    • 클라우드 네이티브 애플리케이션을 개발하고 운영하는 데 필수적인 기술로 도커가 활용됩니다. 컨테이너는 클라우드 환경에서의 확장성, 이식성, 관리 용이성을 높여줍니다.

 

 

 

구성

 

 

1. 도커 (docker)

 도커(Docker)는 컨테이너 기반 가상화 플랫폼입니다. 컨테이너는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 소프트웨어 패키지입니다. 도커는 이러한 컨테이너를 만들고 관리할 수 있는 도구들을 제공하여 응용 프로그램의 배포와 실행을 단순화합니다.
 
 

2. 컨테이너 

 도커 컨테이너는 가상화된 환경을 제공하여 응용 프로그램을 실행하는 소프트웨어 패키지입니다. 이러한 컨테이너는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하며, 호스트 시스템과는 격리된 환경에서 실행됩니다. 이러한 격리는 응용 프로그램 간의 충돌을 방지하고 의존성 충돌을 해결하는 데 도움이 됩니다.

 

컨테이너는 베이스 환경의 OS를 공유하면서 필요한 프로세스만 격리하는 방식으로, 커널을 공유하기 때문에 호스트 OS의 기능을 모두 사용할 수 있습니다. 그렇기 때문에 컨테이너 위에서는 호스트 OS와 다른 OS를 구동할 수 없습니다.

 

 

 

3. 이미지레이어, 컨테이너레이어

 
  1. 이미지 레이어 (Image Layer):
    • 이미지 레이어는 도커 컨테이너를 생성하는 데 사용되는 템플릿입니다.
    • 각 이미지 레이어는 응용 프로그램 실행에 필요한 파일 및 설정과 같은 특정한 구성 요소를 포함합니다.
    • 이미지 레이어는 여러 개의 읽기 전용 레이어로 구성됩니다. 이 레이어들은 상위에서 하위로 순차적으로 적용됩니다. 각 레이어는 기본적으로 이전 레이어의 변경사항만을 저장합니다. 따라서 동일한 레이어를 공유하는 이미지는 디스크 공간을 절약할 수 있습니다.
    • 이러한 이미지 레이어들은 도커 허브(Docker Hub)와 같은 이미지 저장소에 저장되어 다른 사용자들이 공유하고 사용할 수 있습니다.

 

  1. 컨테이너 레이어 (Container Layer):
    • 컨테이너 레이어는 실행 중인 도커 컨테이너의 상태를 포함합니다.
    • 각 컨테이너는 이미지 레이어 위에 생성되며, 컨테이너 레이어에는 응용 프로그램이 실행되는 동안 생성되는 변경 사항이 저장됩니다.
    • 이 레이어는 읽기/쓰기 가능한 레이어로, 컨테이너가 실행 중에 변경된 파일이나 설정을 저장합니다. 이는 컨테이너가 종료되고 다시 시작되어도 변경 사항이 유지될 수 있도록 합니다.
    • 컨테이너 레이어는 컨테이너가 종료되면 보존되지 않고 제거됩니다. 따라서 컨테이너의 상태는 컨테이너 레이어에서만 유지되며, 이미지 레이어는 컨테이너가 종료되더라도 변하지 않습니다.

 

docker inspect ${image name}

 

이미지레이어

 

 

 

명령어

 

docker  {대상}  {커맨드}  {옵션}  {인자}
 
대상
  • container
  • image
  • volume
  • network

 

docker [command 대상] --help
 

 

 
대상 - continer

 

커맨드 설명 주요옵션
start 컨테이너 실행 -i
stop 컨테이너 정지  
create 컨테이너 생성 --name, -e, -p, -v
run 이미지를 내려받고 컨테이너를 생성 및 실행 --name, -e, -p, -v, -d, -i, -t
rm 컨터이너 삭제 -f, -v
exec 컨테이너에서 프로그램실행 -i, -t
ls 컨테이너 목록 출력 -a
cp 컨테이너와 호스트 간 파일 복사  
commit 컨테이너를 이미지로 변환  
 
 

대상 - image

 

커맨드 설명 주요옵션
pull 이미지를 내려받음  
rm 이미지 삭제  
ls 가지고 있는 이미지 목록을 출력  
build 이미지 생성  
 

 

옵션

--name : 컨테이너 이름
-p (port) : 포트 번호지정 
-v (volume) : 볼륨 설정
-e (enviroment) : 환경변수 설정
-d  (demon) : 백그라운드 실행
-i  (interative) : 컨테이너에 터미널 연결
-t (tag?) : 특수 키를 사용가능하게 설정

 

 

 

도커 컨테이너 포트

: 컨테이너는 가상 IP주소를 할당받기 때문에 외부에서 컨테이너 접근은 불가능하다. 포트 포워딩을 통해 외부와의 연결통로를 뚫어야 합니다.

docker run -p 8080:80 httpd

 

 

 

 

 


 

도커허브에서 이미지 pull

https://hub.docker.com/

docker pull mariadb:10.6

docker pull redis

 

 

services:
    aroundhub_db:
        image: mariadb:10.6
        container_name: db_master
        restart: always
        environment:
            MARIADB_ROOT_PASSWORD: woo
            MARIADB_DATABASE: woo
            MARIADB_USER: woo
            MARIADB_PASSWORD: woo

        #volumes:
        #    - ./master_db/data:/var/lib/mysql
        #    - ./master_db/config/:etc/mysql/conf.d
        ports:
            - "3308:3306"
    aroundhub_redis:
        image: expert/ledisdb:6.6.4
        restart: always
        ports:
            - "6380:6379"

 

 

docker-compose로 실행된 컨테이너

 

 

 

 

도커 커밋

docker commit ${container_name} ${image_name}

 

 

 

 

 

 

도커 이미지/컨테이너 파일로 저장

도커 이미지 파일은 일반적으로 Docker Hub와 같은 이미지 레지스트리에 업로드되거나, 로컬 머신의 파일 시스템에 저장됩니다. 도커 이미지는 레이어로 구성되어 있으며, 각 레이어는 파일 시스템의 변경 사항을 나타냅니다.

 

docker save -o {저장할파일명.tar} {이미지이름:태그}
docker save -o jenkins_image.tar jenkins/jenkins:lts

docker load -i {이미지파일.tar}
docker load -i jenkins_image.tar

 

 

 

 

 
docker import {파일명.tar} {이미지명:태그}

docker export {컨테이너명} > {파일명.tar}

 

 

 

 

도커 SpringBoot 프로젝트 실행

 

 

Dockerfile

 

FROM openjdk:17.0.1-jdk

WORKDIR /app

COPY ./springboot_test.jar springboot_test.jar
ENV PROVILE="DIV"

ENTRYPOINT java -jar -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true  springboot_test.jar --spring.profiles.active=$PROFILE

 

 

이미지생성

 

 

 

 


 

 

 

JVM 메모리 옵션

 

  • InitialRAMPercentage: JVM이 시작될 때 사용할 총 시스템 RAM의 백분율을 설정합니다. 이것은 초기 힙 크기를 결정하는 데 사용됩니다. 예를 들어, -XX:InitialRAMPercentage=50은 시스템의 총 RAM의 50%를 초기 힙 크기로 사용하도록 지시합니다.

  • MinRAMPercentage: JVM이 사용할 수 있는 최소한의 총 시스템 RAM의 백분율을 설정합니다. 이는 힙 크기가 축소되는 경우에만 사용됩니다. 예를 들어, -XX:MinRAMPercentage=10은 시스템의 총 RAM이 10% 미만으로 내려가지 않도록 합니다.

  • MaxRAMPercentage: JVM이 사용할 수 있는 최대 총 시스템 RAM의 백분율을 설정합니다. 이것은 힙 크기가 확장되는 경우에만 사용됩니다. 예를 들어, -XX:MaxRAMPercentage=80은 JVM이 시스템의 총 RAM의 80%까지 사용할 수 있도록 합니다.

 

FROM openjdk:11

# JVM 옵션 설정
ENV JAVA_OPTS="-XX:InitialRAMPercentage=40 -XX:MinRAMPercentage=20 -XX:MaxRAMPercentage=80"

# 애플리케이션 실행
CMD [ "java", "-jar", "application.jar" ]

 

 

 

 

 

 

 


https://yoo-dev.tistory.com/17

 

 

[Docker] Docker Volume

Docker Volumes 도커는 각 컨테이너마다 독자적인 저장소(Volume)을 가진다. 컨테이너 내부에 저장되는 데이터는 컨테이너가 삭제되었을 경우 함께 사라진다. 이를 보완하기 위해 도커는 데이터의 영

yoo-dev.tistory.com

 

'WEB개발 > Cloud' 카테고리의 다른 글

[Docker] Volume  (0) 2025.03.17