IIP-Sogang / IIP_Docker

도커 메뉴얼
0 stars 1 forks source link

IIP_Docker

Docker Document

Docker Hub

Docker Cheat Sheet

INDEX

Component

Note

설치

sudo apt-get install docker

+ [최신버전 설치](https://docs.docker.com/engine/install/ubuntu/)
sudo apt-get update
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo  echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo apt-get update

1-1. docker group 이 없다면 만든다.

sudo groupadd docker
  1. user를 docker group 에 추가한 뒤 docker 재시작.
    sudo usermod -aG docker $USER
    sudo service docker restart

restart 해도 permission 요구할 경우 reboot

NOTE

docker service 재시작 해도 권한이 바로 적용되지 않는다. 재부팅 없이권한을 적용 하는 방법을 찾아보자

docker pull <소유자>/<이미지 이름>[:<버전 | default = latest>]
ex) 
docker pull continuumio/anaconda3
docker pull continuumio/anaconda3:latest
docker pull continuumio/anaconda3:5.0.0p0
docker load -i <파일명> 
$ docker images

EPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
continuumio/anaconda3   latest              cb34e4508fdc        5 weeks ago         3.72GB
koobh/iip_demo_env      latest              b42211c6a9f9        2 months ago        1.27GB

사용

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
ex)
docker run -i -t continuumio/anaconda3 /bin/bash
--> anaconda3의 이미지로 컨테이너를 생성해서 bash로 접속합니다. 

docker run --gpus all -i -t <콘테이너> /bin/bash

Foreground 옵션
+ -t              : Allocate a pseudo-tty, 터미널을 사용
+ -i              : Keep STDIN open even if not attached, 표준 입력을 넣음

<docker에 접속 한 뒤에>  
root 계정으로 접속한것을 볼 수 있습니다. 

$ ls se) root@32b16a415be8:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr


+ Note
    + container 는 프로세스 입니다. 명령이 끝나면 종료됩니다.

+ 실행중인 도커 확인

$ docker ps -a

ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 32b16a415be8 continuumio/anaconda3 "/usr/bin/tini -- /b…" 2 seconds ago Up Less than a second youthful_pascal


+ 옵션들

### 이름
컨테이너에 지정된 이름을 부여합니다. 명시되지 않으면 임의의 인물명을 사용합니다. 

docker run --name <원하는 이름> ex) docker run -it --name my_contatiner_name iip:v4


### 볼륨

+ 호스트와 디렉토리를 공유합니다
+ 컨터이너의 출력물을 호스트에서 사용하거나 호스트의 파일을 도커에서 사용할 수 있습니다 .

docker run -v <host 디렉토리>:<contatiner 디렉토리> ex) docker run -it -v $PWD/data:/home/iip/data/ iip:v4 docker run -it -v /home/git/IIP_Docker/data:/home/iip/data/ iip:v4


* note
    + ```.``` 을 이용한 상대경로를 사용할 수 없습니다. ```$PWD```를 사용하십시오.

+ [Docker Run Reference](https://docs.docker.com/engine/reference/run/)

## [수정](#index)<a name = "modify"></a>

컨테이너에 접속 해서

apt-get update apt-get install libasound2-dev exit

작프로세스 종료시 해당 상태가 ```exited``` 된 컨테이너로 저장됩니다. 

## [저장 및 배포](#index)<a name = "deploy"></a>

+ contatiner -> image

docker commit <컨테이너> <이미지명:태그 ex) iip:v2 >


+ image -> tar file

docker save -o <파일명 ex) iip_v4.tar> <이미지>


+ docker hub 에 업로드

docker login .. ..

docker tag iip_demo_env koobh/iip_demo_env docker push koobh/iip_demo_env


## [이어하기](#index)<a name = "start"></a>  

docker start <-i>


## [예시](#index)<a name = "example"></a>

```Dockerfile``` 과 ```run.sh``` 를 사용합니다. 

```Dockerfile
# iip:v7 이미지를 기반으로 생성합니다.
FROM iip:v7

# 현재 폴더의 mnt 폴더를 docker container의 /mnt 폴더에 마운트합니다.
# 마운트는 파일을 공유하지 않습니다.
# ./mnt 의 내용을 /mnt에 올리는 행위입니다.
# host 와 container 간 파일 공유는 run.sh 에서 이루어집니다.
ADD ./mnt /mnt
#! /bin/sh

# 현재 폴더에서 Dockerfile 로 iip:v7 라는 이미지를 생성합니다. 
docker build . -t iip:v7
# iip:v6 이미지로 working 이라는 이름을 가진 컨테이너를 만듭니다.
# 현재 폴더의 data 폴더를 docker conatiner의 /home/data 폴더와 공유합니다.
# host와 docker container 양쪽에서 같은 파일을 조작할 수 있습니다.
# 터미널로 /bin/sh를 실행합니다.
docker run --name working -v ${PWD}/data/:/home/data/ -it iip:v7 /bin/sh
  1. run.sh 를 실행하면 mnt 폴더를 마운트하고 data폴더를 공유하는 컨테이너가 생성되고, 해당 컨테이너의 터미널로 접속합니다. /bin/sh

  2. 작업을 수행합니다.

  3. exit 합니다.

컨터이너가 종료됩니다. 변동사항을 안에 담고있습니다. 다만 data 폴더의 사항은 호스트와 공유하는 것이기에 담고 있지 않습니다.

  1. docker ps -a를 하면 exited된 컨테이너가 있습니다.

  2. docker commit <extied 된 container 이름> <새로 만들 이미지 이름>

을 하면 해당 컨테이너를 이미지로 변환합니다.

  1. docker save -o <파일명.tar> <이미지 명>

을 하면 해당 이미지를 tar 파일로 추출합니다.

  1. docker load -i <파일명.tar>
    를 하면 해당 이미지를 가져옵니다.