programming/docker

(도커)docker 기본 설정(이미지 관리 2) + 컨테이너 생성 방법

limmmmm 2022. 10. 17. 16:04
반응형
반응형

# Linux 기반으로 작성됩니다.

# docker, nvidia-docker가 설치 되어있다고 가정합니다.

 

저번 포스팅에 이어서 가지고 있는 이미지를 다루는 방법에 대해서 설명드리겠습니다.

 - 도커 허브에서 가져오기

 - 가지고 있는 이미지를 수정해서 사용하기

 

*가지고 있는 이미지를 수정해서 사용하기.

전체흐름 : 컨테이너 생성->컨테이너 환경 수정->이미지 수정->배포

- 이미지를 소유하고 있다는 가정으로 시작됩니다.(도커 허브에서 이미지를 가져오는 방법은 저번 포스팅을 참고해주세요)

https://limmmmm.tistory.com/m/5

 

(docker)도커 환경 구성(이미지 관리 1)

# Linux 기반으로 작성됩니다. # docker, nvidia-docker가 설치 되어있다고 가정합니다. 이미지를 가져오는 방법은 여러가지가 있지만, 아래의 두 방법에 대한 설명을 드리도록 하겠습니다. - 도커 허브

limmmmm.tistory.com

*  저번 포스팅의 이미지를 가지고 수정한다는 가정으로 진행하겠습니다

이미지 명(예시) : 3neutronstar/cuda11.3.1_cudnn8_pytorch1.8.2_cu111

 

호스트 : 도커가 설치된 현재 공간

컨테이너 : 호스트에서 만들어 놓은 컨테이너 내부의 공간

다른 컴퓨터 : 같은 네트워크 상의 다른 컴퓨터

 

1. 이미지 검색(호스트 작업)

$ docker images

- 위 명렁어를 입력하시면 현재 소유하고 있는 이미지들이 나옵니다.

- 수정하실 이미지를 선택합니다(이미지 명 기억['REPOSITORY']) : 3neutronstar/cuda11.3.1_cudnn8_pytorch1.8.2_cu111

2. 컨테이너 생성(호스트 작업)

- docker run 명령어를 통해 컨테이너를 생성합니다.

- CLI기반(command), 백그라운드에서도 종료없이 실행하면서, 포트포워딩 및 GPU설정하고 폴더 연결까지 하고싶다.

$ docker run -ti -d -p 22222:22-v /home/projects/testfolder_host:/home/testfolder_cont --name test --runtume=nvidia -e NVIDIA_VISIBLE_DEVICES=0, 1 3neutronstar/cuda11.3.1_cudnn8_pytorch1.8.2_cu111 bash

 

<option 설명> : 순서 상관없음, 말그대로 옵션이기 때문에 자신에게 필요한 명령어만 사용하면 됨

-ti : 컨테이너 종료 없이 터미널 입력 사용(CLI기반)

-d : 백그라운드 실행

-p : 포트포워딩(컨테이너를 ssh연결로 접속하려면 22번 포트(ssh 기본포트)를 다른 포트(예시는 22222포트)로 포트포워딩을 해줘야 함 --> 추후 접속 시 : $ssh [계정명]@[IP] -p 22222

--name : 컨테이너 이름 지정

--runtime : nvidia 도커

-e : 환경변수 설정(위의 상황은 GPU 2개 사용 가능해서 0번 1번으로 지정)

-v : 볼륨마운트(호스트(주인)폴더:컨테이너 폴더 입력하면 됨)

만약 일회성 컨테이너를 만들고 싶다면

--rm 명령어 추가해주면 됨(컨테이너를 exit로 빠져나왔을 때 컨테이너 사라짐)

 

3. 컨테이너 실행

(호스트 작업)

- 위의 명령어(컨테이너 명 : test)실행 후 컨테이너 진입

$ docker attach test

## 컨테이너로 이동

- 만약 ssh 설정하고 싶으면(다른 컴퓨터에서 붙어서 작업할 때)

<ssh 설정>

  $ apt-get update
  $ apt-get install ssh -y
  $ vi /etc/ssh/sshd_config

## config 파일 수정 : 밑의 내용 처럼 수정(모르겠으면 걍 입력하면 됨)

     -> PermitiRootLogin yes 

     -> PasswordAuthentication yes

## vi수정방법은 i누르면 입력모드되고 입력 다 했으면 esc 누르고(누르면 밑에 ":" 생김) w(저장)q(나가기)입력 후 엔터

  $ service ssh restart

## ssh 재시작 하면서 설정 적용 됨

  $ passwd

## 계정 비밀번호 설정이니까 알아서 설정

하고 윈도우 환경이면 cmd(명령프롬프트 켠다음)

$ ssh root@xxx.xxx.xxx.xxx -p 22222

## xxx.xxx ...이거는 호스트 ip임 

 

4. 이미지 만들 환경 설정(컨테이너 작업)

- 각자 만든 컨테이너 환경에서 작업

ex) pip install sklearn matplotlib ....

## 필요한 라이브러리 및 폴더 만들기

## 현재 상태 그대로 이미지가 만들어지는거니까 알아서 잘 설정하면 됨

 

5. 이미지 만들기(호스트 작업)

$ docker commit test my_image:20221017

## test라는 컨테이너를 my_image(이미지명):20221017(태그명)으로 만든다는 의미

- 작업 완료 후 docker images로 확인하면 image 보임

- 다시 변경내용이 있다면 컨테이너 작업 후 "태그명"만 변경해서 생성하면 됨

<삭제>

$ docker rmi [IMAGE ID]

## IMAGE ID : docker images 했을 때 나오는 id 입력

- 만약 삭제가 안된다면 아마 컨테이너가 실행중이라 그럴꺼임

$ docker ps

위의 명령어로 컨테이너 실행중인지 확인 후 실행중이라면 stop으로 멈춰야됨

$ docker stop test

후 삭제 하면 될듯

컨테이너 삭제는 rmi 대신 rm, IMAGE ID 대신 컨테이너 명 입력하면 됨

 

6. 이미지 배포(호스트 작업)

$ docker login

## 이전 포스트에서 만들어놓은 도커허브 아이디로 접속

$ docker push my_image:20221017

## 만들어놓은 이미지를 도커허브에 올리는 작업

 

 

<만약 올려놓은 이미지를 다운받으려면>

$ docker pull my_image:20221017

## 이러면 끝~

 

짧은 지식으로 올려서 오류가 있을 수 있습니다.. 잘못된 정보 있으면 지적해주세요.

반응형

'programming > docker' 카테고리의 다른 글

(도커)docker 기본 설정(이미지 관리 1)  (0) 2022.10.13