Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AWS
- Java
- DevOps
- JWT
- 테스트 코드
- Redis
- swagger
- 멀티 모듈
- Intellij
- JPA
- 객체지향원칙
- springboot
- testcode
- MSA
- 어노테이션
- 아키텍처
- Kafka
- 프로그래머스
- spring boot
- trouble shooting
- querydls
- EC2
- Til
- docker
- 유효성 검사
- CI/CD
- aop
- algorithm
- rabbitmq
- Github Actions
Archives
- Today
- Total
개발노트
25.02.27 도커와 주요 명령어 본문
개요
도커에 대해 얕게만 알고있어서 간단하게 도커란 무엇인지 컨테이너가 무엇인지 정리하고
주요 명령어를 정리해본다
🐳 도커 ( Docker )
컨테이너 기반의 가상화 플랫폼으로, 애플리케이션과 그 실행 환경( 라이브러리, 종속성 등) 을 하나의 컨테이너로 패키징 하여 어디서든 실행할 수 있도록 해주는 도구이다.
컨테이너는 가상화에 비해 가볍고, OS에 독립적이며, 빠르게 배포 및 확장이 가능하다는 장점이 있다.
개발 과정에서 다른 라이브러리와 충돌하는 것을 방지가 하지위해 격리된 환경이 필요할 때, 완성된 서비스를 배포할 때,
배포 중인 서비스를 받아와 테스트 실행 할 때도 유용하다.
핵심 개념
이미지 ( Image )
- 컨테이너 실행을 위한 템플릿
- 애플리케이션과 필요한 실행 환경(운영체제, 라이브러리, 설정 등)을 포함한 불변(Immutable) 파일 시스템
- 여러 개의 컨테이너를 동일한 이미지로부터 생성 가능
- 도커 허브 ( Docker Hub)에서 다양한 공식 이미지를 받아와 사용이 가능하다
docker pull nginx # nginx 이미지를 다운로드
컨테이너( Container )
- 이미지를 실행한 독립된 실행 환경
- 컨테이너 내부는 이미지와 동일하지만, 상태 변경이 가능
- 프로세스 기반으로 실행되며, 필요할 때마다 빠르게 생성 및 삭제 가능
docker run -d --name my-nginx -p 8080:80 nginx
도커 허브(Docker Hub)
- 도커 이미지 저장소 ( Github처럼 도커 이미지를 공유하는 서비스)
- 공식 이미지 및 사용자 정의 이미지 업로드 가능
docker login # 도커 허브 로그인
docker tag my-app mydockerhub/my-app:v1 # 태그 설정
docker push mydockerhub/my-app:v1 # 도커 허브에 푸시
Dockerfile
- 도커 이미지를 생성하기 위한 설정 파일
- 컨테이너를 실행하기 위한 환경을 정의 (OS, 패키지 설치, 실행 명령어 등)
# 베이스 이미지 설정
FROM ubuntu:latest
# 패키지 설치
RUN apt-get update && apt-get install -y curl
# 기본 실행 명령어 설정
CMD ["echo", "Hello, Docker!"]
- 빌드 및 실행
🛠 도커 주요 명령어 정리
도커 기본 명령어
docker --version # 도커 버전 확인
docker info # 도커 시스템 정보 확인
docker help # 사용 가능한 도커 명렁어 목록 출력
docker <명령어> --help # 특정 명령어에 대한 도움말 출력
도커 이미지 ( Image ) 관련 명령어
docker images # 로컬에 저장된 이미지 목록 확인
docker pull <이미지명> # dockeHub에서 이미지 다운로드
docker search <이미지명> # dockerHub에서 이미지 검색
docker rmi <이미지ID> # 특정 이미지 삭제
docker rmi $(docker images -q) # 모든 이미지 삭제
docker tag <이미지ID> <저장소명:태그> # 이미지에 태그 추가
컨테이너 ( Container ) 실행 및 관리
docker run <이미지명> # 새로운 컨테이너 실행
docker run -d <이미지명> # 백그라운드 실행
docker run -it <이미지명> bash # 컨테이너 내부에서 터미널 실행
docker run --rm <이미지명> # 컨테이너 종류 자동 삭제
docker run -p 8080:80 <이미지명> # 포트 매핑하여 실행 ( 호스트:컨테이너 )
docker run --name <이름> <이미지명> # 특정 이름으로 컨테이너 실행
docker run -v /mydata:/data <이미지명> # 볼륨 연결하여 실행
예시 )
# 8080 호스트의 80 포트에 my-nginx 라는 이름으로 nginx 이미지를 백그라운드로 실행
docker run -d -p 8080:80 --name my-nginx nginx
# ubuntu 컨테이너에서 터미널 실행
docker run -it ubuntu bash
실행중인 컨테이너 관리
docker ps # 현재 실행 중인 컨테이너 목록 조회
docker ps -a # 모든 컨테이너 목록 조회
docker stop <컨테이너ID> # 컨테이너 중지
docker start <컨테이너ID> # 중지된 컨테이너 시작
docker restart <컨테이너ID> # 컨테이너 재시작
docker rm <컨테이너ID> # 컨테이너 삭제
docker rm $(docker ps -aq) # 모든 컨테이너 삭제
예시 )
docker stop my-nginx # my-nginx 컨테이너 중지
docker rm my-nginx # my-nginx 컨테이너 삭제
컨테이너 내부 접근
docker exec -it <컨테이너ID> bash # 컨테이너 내부 접속 (Linux)
docker exec -it <컨테이너ID> sh # Alpine Linux 환경 접근
docker attach <컨테이너ID> # 실행 중인 컨테이너에 연결
docker cp <컨테이너ID>:<경로> <호스트경로> # 컨테이너 내부 파일 복사
예시 )
docker exec -it my-container bash # my-container 내부 접근
docker cp my-container:/app/data.txt ./ # 컨테이너에서 파일 가져오기
컨테이너 상태 및 로그 확인
docker logs <컨테이너ID> # 컨테이너 로그 확인
docker logs -f <컨테이너ID> # 실시간 로그 출력
docker inspect <컨테이너ID> # 컨테이너 상세 정보 확인
docker stats # 실행 중인 컨테이너의 리소스 사용량 확인
docker top <컨테이너ID> # 컨테이너 내 실행 중인 프로세스 확인
docker diff <컨테이너ID> # 컨테이너 내부 변경 사항 확인
예시 )
docker logs my-container # 특정 컨테이너 로그 출력
docker stats # 모든 컨테이너의 CPU, 메모리 사용량 확인
도커 네트워크 관리
docker network ls # 네트워크 목록 확인
docker network create <네트워크명> # 사용자 정의 네트워크 생성
docker network inspect <네트워크명> # 네트워크 상세 정보 확인
docker network connect <네트워크명> <컨테이너명> # 컨테이너를 네트워크에 추가
docker network disconnect <네트워크명> <컨테이너명> # 네트워크 연결 해제
docker network rm <네트워크명> # 네트워크 삭제
예시 )
docker network create my-net # 사용자 네트워크 생성
docker network connect my-net my-container # 컨테이너 네트워크 연결
도커 볼륨 관리 ( 데이터 영구 저장 )
docker volume ls # 볼륨 목록 확인
docker volume create my-vol # 볼륨 생성
docker volume inspect my-vol # 특정 볼륨 정보 확인
docker volume rm my-vol # 특정 볼륨 삭제
docker run -v my-vol:/data ubuntu # 볼륨을 컨테이너에 마운트하여 실행
예시 )
docker volume create data-vol # 볼륨 생성
docker run -v data-vol:/app ubuntu # 컨테이너에서 볼륨 사용
Dockerfil을 사용한 이미지 빌드
docker build -t <이미지명> . # 현재 디렉토리의 Dockerfile을 기반으로 이미지 빌드
docker build -t my-app:v1 . # 특정 태그를 포함하여 빌드
docker history <이미지명> # 이미지 생성 내역 확인
예시 )
도커파일
# Ubuntu 기반 이미지
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
CMD ["echo", "Hello, Docker!"]
docker 명령어
docker build -t my-ubuntu .
docker run my-ubuntu
Docker Compose ( 여러 컨테이너 실행 )
docker-compose up -d # 모든 서비스 실행 (백그라운드)
docker-compose down # 모든 서비스 중지 및 컨테이너 삭제
docker-compose logs # 서비스 로그 출력
docker-compose ps # 실행 중인 컨테이너 확인
예시 )
docker-compose.yml
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: postgres
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
docker 명령어
docker-compose up -d # 웹 + DB 컨테이너 실행
docker-compose down # 컨테이너 정리
자주 사용할 것 같은 명령어들을 간단하게 정리해보았다.
실제로 사용해본적이 별로 없어서 간단한 예제로 실습하면서 익혀봐야겠다.
'DevOps' 카테고리의 다른 글
25.03.31 Spring Boot Acturator , Prometheus, Grafana (0) | 2025.03.31 |
---|---|
25.03.30 모니터링 시스템 (0) | 2025.03.30 |
Github Actions 와 CI/CD 란? (0) | 2025.03.04 |
25.03.03 GitHub Actions(CI / CD)와 Docker로 AWS에 자동 배포하기 (2) (0) | 2025.03.03 |
25.02.28 GitHub Actions(CI / CD)와 Docker로 AWS에 자동 배포하기 (1) (0) | 2025.02.28 |