[DevOps] Docker 실습

illilili·2025년 6월 16일

DevOps

목록 보기
1/12
post-thumbnail

✅ Docker 이미지와 컨테이너

🔹 Docker 이미지

  • ISO 이미지처럼 컨테이너 생성을 위한 템플릿

  • 여러 읽기 전용 계층으로 구성됨 (layered file system)

  • 컨테이너 생성 시 이미지 기반으로 읽기 전용 사용

  • 형식: [저장소명]/[이미지명]:[태그]

  • 예: apexacme/ubuntu:18.04, docker.io/library/nginx:latest

  • library는 도커허브 공식이미지 Namespace로, 여기에 사용자 이름이 위치

  • Private 이미지 저장소(Docker, harbor)를 설치하여 운영가능

🔹 Docker 컨테이너

  • Docker 이미지 기반으로 생성되는 실행 단위
  • 이미지 + R/W 계층 (컨테이너에서 변경되는 데이터 저장)
  • 격리된 파일시스템, 네트워크, 프로세스를 가진 독립 환경

✅ Docker 아키텍처 - 계층화 구조

  • 이미지: 읽기 전용 여러 레이어
  • 컨테이너: 이미지 위에 R/W 레이어 추가해 실행 중 데이터 저장

🔹 Dockerfile 예시 (이미지 정의 파일)

FROM openjdk:8-jdk-alpine
RUN apk --no-cache add tzdata && cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime
WORKDIR /app
COPY hello.jar hello.jar
COPY entrypoint.sh run.sh
RUN chmod 774 run.sh
ENV PROFILE=local
ENTRYPOINT ["./run.sh"]
  • FROM: 베이스 이미지
  • RUN: 빌드 시 명령어 실행
  • WORKDIR: 작업 디렉토리 설정
  • COPY: 파일 복사
  • ENV: 환경변수 지정
  • ENTRYPOINT: 컨테이너 실행 시 명령어 지정

✅ Docker 명령어

🔹 이미지 관련 명령어

  • 이미지 목록 확인: docker images
  • 이미지 다운로드: docker pull [이미지:태그]
  • 이미지 삭제: docker image rm [ID] 또는 -f
  • 전체 이미지 삭제: docker image rm $(docker images -q)

🔹 컨테이너 관련 명령어

  • 컨테이너 실행: docker run [옵션] [이미지] [명령어]
  • 실행 중인 컨테이너 확인: docker ps, 정지 포함: docker ps -a
  • 컨테이너 시작/재시작/종료: docker start|restart|stop [이름]
  • 컨테이너 삭제: docker container rm [ID]
  • 전체 삭제: docker container rm $(docker ps -a -q)

🔹 이미지 빌드 및 푸시

  • 이미지 빌드: docker build -t [이미지:태그] .
  • Docker Hub 로그인: docker login
  • 이미지 푸시: docker push [저장소명/이미지명:태그]
  • Docker Hub : https://hub.docker.com

✅ 도커 실행

🔹 nginx 이미지 실행 및 확인

docker image pull nginx:latest
docker run --name my-nginx -d -p 8080:80 nginx:latest
docker run --name my-new-nginx -d -p 8081:80 nginx:latest
docker container ls  # = docker ps

  • 브라우저 또는 http GET http://localhost:8080, http GET http://localhost:8081로 서비스 확인 가능

🔹 컨테이너 및 이미지 삭제

  • 삭제하려는 이미지를 사용하는 컨테이너 정리 후 삭제
docker container stop my-nginx
docker container stop my-new-nginx
docker container rm my-nginx
docker container rm my-new-nginx
docker image rm nginx:latest
  • 전체 삭제: docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)

🔹 나만의 이미지 만들기

  1. index.html 생성 (Cloud IDE):
<html>
<body>
<center>
<img src="https://raw.githubusercontent.com/acmexii/demo/master/materials/smile.jpg">
<h1> Hi~ My name is Hong Gil-Dong...~~~ </h1>
</center>
</body>
</html>
  1. Dockerfile 생성:
FROM nginx
COPY index.html /usr/share/nginx/html/
  1. 이미지 빌드 및 푸시
docker build -t [DockerHub ID]/welcome:v1 .
docker login
docker push [DockerHub ID]/welcome:v1

  1. 이미지 삭제 후 다시 실행
docker image rm [DockerHub ID]/welcome:v1
docker run --name=welcome -d -p 8080:80 [DockerHub ID]/welcome:v1


🔹 자바 애플리케이션 도커화

  1. Maven 빌드
cd inventory
mvn package -B -Dmaven.test.skip=true
java -jar target/inventory-0.0.1-SNAPSHOT.jar  # 테스트 실행
  1. Docker 빌드 및 푸시
docker build -t [dockerhub ID]/inventory:[YYYYMMDD] .
docker push [dockerhub ID]/inventory:[YYYYMMDD]
docker run [dockerhub ID]/inventory:[YYYYMMDD]


profile
코코딩딩

0개의 댓글