DOCKER 소개 및 설치, 기본 명령어 소개

Posted by TheFanStory Linux/ubuntu : 2019. 11. 7. 13:12

도커(Docker)는 2013년에 등장한 새로운 컨테이너 기반 가상화 도구.

 

Host OS 위에 Guest OS 를 통째로 올리는 기존 가상화 기술과는 차이가 있다.

 

 

 

 

[초보자를 위한 도커 안내서]

 

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

초보를 위한 도커 안내서 - 도커란 무엇인가?

도커를 처음 접하는 시스템 관리자나 서버 개발자를 대상으로 도커 전반에 대해 얕고 넓은 지식을 담고 있습니다. 도커가 등장한 배경과 도커의 역사, 그리고 도커의 핵심 개념인 컨테이너와 이미지에 대해 알아보고 왜 이렇게 도커가 인기 인지 하나하나 살펴보겠습니다.

subicura.com

https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html

 

초보를 위한 도커 안내서 - 설치하고 컨테이너 실행하기

초보를 위한 도커 안내서 2번째 글입니다. 도커의 기본적인 내용을 이야기 했던 첫번째 글에 이어 실제로 도커를 설치하고 컨테이너를 실행하면서 도커 명령어를 알아봅니다. 도커를 처음 접하는 분들을 위해 아주 가볍게 자주 쓰는 명령어를 다루었습니다.

subicura.com

https://subicura.com/2017/02/10/docker-guide-for-beginners-create-image-and-deploy.html

 

초보를 위한 도커 안내서 - 이미지 만들고 배포하기

이 글은 초보를 위한 도커 안내서 - 설치부터 배포까지 시리즈의 마지막 글입니다. 지난 글에서 도커를 설치하고 컨테이너를 실행해 보았으니 이번엔 이미지를 만들고 서버에 배포해보도록 하겠습니다.

subicura.com

 

 

 

[도커 무작정 따라하기]  (마지막에 책광고)

https://www.slideshare.net/pyrasis/docker-fordummies-44424016

 

도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!

도커 무작정 따라하기 - 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다! 도커의 기본 개념부터 설치와 사용 방법까지 설명합니다. 더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~ http://www.pyrasis.com/private/2014/11/…

www.slideshare.net

[docker 란 무엇인가?  : docker 기본 사용법]  (위 도커 무작정 따라하기 요약판, 지막에 책광고)

https://www.slideshare.net/pyrasis/docker-docker-38286477?next_slideshow=1

 

Docker란 무엇인가? : Docker 기본 사용법

Docker란 무엇인가? : Docker 기본 사용법 Docker Seoul Meetup #1 발표 자료입니다. Docker 기본 개념과 사용 방법을 설명하였습니다.

www.slideshare.net

 

 

 

 

도커 튜토리얼 : 깐 김에 배포까지

https://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/

 

nacyot의 프로그래밍 이야기 :: 도커(Docker) 튜토리얼 : 깐 김에 배포까지

도커(Docker)는 2013년에 등장한 새로운 컨테이너 기반 가상화 도구입니다. 도커는 계층화된 파일시스템(AUFS, BTRFS 등)을 사용해 가상화된 컨테이너의 변경사항을 모두 추적하고 관리합니다. 이를 통해서 컨테이너의 특정 상태를 항상 보존해두고, 필요할 때 언제 어디서나(단, Docker가 설치만 되어있다면) 이를 실행할 수 있도록 도와주는 도구입니다. 이 글은 Docker 입문자를 위한 튜토리얼로, 도커의 기본 개념들과 사용법에 대해서 소개합니

blog.nacyot.com

 

 

 

 

더보기

[ DOCKER 설치]

아래 블로그를 참고

https://blog.knowledgebox.online/linux/lnx-plex-with-docker/

 

Docker로 Plex Media Server 설치하기

Docker를 사용하여 Plex Media Server를 설치하는 방법 정리

blog.knowledgebox.online

 

 

 

