sudo usermod -aG docker <USER_NAME>
이미지 예시: pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime
-> 레지스트리 주소 / 리포지토리이름 : 버전
pytorch/pytorch
: 이미지 이름 (Repository):1.13.0-cuda11.6-cudnn8-runtime
: 이미지 태그(이미지 버전)latest
로 자동 지정됨.이미지로 실행 중인 컨테이너가 있으면 이미지 삭제 불가능
docker image pull <IMAGE_NAME> # 내려받기
docker image rm <IMAGE_NAME> # 삭제
docker image ls <IMAGE_NAME> # 목록
Dockerfile
은 토대가 될 이미지, 실행할 명령어(linux) 등을 기재함. (일반 텍스트 에디터로 만듦)
재료 폴더에는 Dokerfile
과 컨테이너에 넣을 파일들이 들어감.
-t
: tag 옵션;
docker build -t <생성할 이미지 이름> <재료 폴더 경로>
이미지에 태그 부여하기
이미지 이름을 태그로 바꾸고 이미지 복제한다 (명령 실행 후 다른 이름의 2개의 이미지가 존재하게 됨)
docker tag <원래_이미지_이름> <레지스트리_주소/리포지토리_이름:버전>
이미지 업로드하기
docker push <레지스트리_주소/리포지토리_이름:버전>
save
를 이용해 tar
포맷으로 바꾼 후 내보내야 한다.docker save -o <파일_이름>.tar <이미지_이름>
컨테이너 삭제 전에는 정지
를 해야 함.
docker container create <NAME> # 생성
docker container rm <NAME> # 삭제
docker container start <NAME> # 시작
docker container stop <NAME> # 정지
docker container inspect <NAME> # 상세 정보
image pull
, container create
, container start
를 합친 것과 같음.
docker container run <NAME>
사용 예시
-d
: 백그라운드 실행
-i
: 컨테이너에 터미널(키보드) 연결
-t
: 특수키 사용 허용
-e
: 환경변수 설정
--name
: 컨테이너 이름 설정
docker run -dit --name test11 pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime
사용 예시 2) jupyter 와 같이 포트 설정 필요할 때
-p
: 포트 설정 => 호스트 포트 번호 : 컨테이너 포트 번호
docker run -dit -p 10024:8080 --name test pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime
사용 예시 3) gpu할당 + 포트 설정 필요 시
--gpus all
: GPU 모두 사용
--gpus "device=0,1
: nvidia-smi 기준 앞의 2개만 사용
docker container run -dit -p 10024:10024 --gpus all --name test1 beneble/my-env:0.2
docker ps
docker container ls # 이 명령어도 똑같은 일을 함.
-a
옵션을 주면 도커에 만들어져있는 모든 컨테이너 목록을 보여준다.docker ps -a
docker container commit <CONTAINER_NAME> <IMAGE_NAME>
Ctrl+P -> Ctrl+Q
를 이어서 눌러주면 된다. (Ctrl을 누른 상태에서 P와 Q를 연속으로 눌러주면 됨)
단, 컨테이너가 -i
와 -t
옵션을 가지고 있어야 함.
Ref: https://docs.docker.com/engine/reference/commandline/attach/
attach
는 접속을 위한 명령어이고 exec
는 외부에서 컨테이너에 명령을 전달하기 위한 수단이다.
attach
: 컨테이너 안에서 실행해야할 명령 시
exec
: 도커 엔진을 통해야하는 명령 시
docker attach <NAME>
docker exec -it <NAME> /bin/bash # 해당 컨테이너에서 bash를 실행시킴. [컨테이너의 bash로 넘어감]
볼륨
: 컨테이너에 마운트 가능한 스토리지docker volume create <VOL_NAME> # 생성
docker volume rm <VOL_NAME> # 삭제
docker volume prune # 마운트되지 않은 볼륨 모두 삭제
docker volume ls <VOL_NAME> # 목록
docker volume inspect <VOL>NAME> # 상세정보 확인
docker run
의 -v
옵션을 이용해 지정한다.
볼륨 마운트: 도커 엔진 위에 볼륨을 만들어 마운트하는 방식 (volume create
로 볼륨이 만들어져 있어야함)
-v 볼륨_이름:컨테이너_마운트_경로
docker run -dit --name test11 -v voltest:/workspace/test pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime
바인드 마운트: 도커 외부의 디렉토리를 마운트하는 방식
-v 스토리지_실제_경로:컨테이너_마운트_경로
docker run -dit --name test11 -v /home/egg2018037024/Downloads:/workspace/test pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime
볼륨 백업을 하기 위해서는 볼륨 마운트
와 바인드 마운트
모두가 필요하다.
볼륨 마운트한 볼륨을 외부(바인드 마운트)로 옮기는 것.
백업에는 tar
를 이용한다.
gzip
으로 압축: tar cvzf /경로/파일명.tar.gz <디렉토리> 또는 파일
-C
는 디렉토리를 지정하는 옵션이며 .
또한 중요하다. (새 디렉토리 만들어줌)# 백업
docker run --rm -v 볼륨명:/source -v 백업_저장_폴더명:/target busybox tar cvzf /target/백업파일이름.tar.gz -C /source .
# 복원
docker run --rm -v 볼륨명:/source -v 백업_저장_폴더명:/target busybox tar xvzf /target/백업파일이름.tar.gz -C /source
백업 관련 ref: https://docs.docker.com/storage/volumes/#back-up-restore-or-migrate-data-volumes
내부 컨테이너들을 연동해서 동작시켜야 하는 경우 가상 네트워크를 만들어 연결하면 된다.
docker network create <NET_NAME> # 생성
docker network rm <NET_NAME> # 삭제
docker network prune <NET_NAME> # 접속하지 않은 네트워크 모두 삭제
docker network connect <NET_NAME> # 연결
docker network disconnect <NET_NAME> # 연결 해제
컨테이너 <-> 호스트 간의 파일 복사
docker cp <원본_경로> <복사할_경로>
호스트 -> 컨테이너
docker cp /home/egg2018037024/dockercp.txt test11:/dockercopytest
컨테이너 -> 호스트
docker cp test11:/workspace/test.txt /home/egg2018037024
시스템 구축과 관련된 명령어를 하나의 텍스트 파일(컴포즈 파일)에 기재해 일괄 실행 & 일관 종료 및 삭제 할 수 있게 하는 도구.
Dockerfile
은 이미지를 만들기 위한 것이고 네트워크나 볼륨은 만들 수 없음.
도커 컴포즈는 별개의 소프트웨어로 설치가 필요함.
pip3 install docker-compose
도커 컴포즈를 사용하려면 폴더를 만든 후, 이 폴더에 정의 파일(YAML 파일)을 두어야 한다. [한 폴더당 하나]
docker_compose.yml
작성 예시는 여기를 참고하면된다. (공백에 유의해서 작성해야 함)
depends_on
: 여기에 지정한 컨테이너를 생성 후 해당 컨테이너 만듦.
restart
: 컨테이너 종료 시 재시작 여부
도커 컴포즈로 컨테이너 생성: docker-compose up
도커 컴포즈로 생성한 컨테이너 이름은 도커 엔진에서는 다르게 표시 됨에 주의
도커 컴포즈
: 컴포즈 파일에 기재된 이름
도커 엔진
: 폴더이름_컴포즈 파일에 기재한 이름_번호
docker-compose -f <정의_파일_경로> up <옵션>
docker-compose -f /home/사용자명/com_folder/docker-compose.yml up -d
도커 컴포즈로 컨테이너, 네트워크 삭제
docker-compose -f <정의_파일_경로> down <옵션>
docker-compose -f /home/사용자명/com_folder/docker-compose.yml down
도커 컴포즈로 컨테이너 종료
docker-compose -f <정의_파일_경로> stop <옵션>