[Docker] Docker이해하기4.  docker image 만들어보기 1
Operating System/Docker

[Docker] Docker이해하기4. docker image 만들어보기 1

미션: Docker image를 다운받아서 컨테이너를 실행 필요한 라이브러리를 설치해서 실험환경을 구축해보자

내가 구축하고자 하는 실험 환경

  • torch>=1.6.0
  • torchaudio>=0.6.0
  • numpy
  • scipy
  • scikit-learn
  • tqdm
  • pyyaml

이 실험환경을 하나의 image로 만들어보자!

도커에서는 하나의 이미지를 저장소 repository라고 부른다

  • Push : image 업로드
  • pull : image 다운로드
  • diff : Image 차이 확인
  • commit : 새로운 Image 생성

1.  Docker hub에서 image 검색

Docker hub는 Git hub처럼 사용자들이 이미지들을 오픈해서 사용자 간에 필요한 이미지를 공유할 수 있는 공간이다.

내가 필요한 image를 검색해서 다운받아 사용할 수 있고 언제든지 사용자가 구축한 이미지를 업로드해서 다른 사람들과 공유할 수 있다.

#docker search ubuntu  

 

image download 할때, namespace

일반적으로 도커가 제공하는 공식 이미지에는 네임스페이스가 없다. 네임스페이스는 이미지 이름에서 슬래시(/)로 구분되며, 슬래시 앞부분이 네임스페이스가 되고, 슬래시 뒷부분이 실제 image name. 도커의 공식 저장소에서는 사용자 이름을 네임스페이스로 사용한다. (예를 들어, 내가 만든 이미지라면 rabo/ubuntu)

공식이미지를 사용하고 싶다면 /앞에 사용자의 이름이 붙지 않는 것을 다운받아 사용하면 된다.

 

image 확인해보기

지금 현재 내 pc에 존재하는 image들을 보고 싶으면 아래 명령어로 목록을 확인할 수 있다.

#docker images

전에 다운받아 둔 게 몇 개 있어서, 위처럼 3가지 Image가 출력되었다. 

 

2. image를 pull 하기 (image 다운로드)

dockerhub로부터 image를 다운받는것인데 방법에는 2가지가 있다.

#docker pull ubuntu:latest (최신 버전다운) 

위의 명령어로 Pull(download) 해오면  아래 맨 윗줄에 최신 버전의 Ubuntu image가 다운받아진 것을 볼 수 있다.

 

3. 생성된 image 실행해서 container로 만들기

#sudo docker run -ti ubuntu:latest

docker run (<옵션>) <이미지 식별자:태그> 

  • —name : 만들 컨테이너의 이름을 붙여줄 수 있음
  • —ti : 뒤에는 이미지 이름이나 이미지 id를 붙여준다. -t와 -i 옵션을 같이 쓴 것인데 컨테이너를 종료하지 않은 채로, 터미널의 입력을 계속 컨테이너로 전달하기 위해서 사용한다.
  • 생성하면 container안으로 들어오게 된다. (exit 하면 나갈 수 있음)

 


잠깐 헷갈려서 알아본 결과:  container의 상태는 4가지로 구분된다.

docker run 명령어는 실제로 다음의 세 명령어를 한 번에 실행하는 것과 같다.

  • docker pull : 이미지를 다운로드한다. docker run 명령어는 이미지가 로컬에 없으면 이미지를 다운로드한다.
  • docker create : 이미지로부터 컨테이너를 생성한다.
  • docker start : 컨테이너를 시작한다.

javacan.tistory.com/entry/docker-start-2-running-container


나는 run으로 실행하고 bash shell에서 exit로 container를 종료해 버렸기 때문에 다시 컨테이너를 실행하기 위해서는 

아래 두 단계로 컨테이너를 열고 실행할 수 있다.

#docker start rabo_clova : 컨테이너를 시작한다

#docker exec -ti rabo_clova bash : 컨테이너를 실행한다

 

여기까지 필요한 base image를 pull(다운받아) container를 생성하고 실행하는 것까지 완성했다.

이제 container에 필요한 라이브러리를 설치해서 해당 container를 Image로 새로 배포하는 것까지 다음 포스팅에서 완성하도록 하겠다!