개념정리
도커 파일
도커 이미지를 빌드하기 위한 스크립트나 지시문을 포함한 텍스트 문서(FROM, RUN 등)

도커 이미지
도커 이미지는 컨테이너를 실행하기 위한 템플릿
docker images 명령어를 터미널에 치면 확인 할 수 있다.

도커 컨테이너
도커 컨테이너는 도커 이미지를 기반으로 실행되는 실제 실행 인스턴스, 이미지를 활성화 한것
docker ps 또는 docker ps -a 명령어를 터미널에 치면 확인 할 수 있다.


실제 우리가 실행하려는 앱 또는 응용프로그램은 하나의 도커 컨테이너를 실행해서 사용하는 것이고
컨테이너를 실행하기 위해 도커파일을 작성하고 도커파일 빌드를 통해 이미지로 생성해주고 도커 헙에 버전별로 저장(백업)해두고 서버 컴퓨터에서 도커 컨테이너를 실행하면 되는 것이다.
작업 순서
도커 파일 작성 > 이미지 빌드(도커 헙 레포지토리와 동일하게, 태깅으로 버전 관리) > 도커 헙 푸시(업로드) > 도커 컨테이너 실행
명령어 정리
https://hub.docker.com/layers/tensorflow/tensorflow/2.10.1/images/sha256-b633084418ec697b275d6cee7da679a76bf8626bfb18188d6a44cdce3482047f?context=explore
hub.docker.com
# 도커 이미지 풀
docker pull tensorflow/tensorflow:2.10.0
# 도커 이미지 빌드
docker build -t namespace/repository:v0.0.1 .
- 도커 이미지 빌드 할때에는 도커헙에 있는 namespace와 레포지토리와 동일하게 작업한다.
- 버전 규칙은 아래의 블로그를 참고했습니다.
- 버전 옆에 띄어쓰기 점 부분은 꼭 빼놓지 않기
| 옵션 | 설명 | 사용법 |
| -t, --tag | 도커 이미지를 태그 지정 | docker build -t my_image:latest . |
| --build-arg | 도커파일에 정의된 빌드 아규먼트를 설정 | docker build --build-arg HTTP_PROXY=http://proxy.example.com . |
| -f, --file | 사용할 도커파일을 지정 | docker build -f path/to/Dockerfile . |
| --no-cache | 이미지 빌드 시 캐시를 사용하지 않을때 | docker build --no-cache -t my_image:latest . |
| --pull | 항상 새로 이미지를 풀 | docker build --pull -t my_image:latest . |
| --compress | 빌드 컨텍스트를 gzip으로 압축 | docker build --compress -t my_image:latest . |
| --force-rm | (사용 주의) 중간 컨테이너를 강제로 삭제 | docker build --force-rm -t my_image:latest . |
| --rm | 성공적으로 빌드된 후 중간 컨테이너를 제거 | docker build --rm -t my_image:latest . |
| --squash | 최종 이미지를 하나의 새로운 레이어로 스쿼시 | docker build --squash -t my_image:latest . |
| --label | 빌드한 이미지에 메타데이터(label)를 추가 | docker build --label version="1.0" --label maintainer="me@example.com" . |
| --platform | 정 플랫폼(예: linux/amd64, linux/arm64)용 이미지를 빌드 | docker build --platform linux/amd64 -t my_image:latest . |
| --network | 빌드 중 사용할 네트워크 모드를 지정 | docker build --network host -t my_image:latest . |
# 도커 이미지 실행
docker run -it tensorflow/tensorflow:2.10.0
| 옵션 | 설명 | 사용법 |
| -i, --interactive | 컨테이너를 인터랙티브 모드로 실행 | docker run -i tensorflow/tensorflow:2.10.0 |
| -t, --tty | 가상 터미널을 할당, 주로 -i 옵션과 함께 사용 | docker run -it tensorflow/tensorflow:2.10.0 |
| -d, --detach | 컨테이너를 백그라운드에서 실행 | docker run -d tensorflow/tensorflow:2.10.0 |
| --name | 컨테이너에 이름을 지정 | docker run --name my_tensorflow_container tensorflow/tensorflow:2.10.0 |
| -e, --env | 환경 변수를 설정 | docker run -e MY_ENV_VAR=value tensorflow/tensorflow:2.10.0 |
| -p, --publish | 호스트와 컨테이너 간의 포트를 매핑 | docker run -p 8080:80 tensorflow/tensorflow:2.10.0 |
| -v, --volume | 호스트의 디렉토리를 컨테이너에 마운트 | docker run -v /host/path:/container/path tensorflow/tensorflow:2.10.0 |
| --rm | 컨테이너가 종료되면 자동으로 삭제 | docker run --rm tensorflow/tensorflow:2.10.0 |
| --network | 컨테이너가 사용할 네트워크 모드를 지정 | docker run --network host tensorflow/tensorflow:2.10.0 |
| --gpus | 컨테이너가 사용할 GPU를 지정 | docker run --gpus all tensorflow/tensorflow:2.10.0 |
| --link | 다른 컨테이너와의 링크를 설정 | docker run --link some_other_container tensorflow/tensorflow:2.10.0 |
| --env-file | 환경 변수 파일을 지정하여 컨테이너에 환경 변수를 설정 | docker run --env-file ./env.list tensorflow/tensorflow:2.10.0 |
| --restart | 컨테이너 재시작 정책을 설정 예: no, on-failure, always, unless-stopped. |
docker run --restart unless-stopped tensorflow/tensorflow:2.10.0 |
| -u, --user | 컨테이너 내에서 사용할 사용자 이름 또는 UID를 지정 | docker run -u user tensorflow/tensorflow:2.10.0 |
| --log-driver | 로그 드라이버를 설정 | docker run --log-driver json-file tensorflow/tensorflow:2.10.0 |
| --cpus | 사용할 CPU 수를 제한 | docker run --cpus="2.0" tensorflow/tensorflow:2.10.0 |
# 도커 이미지 태깅
docker tag tensorflow/tensorflow:2.10.0 namespace/repository:v0.0.0
# 도커 푸시
docker push namespace/repository:v0.0.0
# 로그에 쌓이는 도커 pid 확인
docker exec containerID ps aux
# 도커 로그 확인
docker logs 컨테이너ID
# 전체 컨테이너 목록 확인
docker container ls -a
# 도커 이미지 삭제
docker rmi image-id
# 도커 컨테이너 삭제
docker rm container-id
# 도커 이미지 <none>으로 뜨는 거 삭제
docker rmi $(docker images -f "dangling=true" -q)
# 컨테이너 접속하기
docker attach containerID
# 도커 이미지 확인
docker images
'Dev 개발할레나' 카테고리의 다른 글
| [챗봇/벡터디비] Weaviate로 커스텀 임베딩 모델 벡터 서치하기 (2) | 2024.09.05 |
|---|---|
| [챗봇/벡터디비] Weaviate란? 벡터 디비 설정, 저장, 쿼리 테스트하기 (1) | 2024.08.28 |
| [챗봇] GPT API를 활용하여 서울시 문화행사 공공프로그램 챗봇 만들기 (0) | 2024.08.20 |