server & docker manual - deepmi · 2018-08-14 · $ docker commit [컨테이너 id or name]...

20
Server & Docker manual Intelligent Computer Systems Lab

Upload: others

Post on 22-May-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

Server & Docker manual Intelligent Computer Systems Lab

Page 2: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

도커란?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다. 가상화 기술의 하나지만 기존방식과는 차이가 있습니다.

Page 3: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

도커란?

기존의 가상화 방식은 주로 OS를 가상화하였습니다.

그러나 도커는 별도의 OS를 만들지 않고 프로세스를 격리합니다.이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작합니다.

(2분이면 centos에서 개발가능)

Page 4: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

장단점

장점• Guest OS를 설치하지 않기 때문에 구동시 별도의 하드웨어 초기화나 init 프로세스를 구동할 필요가 없습니다. (RAM, CPU 사용량 절감)

• 하드웨어 가상화가 필요 없어 별도의 Guest OS를 설치할 필요가 없습니다. (저장 장치 용량 절감)

• 이미지만 있으면 어디서든 같은 환경을 제공하게에 이식성을 보장

단점

• 리눅스 컨테이너이기 때문에, Linux 이외의 운영체제는 설치/실행할 수가 없습니다.

Page 5: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

설치법

$ sudo wget -qO- https://get.docker.com/ | sh

설치(ubuntu)

설치(CentOS6)$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

$ sudo yum install docker-io

설치(CentOS7)$ sudo yum install docker

Page 6: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

설치법(GPU를 사용시에)

# Add the package repositories

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \

$ sudo apt-key add -

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \

sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration

$ sudo apt-get install -y nvidia-docker2

$ sudo pkill -SIGHUP dockerd

# Test nvidia-smi with the latest official CUDA image

$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

Page 7: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

sudo 입력하지 않기

docker 명령은 root 권한으로 실행해야 하기 때문에 일반 계정에서는 항상 sudo를 사용합니다. sudo를 매번 입력하기 귀찮기도 하고 빠뜨릴 때도 많습니다. sudo를 입력하지 않는 방법은 두 가지가 있습니다.처음부터 root 계정으로 로그인하거나 sudo su 명령을 사용하여 root 계정으로 전환

$ sudo su

현재 계정을 docker 그룹에 포함(docker 그룹은 root 권한과 동일하므로 꼭 필요한 계정만 포함시킵니다).

$ sudo usermod -aG docker ${USER}

$ sudo service docker restart

현재 계정에서 로그아웃한 뒤 다시 로그인합니다.

Page 8: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

도커 명령어(이미지,실행)

Docker Hub에서 이미지 검색

$ docker search ubuntu:16.04

Docker Hub에서 이미지 받기

$ docker pull ubuntu

Docker 이미지 목록 확인

$ docker images

이미지로 컨테이너 실행 (run)$ docker run -t -i --name hello -p 80:80 -v /usr/local/:/usr/local ubuntu:latest /bin/bash

• -i : 컨테이너와 상호작용

• -t : tty(터미널)을 사용

• -d : -i 옵션의 반대. 컨테이너를 백그라운드 실행

• -p [외부포트]:[내부포트] : 포트포워딩 설정 ex) -p 80:8080 -> 외부에서 들어온 80포트 요청을

컨테이너의 8080 포트로 포워딩시킨다. 포트를 여러개 열고 싶으면 -p 80:8080 -p 8088:8088

-p 27017:27017 이런식으로 이어서 쓰면 된다.

• -v : [외부절대경로]:[내부절대경로] : 컨테이너 외부(호스트) 볼륨과 컨테이너 내부 볼륨을

바인딩시킨다.

• -c : cpu 스케줄링 점유율 (기본값 1024)

• -m : 메모리

• -rm : 컨테이너가 종료되면 삭제

• /bin/bash: 리눅스의 경우 컨테이너에서 bash 쉘을 이용

Page 9: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

도커 명령어(목록,접속,정지,삭제)

컨테이너 목록 확인$ docker ps

• -a : 정지된 컨테이너까지 출력

• -q : 컨테이너 ID만 출력

실행중인 컨테이너 쉘에서 빠져나오기

• exit : 쉘을 빠져나오면서 컨테이너를 종료

• ctrl + p -> ctrl + q 순서대로 입력 : 컨테이너를 종료하지

않고 쉘만 빠져나옴

실행중인 컨테이너로 접속하기

$ docker attach helloubuntu

실행중인 컨테이너 정지하기

$ docker stop helloubuntu

컨테이너 삭제하기

$ docker rm helloubuntu

• -f : 실행중인 컨테이너도 강제로 정지하고 삭제

Page 10: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

도커 명령어(목록,접속,정지,삭제)

컨테이너 목록 확인$ docker ps

• -a : 정지된 컨테이너까지 출력

• -q : 컨테이너 ID만 출력

실행중인 컨테이너 쉘에서 빠져나오기

• exit : 쉘을 빠져나오면서 컨테이너를 종료

• ctrl + p -> ctrl + q 순서대로 입력 : 컨테이너를 종료하지

