Docker 명령어 정리

황준하·2023년 2월 28일
0

일반 사용자 계정에게 관리자 권한 부여

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 스크립트로 이미지 만들기

  • Dockerfile 은 토대가 될 이미지, 실행할 명령어(linux) 등을 기재함. (일반 텍스트 에디터로 만듦)

  • 재료 폴더에는 Dokerfile 과 컨테이너에 넣을 파일들이 들어감.

  • -t : tag 옵션;

    • 생성할 이미지 이름 예시) myenv:1
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>  # 상세 정보

위 명령어들을 한 번에 하는 run

  • 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를 연속으로 눌러주면 됨)

컨테이너에 접속하기

  • 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를 이용한다.

    # 백업
    
    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 <옵션>



REF

0개의 댓글