[ Docker 설치 ]

Docker는 기본적으로 Linux에서 동작합니다.
Windows 또는 Mac에서는 Docker for Windows 또는 Docker for Mac을 설치하세요.
필자는 Arch Linux에서 Docker를 설치하였지만, Docker의 특성상 다른 배포판에서도 간단히 설치할 수 있습니다.

  • Arch Linux

    [계정@localhost ~]$ > sudo pacman -Syu docker docker-compose

  • Ubuntu

    [계정@localhost ~]$ > sudo apt install docker docker-compose

조금 더 편하게 Docker를 사용하기 위해 현재 로그인한 사용자를 docker 그룹에 넣어줍니다.

[계정@localhost ~]$ > sudo usermod -aG docker $USER

재부팅시 자동으로 실행되도록 서비스를 등록합니다.

 

      [계정@localhost ~]$ > sudo systemctl enable docker.service //서비스 활성화

      [계정@localhost ~]$ > sudo systemctl start docker.service //서비스 시작

      [계정@localhost ~]$ > docker info //서비스 확인

      [계정@localhost ~]$ > docker version //Docker 클라이언트 및 서버 정보 확인

 

 

 

 

 

 

[ DOCKER 기본 명령어 ]

 

 

ㅇ docke 설치

 

curl -fsSL https://get.docker.com/ | sudo sh

 

 

ㅇ sudo  없이 docker 사용하기

 

sudo su 

: root 권한 획득

 

또는

 

sudo usermod -aG docker $USER # 현재 접속중인 사용자에게 권한주기

sudo usermod -aG docker your-user # your-user 사용자에게 권한주기

sudo service docker restart 

현재 계정에서 로그인 / 로그아웃

 

 

* docker 그룹은 root 권환과 동일하므로 꼭 필요한 계정만 포함

 

 

ㅇ docker version  

도커 버전 확인

 

 

ㅇ 컨테이너 실행하기

 

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

 

옵션설명

-d detached mode 흔히 말하는 백그라운드 모드
-p 호스트와 컨테이너의 포트를 연결 (포워딩)
-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e 컨테이너 내에서 사용할 환경변수 설정
–name 컨테이너 이름 설정, 생략시 도커가 이름 자동 생성
–rm 프로세스 종료시 컨테이너 자동 제거
-it

-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션

-i : interactive  , -t : pseudo-tty

–link

컨테이너 연결 [컨테이너명:별칭]

deprecated 되어 조만간 사용 불가되므로 docker network 기능을 사용하는것을 권장.

 

 

ㅇ docker 목록 확인하기

 

docker ps [OPTIONS]

 

ex) 

docker ps 

 

옵션설명

-a :  실행되었다가 종료된 컨테이너(Exited(0))가 추가로 보임, 종료된 컨테이너는 재시작할 수 있고, 명시적으로 삭제할 수도 있다.

--all : 

 

 

 

o 이미지와 컨테이너 세부정보 확인하기

 

docker inspect hello-nginx

 

 

 

 

ㅇ 컨테이너에서 파일 꺼내기

 

docker cp  hello-nginx:/etc/nginx/nginx/conf ./

 

 

 

ㅇ 컨테이너에서 변경된 파일 확인하기

 

docker diff hello-nginx

 

 

 

ㅇ 컨테이너 변경사항을 이미지로 저장하기

 

docker commit -a "Foo Bar <foo@bar.com>" -m "add hello.txt" hello-nginx hello:0.2

 

 

 

 

 

ㅇ 컨테이너 중지하기

 

docker stop [OPTIONS] CONTAINER [CONTAINER...]

 

실행중인 컨테이너를 하나 또는 여러개 (띄어쓰기로 구분) 중지할 수 있다.

 

 

ex) TENSORFLOW 컨테이너 중지

docker ps # get container ID of TENSORFLOW

docker stop ${TENSORFLOW_CONTAINER_ID}

docker ps -a # show all containers

 

