Docker 이미지 빌드
docker build -t 이미지이름:태그 Dockerfile경로
예시코드
docker build -t myapp:1.0
-t 옵션 : 이미지에 이름과 태그 지정
. (현재 디렉토리) : Dockerfile이 있는 경로
Docker 컨테이너 실행
docker run -p 호스트포트:컨테이너포트 이미지이름:태그
예시코드
docker run -p 8000:8000 myapp:1.0
-p 8000:8000 : 호스트의 8000번 포트와 컨테이너의 8000번 포트 연결
myapp:1.0 : 실행할 도커 이미지 지정
*빌드 과정
- Dockerfile 읽기
작성된 Dockerfile을 기반으로 명령어 실행 - 베이스 이미지 다운로드
정의된 FROM 이미지가 로컬에 없으면 도커 허브에서 다운로드 - 명령어 실행
Dockerfile의 각 명령어를 순차적으로 실행 - 레이어 캐싱
이전에 실행된 단계가 변경되지 않았다면 해당 단계를 캐시에서 가져옴 - 이미지 생성
최종적으로 완성된 도커 이미지 생성
생성된 이미지 확인
docker images
도커 이미지 관리
이미지 삭제
docker rmi 이미지 이름 또는 ID
이미지 태그 변경
docker tag 기존 이미지 이름:기존 태그 새 이미지 이름:새태그
예시 코드
docker tag myapp:1.0 myapp:latest
- Docker는 프로젝트 코드가 변경될 경우, 새로운 이미지를 빌드해야 함
- COPY 명령어는 해당 시점의 코드 내용을 기반으로 이미지를 생성
- 보통 태그(tag)를 활용하여 버전을 관리(v1, latest 등)
이미지 저장 및 로드
이미지를 파일로 저장
docker save -o myapp.tar myapp:1.0
파일에서 이미지 로드
docker lead -i myapp.tr
왜 Dockerfile이 아니라 이미지를 공유할까?
• Dockerfile을 공유하면 새롭게 빌드 과정이 필요하지만, 이미지를 공유하면 바로 실행 가능.
• 보안 문제 : Dockerfile은 소스 코드가 노출될 가능성이 있지만, 이미지 자체는 내부를 확인하기 어렵다.
빌드 컨텍스트 관리
COPY로 불필요한 파일을 복사하지 않도록 .dockerignore 파일 설정
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
myapp | 1.0 | a1b2c3d4e5f6 | 5 minutes ago | 123MB |
python | 3.10-slim | d1e2f3g4h5i6 | 2 days ago | 23MB |
REPOSITORY : 이미지 이름
TAG : 이미지 태그
IMAGE ID : 이미지의 고유 ID
SIZE : 이미지 크기
-p 8000:8000 : 호스트와 컨테이너의 포트 연결
myapp:1.0 : 실행할 이미지 지정
*Docker Tags와 Image ID
- 같은 파일로 만든 Docker 이미지는 같은 IMAGE ID를 가짐
- 다른 파일로 만든 경우, IMAGE ID가 달라짐
- digest 개념을 활용하여 Git처럼 버전 관리 가능
- 레이어 구조 : 최상단 레이어만 변경되므로 캐시를 활용해 빌드 속도 최적화
Docker 컨테이너 관리
실행 중인 컨테이너 확인
docker ps
모든 컨테이너 확인 (중지된 컨테이너 포함)
docker ps -a
실행 중인 컨테이너 중지
docker stop 컨테이너ID 또는 이름
컨테이너 삭제
docker rm 컨테이너ID 또는 이름
사용하지 않는 모든 컨테이너 삭제
docker system prune
컨테이너 내부 포트와 호스트 시스템의 포트 연결 ( 포트 매핑)
p 호스트 포트:컨테이너 포트
예시코드
docker run -d -p 8000:8000 myapp:1.0
컨테이너를 백그라운드에서 실행, 호스트의 8000번 포트-컨테이너의 8000번 포트 연결
*-d 옵션을 추가하면 터미널을 점유하지 않고 백그라운드에서 실행됨
docker logs 컨테이너ID | 컨테이너 실행 로그 확인 |
docker exec -it 컨테이너ID bash | 실행 중인 컨테이너 내부 접속 |
Docker Hub에 이미지 푸시
1. 로그인
docker login
2. 이미지 빌드
docker build -t 유저이름/이미지이름:태그 .
3. Docker Hub로 푸시
docker push 유저이름/이미지이름:태그
컨테이너 확인 및 종료
실행 중인 컨테이너 목록 확인
docker ps
컨테이너 중지
docker stop 컨테이너ID 또는 이름
'Docker' 카테고리의 다른 글
Docker - Compose (0) | 2025.02.19 |
---|---|
Docker (0) | 2024.12.24 |
Virtual Machines(VMs) / Containers (2) | 2024.12.15 |