더보기
67일 차 회고.
오늘부터 새로운 단위에 들어갔고, 오늘은 Docker를 배웠다. 기본적인 내용을 배웠지만, 새로운 내용을 배우기도 했고, 궁금했던 내용이라 수업이 재밌었다.
1. Docker
1-1. Docker
Docker 설치 확인
docker --version # Docker 버전 확인
wsl -l -v # WSL(Windows Subsystem for Linux) 목록
wsl -d docker-desktop busybox # WSL 환경 내 BusyBox Shell 진입
Container
- 가상의 컴퓨터처럼 동작하는 환경
- 운영체제 내에 논리적으로 분리된 공간을 만들고, 그 안에 애플리케이션 실행에 필요한 라이브러리와 구성 요소를 모두 포함해 별도의 서버처럼 사용할 수 있다.
- Server-Client 아키텍처
- Client → Internet → Server
- 고객이 감소해도 물리적인 서버를 계속 유지해야 한다는 비효율적인 문제가 발생한다.
- Container 개념 등장
- Container 발전 과정
- Traditional Deployment
- 하나의 물리 서버에 여러 애플리케이션을 설치하여 운영한다.
- 자원 충돌과 관리 문제가 발생한다.
- Virtualized Deployment
- 가상 머신(VM)을 이용하여 각 애플리케이션을 분리한다.
- Guest OS가 필요하기 때문에 무겁고 느리다.
- Container Deployment
- Guest OS를 제거하여 가볍고 빠르다.
- OS 수준에서 격리된 컨테이너 환경에서 실행된다.
- 자원 효율성과 배포 속도가 향상된다.
- Kubernetes Deployment
- 컨테이너 관리 시스템(Container Orchestration System)
- 자동화된 배포, 확장, 로드밸런싱이 가능하다.
- Traditional Deployment
Docker
- 컨테이너 기반의 애플리케이션을 신속하게 구축, 테스트, 배포할 수 있는 소프트웨어 플랫폼
- Docker 구성 요소
- Docker Client
- 사용자 인터페이스
- Docker Host에 명령을 전달한다.
- ex. Windows PowerShell
- Docker Host
- 실제 Docker가 실행되는 환경
- 컨테이너와 이미지를 관리한다.
- Docker Daemon: 도커 엔진
- ex. Docker Desktop
- Registry(Docker Hub)
- 외부(Remote) 이미지 저장소
- 필요한 이미지를 pull 하거나 push 할 수 있다.
- Docker Client
1-2. Docker 기본명령어
Docker Image
docker search ubuntu # Docker Hub에서 'ubuntu' 이미지 검색
docker pull ubuntu:latest # Docker Hub에서 'ubuntu' 최신버전 이미지 다운로드
docker images # Docker Image 목록 확인
"""
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 602eb6fb314b 7 days ago 78.1MB
"""
run
- 컨테이너 실행
- 옵션
- -i: Bash 명령 입력
- -t: Bash를 사용하기 위한 옵션
# docker run -i -t --name <Container Name> ubuntu /bin/bash
docker run -i -t --name ubuntu-hello ubuntu /bin/bash # Bash Shell 진입
ls
- 내부 파일 목록 확인
ls
# bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
ps
- 실행 중인 컨테이너 목록
docker ps
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
113771b89196 ubuntu "/bin/bash" 7 minutes ago Up 7 minutes ubuntu-hello
"""
stop
- 컨테이너 중지
# docker stop <Container Name>
docker stop ubuntu-hello
docker ps -a
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
113771b89196 ubuntu "/bin/bash" 15 minutes ago Exited (137) About a minute ago ubuntu-hello
"""
start
- 컨테이너 실행
# docker start <Container Name>
docker start ubuntu-hello
docker ps
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
113771b89196 ubuntu "/bin/bash" 17 minutes ago Up 3 seconds ubuntu-hello
"""
restart
- 컨테이너 재실행
# docker restart <Container Name>
docker restart ubuntu-hello
docker ps
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
113771b89196 ubuntu "/bin/bash" 19 minutes ago Up 1 seconds ubuntu-hello
"""
attach
- 컨테이너 접속
# docker attach <Container Name>
docker attach ubuntu-hello
exec
- 외부에서 명령 실행
# docker exec <Container Name> <Command>
docker exec ubuntu-hello ls
"""
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
"""
rm
- 컨테이너 삭제
# docker rm <Container Name>
docker rm ubuntu-hello
docker ps -a
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
rmi
- 이미지 삭제
# docker rmi <Image Name>:<Tag>
docker images
"""
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 602eb6fb314b 7 days ago 78.1MB
"""
docker rmi ubuntu:latest
docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
1-3. Dockerfile
Dockerfile
- 컨테이너에 설치해야 하는 패키지, 소스코드, 환경변수, 실행 명령어 등을 기록한 스크립트 파일
- Dockerfile을 기반으로 이미지를 만들 수 있다.
Dockerfile 작성
- FROM
- 사용할 베이스 이미지 지정
- LABEL
- 이미지에 메타데이터 추가
- RUN
- 명령어 실행
- apt-get update && apt-get install -y을 함께 실행한다.
- WORKDIR
- 작업 디렉토리 지정
- 해당 디렉토리가 없으면 새로 생성된다.
- 작업 디렉토리 지정
- EXPOSE
- 이미지에서 열어줄 포트 지정
- USER
- 컨테이너 실행 시 사용할 계정 설정
- ENV
- 환경 변수 설정
- COPY / ADD
- 로컬 파일을 이미지로 복상
- ADD는 압축 파일 및 URL도 지원한다.
- CMD / ENTRYPOINT
- 컨테이너를 생성 시 실행할 명령어
- ENTRYPOINT 명령문은 컨테이너를 시작할 때마다 실행된다.
# Base Image (Ubuntu 18.04)
FROM ubuntu:18.04
# Install Apache Web Server
RUN apt-get update && apt-get install -y apache2
# Copy File
COPY hello.html /var/www/html/hello.html
# Working Directory
WORKDIR /var/www/html
# Port Documentation
EXPOSE 80
# Command to run when the container starts
CMD ["apachectl", "-D", "FOREGROUND"]
Dockerfile Build
# docker build -t <Image Name>:<Image Version> <Dockerfile Path>
docker build -t apache-image .
docker images
"""
REPOSITORY TAG IMAGE ID CREATED SIZE
apache-image latest b311678a2f27 About a minute ago 205MB
"""
Container 생성
docker run -d -p 80:80 --name apache-container apache-image
docker ps
"""
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cff286c11605 apache-image "apachectl -D FOREGR…" 18 seconds ago Up 17 seconds 0.0.0.0:80->80/tcp apache-container
"""
Bash Shell 접속
docker exec -it apache-container /bin/bash
Dockerfile 업데이트
- Dockerfile를 업데이트한 경우, 기존에 존재하는 Image와 Container를 삭제한 후에 빌드한다.
docker stop apache-container # Container 정지
docker rm apache-container # Container 삭제
docker rmi apache-image # Image 삭제
docker build -t apache-image . # Dockerfile build
docker run -d -p 80:80 --name apache-container apache-image # Container 생성
1-4. Mount & Docker Compose
Mount
- 호스트의 파일을 컨테이너와 공유한다.
- 로컬에서 파일을 수정하면 컨테이너에도 즉시 반영된다.
docker search apache2
docker pull ubuntu/apache2
docker run -d --name apache-container `
-p 80:80 `
-v C:\dev\docker\common:/var/www/html `
ubuntu/apache2
Docker Compose
# docker-compose.yml
version: "3"
services:
apache2:
image: ubuntu/apache2:latest
container_name: apache-container
volumes:
- ./common:/var/www/html
ports:
- "80:80"
docker-compose up -d
'SK네트웍스 Family AI캠프 10기 > Daily 회고' 카테고리의 다른 글
| 69일차. Linux (0) | 2025.04.18 |
|---|---|
| 68일차. Docker (0) | 2025.04.17 |
| 65-66일차. 단위 프로젝트(LLM(초거대언어모델)) (0) | 2025.04.15 |
| 64일차. Modular RAG - LangGraph / MCP (0) | 2025.04.11 |
| 63일차. Modular RAG - LangSmith & Tools (0) | 2025.04.10 |