* 도커 ID의 전체 길이는 64자리 입니다. 하지만 명령어의 인자로 전달할 때는 전부 입력하지 않아도 됩니다. 예를 들어 ID가 abcdefgh...라면 abcd만 입력해도 됩니다. 앞부분이 겹치지 않는다면 1-2자만 입력해도 됩니다.

 

 

 

ㅇ 중지된 컨테이너 다시 시작하기

docker start CONTAINER 

 

 

ㅇ 컨테이너 재시작

 

docker restart CONTAINER 

 

 

ㅇ 컨테이너 제거하기

 

docker rm [OPTIONS] CONTAINER [CONTAINER...]

 

 

ex)

docker ps -a # get container ID docker

rm ${UBUNTU_CONTAINER_ID} ${TENSORFLOW_CONTAINER_ID}

docker ps -a # check exist

 

ex) 중지된 컨테이너 ID를 가져와서 한번에 삭제

docker rm -v $(docker ps -a -q -f status=exited)

 

* CONTAINER  는 이름 또는 컨테이너 아이디 사용 가능

 

 

 

 

 

 도커가 다운로드한 이미지 목록 확인하기 (images)

 

docker images [OPTIONS] [REPOSITORY[:TAG]]

 

ex)

docker images

 

 

 

ㅇ 이미지 다운로드하기 (pull)

 

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

 

ex) ubuntu 18.04 다운로드

docker pull ubuntu:18.04

 

이미지가 업데이트 된 경우는 pull명령어를 통해 새로 다운받을 수 있습니다.

 

 

 

ㅇ 이미지 삭제하기 (rmi)

 

docker rmi [OPTIONS] IMAGE [IMAGE...]

 

images명령어를 통해 얻은 이미지 목록에서 이미지 ID를 입력하면 삭제

docker rmi ubuntu 같이 이름만 지정하면 ubuntu 이름을 가진 모든 이미지가 삭제됨

이미지에서 (종료상태를 포함한) 파생된 컨테이너가 하나라도 있다면 이미지는 삭제할 수 없음

 

 

ㅇ 이미지 검색하기

 

docker search ubuntu

: ubuntu 관련 이미지들이 검색됨

 

 

 

 

 

ㅇ 컨테이너 로그 보기 (logs)

 

docker logs [OPTIONS] CONTAINER

 

 

ex)    --tail옵션으로 WORDPRESS 로그 마지막 10줄만 출력

docker ps

docker logs  --tail 10  ${WORDPRESS_CONTAINER_ID}

 

ex)  실시간 로그 확인 ( 중지는 ctrl-c )

docker logs -f ${WORDPRESS_CONTAINER_ID}

 

 

 

 

ㅇ 컨테이너에 접속하기

 

docker attach  CONTAINER

 

bash shell 이 실행된 컨테이너라면 입력 가능, 그외에는 출력만 볼 수 있음

exit 또는 ctrl-D 를 입력하면 컨테어나가 정지되므로 Ctrl-P , Ctrl-Q 로  컨테이너를 정지시키지 않고 빠져나온다.

 

 

 

 

ㅇ 컨테이너 명령어 실행하기 (exec)

: 실행중인 컨테이너에 들어가보거나 컨테이너의 파일을 실행하고 싶을 때 exec

 

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

 

ex) 실행중인 mysql 에 접속

docker exec -it mysql /bin/bash

 

# MySQL test

$ mysql -uroot

 

mysql> show databases;

+--------------------+

| Database             |

+--------------------+

| information_schema |

| mysql                  |

| performance_schema |

| sys                     |

| wp                     |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> quit

exit

 

ex) 쉘로 완전한 권한을 얻는 방법말고 바로 mysql명령어를 실행

docker exec -it mysql mysql -uroot

 

# MySQL test

$ mysql -uroot

 

mysql> show databases;

+--------------------+

| Database            |

+--------------------+

| information_schema |

| mysql                   |