않고 쉘만 빠져나옴

실행중인 컨테이너로 접속하기

$ docker attach helloubuntu

실행중인 컨테이너 정지하기

$ docker stop helloubuntu

컨테이너 삭제하기

$ docker rm helloubuntu

• -f : 실행중인 컨테이너도 강제로 정지하고 삭제

Page 11: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

도커 명령어(모두삭제)

컨테이너 모두 삭제하기

// Linux

$ docker rmi $(docker images -q)

// Windows

$ FOR /f "tokens=*" %i IN ('docker images -q -f "dangling=true"')

DO docker rmi %i

이미지 삭제하기

$ docker rmi ubuntu:latest

[이미지 이름]:[태그] 형식을 사용해도 되고 이미지 ID를 사용해도 된다.이미지 이름만 입력할 경우 태그에 관계없이 이미지 이름만 같으면 모두 삭제된다 .

이미지 모두 삭제하기

// Linux

$ docker rmi $(docker images -q)

// Windows

$ FOR /f "tokens=*" %i IN ('docker images -q -f "dangling=true"')

DO docker rmi %i

* 이미지를 삭제하려면 먼저 해당 이미지에서 파생된

컨테이너가 없어야 한다!

Page 12: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

도커 명령어(diff,이미지)

컨테이너 변경사항 확인하기

$ docker diff [컨테이너 ID or NAME]

어떤 이미지로 실행된 컨테이너 안의 내용의 변경되었다면, 버전 관리 시스템처럼 diff 명령어로 어떤 점이 바뀌었는지 확인할 수 있다.

컨테이너로 이미지 만들기

$ docker commit [컨테이너 ID or NAME] [새로운 컨테이너

이름]:[태그]

버전 관리 시스템처럼 commit 명령어로 변경된 컨테이너를 새로운

이미지로 만들 수 있다.

Dockerfile을 통한 이미지 빌드

$ docker build -t [image name:tag] -f [Dockerfile 경로]

이미지 파일 Export

$ sudo docker save -o [내보낼 경로]/[내보낼 이름] [내보낼 이미지

ID or NAME]

이미지 파일 Import

$ sudo docker load -i [이미지 파일 경로]

Page 13: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

도커 명령어(볼륨)

볼륨 관련 명령어

// 볼륨 만들기

$ docker volume create [VOLUME NAME]

// 볼륨 목록 보기

$ docker volume ls

// 특정 볼륨 상세정보 보기

$ docker volume inspect [VOLUME ID or NAME]

// 볼륨 삭제하기

$ docker volume rm [VOLUME ID or NAME]

// 사용하지 않는 볼륨 모두 삭제

$ docker volume prune

Page 14: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

Example ubuntu:16.04 vnc & ssh setup

Ubuntu:16.04 다음과 같은 명령어로 실행$ docker run -it -d --name test -p 5900:5900 -p 10022:22 --restart="always" ubuntu:16.04 bash

• -d: 백그라운드 실행• -it :인터렉티브 +tty 실행• -p : 외부포트:내부포트• --restart : 재시작시 동작• --name : alias

Page 15: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

Example ubuntu:16.04 vnc & ssh setup

다음 명령어로 도커로 접속한다.$ docker exec -it test bash

업데이트를 수행한다.$ apt-get update -y && apt-get upgrade && apt-get dist-upgrade && apt-get autoclean && apt-get autoremove

필수프로그램을 설치한다.$ apt-get install git curl wget vim tmux ssh

Page 16: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

Example ubuntu:16.04 vnc & ssh setup

다음 명령어로 도커로 접속한다.$ docker exec -it test bash

업데이트를 수행한다.$ apt-get update -y && apt-get upgrade && apt-get dist-upgrade && apt-get autoclean && apt-get autoremove

필수프로그램을 설치한다.$ apt-get install git curl wget vim tmux ssh tightvncserver xfce4

Page 17: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

Example ubuntu:16.04 vnc & ssh setup

유저를 추가한다$ adduser jaehun

유저 계정으로 접속 $ su -l jaehun

옆과 같이 비밀번호를 만든다.

세션을 삭제한다.$ vncserver -kill :1

Page 18: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

Example ubuntu:16.04 vnc & ssh setup

Xstartup을 옆 과 같이 수정한다.$ vim .vnc/xstartup

VNC를 실행한다.

$ vncserver :1 -geometry 2560x1080 -depth 24

Page 19: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

Example ubuntu:16.04 vnc & ssh setup

VNCviewer에 docker가 설치된 컴퓨터의 ip:1을 입력한뒤 아까 설정한 vnc의 비밀번호를 입력하면 다음과 같은 화면을 볼 수있다.

Page 20: Server & Docker manual - DeepMi · 2018-08-14 · $ docker commit [컨테이너 ID or NAME] [새로운 컨테이너 이름]:[태그] 버전 관리 시스템처럼 commit 명령어로

참고

공식사이트 https://www.docker.com/

명령어 https://ahribori.com/article/5912b3ee381ff41040995a40

가장 빨리 만나는 도커 http://pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book