# Linux 기반으로 작성됩니다.
# docker, nvidia-docker가 설치 되어있다고 가정합니다.
저번 포스팅에 이어서 가지고 있는 이미지를 다루는 방법에 대해서 설명드리겠습니다.
- 도커 허브에서 가져오기
- 가지고 있는 이미지를 수정해서 사용하기
*가지고 있는 이미지를 수정해서 사용하기.
전체흐름 : 컨테이너 생성->컨테이너 환경 수정->이미지 수정->배포
- 이미지를 소유하고 있다는 가정으로 시작됩니다.(도커 허브에서 이미지를 가져오는 방법은 저번 포스팅을 참고해주세요)
https://limmmmm.tistory.com/m/5
* 저번 포스팅의 이미지를 가지고 수정한다는 가정으로 진행하겠습니다
이미지 명(예시) : 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 |
---|