| performance_schema |

| sys                       |

| wp                      |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> quit

 

 

 

 

 

ㅇ 컨테이너 업데이트

도커에서 컨테이너를 업데이트 하려면 새 버전의 이미지를 다운(pull)받고 기존 컨테이너를 삭제(stop, rm) 한 후 새 이미지를 기반으로 새 컨테이너를 실행(run)하면 됩니다.

 

 

 

 

ㅇ 컨테이너 데이타 백업

 

컨테이너 삭제시 유지해야하는 데이터는 반드시 컨테이너 내부가 아닌 외부 스토리지에 저장해야 합니다. 

데이터 볼륨Data volumes을 컨테이너에 추가해서 사용해하면 해당 디렉토리는 컨테이너와 별도로 저장되고 컨테이너를 삭제해도 데이터가 지워지지 않습니다.

 

ex) MySQL이라면 /var/lib/mysql디렉토리에 모든 데이터베이스 정보가 담기므로 호스트의 특정 디렉토리를 연결해주면 됩니다.

# before

docker run -d -p 3306:3306 \

   -e MYSQL_ALLOW_EMPTY_PASSWORD=true \

   --name mysql \

   mysql:5.7

 

# after

docker run -d -p 3306:3306 \

   -e MYSQL_ALLOW_EMPTY_PASSWORD=true \

   --name mysql \

   -v /my/own/datadir:/var/lib/mysql \ # <- volume mount

   mysql:5.7

 

위 샘플은 호스트의 /my/own/datadir디렉토리를 컨테이너의 /var/lib/mysql디렉토리로 마운트 하였습니다. 이제 데이터베이스 파일은 호스트의 /my/own/datadir디렉토리에 저장되고 컨테이너를 삭제해도 데이터는 사라지지 않습니다. 최신버전의 MySQL 이미지를 다운받고 다시 컨테이너를 실행할 때 동일한 디렉토리를 마운트 한다면 그대로 데이터를 사용할 수 있습니다. 

 

 

 

 

 

[ Docker Compose ]

지금까지 도커를 커맨드라인에서 명령어로 작업했습니다. 지금은 간단한 작업만 했기 때문에 명령이 길지 않지만 컨테이너 조합이 많아지고 여러가지 설정이 추가되면 명령어가 금방 복잡해집니다.

 

도커는 복잡한 설정을 쉽게 관리하기 위해 YAML방식의 설정파일을 이용한 Docker Compose라는 툴을 제공합니다. 

 

 

ㅇ Docker compose 설치

curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose

 

# test

docker-compose version

 

 

ㅇ wordpress 만들기

기존에 커맨드라인 명령어로 만들었던 wordpress를 compose를 이용해 만들어 보겠습니다.

 

먼저 빈 디렉토리를 하나 만들고 docker-compose.yml파일을 만들어 설정을 입력.

version: '2' 

services: 
   db: 
     image: mysql:5.7 
     volumes: 
       - db_data:/var/lib/mysql 
     restart: always 
     environment: 
       MYSQL_ROOT_PASSWORD: wordpress 
       MYSQL_DATABASE: wordpress 
       MYSQL_USER: wordpress 
       MYSQL_PASSWORD: wordpress 

   wordpress: 
     depends_on: 
       - db 
     image: wordpress:latest 
     volumes: 
       - wp_data:/var/www/html 
     ports: 
       - "8000:80" 
     restart: always 
     environment: 
       WORDPRESS_DB_HOST: db:3306 
       WORDPRESS_DB_PASSWORD: wordpress 
volumes: 
    db_data: 
    wp_data:

 

실행

docker-compose up 

 

 

 

'Linux > ubuntu' 카테고리의 다른 글

Flex 대신 jellyfin 을 운용해보자 (@docker)  (0) 2019.11.07
Flex Media Server 설치 (@docker)  (0) 2019.11.07
ubuntu 시스템 정보 확인  (0) 2019.11.07