와이유스토리

[캡스톤A] 5. Docker 명령어 정리 본문

프로젝트/협업|인프라

[캡스톤A] 5. Docker 명령어 정리

유(YOO) 2021. 9. 23. 13:05

이번 블로그에서는 Docker 사용법, 원격 서버에서 Docker 사용하기 등을 다루어 보려고 합니다.


1. Docker란?

컨테이너를 기반으로 한 오픈소스 가상화 플랫폼입니다.

저는 처음에 이 말이 너무 어려웠는데 쉽게 저의 경험으로 간단하게 이야기하자면,
제가 가지고 있는 컴퓨터가 윈도우라서 리눅스 환경을 쓰려면 Virtual Machine이나 우분투를 설치했어야 했는데요.
VM이나 우분투를 설치하지 않고도 이 Docker를 이용해 리눅스 환경 이미지를 가져오면 윈도우에서도 리눅스 환경을 사용할 수 있습니다!
VM보다 속도도 빠르고 용량도 덜 차지해서 훨씬 유용합니다.
Docker를 배우고 나니까 윈도우 컴퓨터에서 우분투로 씨름하고 그랬던 게 괜히 억울해지는 느낌이었어요
이래서 사람은 배우라나봐요ㅎㅎ

2. Docker 사용

저 같은 경우는 학교 원격 서버의 GPU를 사용하기 위해서 Docker를 사용해야 했었는데요. 제가 직접 Docker를 설치할 필요없이 라즈베리파이 연결할 때처럼 VSCode를 이용해 원격 서버에 접속해서 Docker를 사용했습니다.
Docker를 설치하고 싶으면 아래 링크에서 설치해주세요!
https://www.docker.com/products/docker-desktop

Docker Desktop for Mac and Windows | Docker

Learn why Docker Desktop is the preferred choice for millions of developers building containerized applications. Download for Mac or Windows.

www.docker.com

3. Docker 명령어 정리

저도 Docker가 처음이었던 터라 익숙하지 않았는데요. 원하는 환경의 이미지를 가져와 컨테이너를 생성하고 컨테이너 안에서 원하는 작업을 진행하면 됩니다. 주로 제가 사용했던 터미널 명령어들 위주로 Docker의 명령어를 정리해보았습니다.
 
먼저, 원하는 환경에서 작업하기 위해 먼저 이미지를 가져와야 하는데요. 위의 docker 사이트에서 원하는 이미지를 검색한 후 아래 명령어를 이용해 이미지를 가져옵니다. 예를 들어 bitnami/pytorch를 가지고 오고 싶은 경우 docker pull bitnami/pytorch와 같이 명령어를 실행하면 리눅스 환경에서 pytorch가 이미 설치되어 있는 환경의 이미지를 가지고 올 수 있습니다.

docker pull 이미지

 
이제 이미지를 가져왔으니 이미지를 바탕으로 컨테이너를 생성하겠습니다. 아래 명령어를 이용하면 해당 이미지의 컨테이너를 만들 수 있습니다. 이미지가 클래스라면 컨테이너는 객체 같은 느낌이에요. 하나의 이미지로 여러 컨테이너를 만들 수 있고 각각의 컨테이너에서 다양한 작업을 수행할 수 있습니다.

docker run --rm -it --name 컨테이너이름 이미지이름:버전
docker run --rm -it --runtime nvidia --env NVIDIA_VISIBLE_DEVICES="all" --ipc=host --name 컨테이너이름 이미지이름:버전

※ 그리고 아래의 명령어는 도대체 컨테이너에서 GPU를 사용하려면 어떻게 해야하는 건지 고민과 검색 끝에 알게 되었는데요. 직접 환경을 명시해주어야 docker 안에서도 GPU 사용할 수 있는 컨테이너로 생성됩니다. 이 명령어를 사용하면 저는 CPU에서만 실행되더라구요. 이를 유의해주세요!
 
docker images 명령어를 실행하면 지금 작업환경에 어떤 이미지가 있는지 확인할 수 있습니다. 원하는 이미지가 없다면 위의 방법대로 pull 해오면 됩니다!
지금 실행중인 컨테이너를 확인하고 싶을 때는 docker ps 명령어를 사용합니다.

docker images // 이미지 확인
docker ps     // 컨테이너 확인

이미지를 제거하고 싶을때는 docker images 실행해서 해당 이미지ID를 확인하고 아래 명령어를 실행합니다.

docker rmi 이미지id

컨테이너를 제거하고 싶을때는 docker ps 실행해서 해당 컨테이너ID를 확인하고 아래 명령어를 실행합니다.

docker rm 컨테이너id

컨테이너 안으로 파일이나 폴더를 복사하고 싶거나 컨테이너 밖으로 가지고 나오고 싶을때 아래 명령어를 실행합니다.

docker cp 파일or폴더위치 컨테이너이름:폴더 // 컨테이너 안으로 복사
docker cp 컨테이너이름:폴더 파일or폴더위치 // 컨테이너 밖으로 복사

현재 내가 작업한 컨테이너를 백업하고 싶다면 이를 이미지화하면 되는에요. 깃허브처럼 아래 명령어를 이용해 commit과 push를 진행해주면 내 계정에 해당 컨테이너가 이미지로 저장됩니다.

docker commit 컨테이너이름 내계정/이미지이름
docker push 컨테이너이름

이미지를 pull하고 push를 하다보면 여러 버전의 이미지들이 생기면서 이름 없는 이미지들이 생성되는데요. 이름이 없으면 삭제하기가 어렵고 용량만 차지하게 됩니다. 아래 명령어를 이용하면 이름 없는 이미지들을 모두 삭제할 수 있습니다.

docker image prune

컨테이너 안에서 exit 하지 않는 이상, PC를 종료한 후에도 컨테이너는 계속 살아있게 되는데요. 사용했던 컨테이너에 다시 들어가고 싶으면 아래 명령어를 이용합니다.

docker attach 컨테이너이름

 

'프로젝트 > 협업|인프라' 카테고리의 다른 글

[Git] Git add, commit, push 취소  (0) 2022.12.09
[Git] Git 명령어 정리  (0) 2021.01.04
Comments