본문 바로가기
Dev 개발할레나

[Docker] 사용법, 명령어 총 정리, CheatSheet

by LENA-cfg 2024. 8. 7.

개념정리

도커 파일

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

 

도커 이미지

도커 이미지는 컨테이너를 실행하기 위한 템플릿

docker images 명령어를 터미널에 치면 확인 할 수 있다.

 

도커 컨테이너

도커 컨테이너는 도커 이미지를 기반으로 실행되는 실제 실행 인스턴스, 이미지를 활성화 한것

docker ps 또는 docker ps -a 명령어를 터미널에 치면 확인 할 수 있다.

실제 우리가 실행하려는 앱 또는 응용프로그램은 하나의 도커 컨테이너를 실행해서 사용하는 것이고

컨테이너를 실행하기 위해 도커파일을 작성하고 도커파일 빌드를 통해 이미지로 생성해주고 도커 헙에 버전별로 저장(백업)해두고 서버 컴퓨터에서 도커 컨테이너를 실행하면 되는 것이다.

 

작업 순서

도커 파일 작성 > 이미지 빌드(도커 헙 레포지토리와 동일하게, 태깅으로 버전 관리)  > 도커 헙 푸시(업로드) > 도커 컨테이너 실행

 


명령어 정리

https://hub.docker.com/layers/tensorflow/tensorflow/2.10.1/images/sha256-b633084418ec697b275d6cee7da679a76bf8626bfb18188d6a44cdce3482047f?context=explore

 

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와 레포지토리와 동일하게 작업한다.

- 버전 규칙은 아래의 블로그를 참고했습니다.

링크: https://velog.io/@goodjam92/Semantic-Versioning-%EB%B0%B0%ED%8F%AC-%EB%B2%84%EC%A0%84-%EA%B7%9C%EC%B9%99

- 버전 옆에 띄어쓰기 점 부분은 꼭 빼놓지 않기

옵션 설명 사용법
-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