permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock:
Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied
도커(Docker)는리눅스의응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는오픈 소스프로젝트이다.
컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지다.
컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공한다.
컨테이너는 OpenVZ, LXC, cri-o 등 여러 개가 있지만 도커가 사실상 표준으로 사용되고 있다
도커는 리눅스에서 운영 체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공한다.
리눅스 자체 기능인 namespace, cgroups, chroot 등과 같은 리눅스 커널의 기능들과 OverayFS, aufs와 같은 파일 시스템의 리소스 격리 기능을 사용하여 프로세스 단위의 독립된 가상 공간을 만든다.
도커는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 해준다.
도커 관련 프로젝트는 도커 컴포즈, 레지스트리, 도커허브, 도커 데스크탑 등 여러 가지가 있지만 도커라고 하면 일반적으로 도커 엔진을 의미한다. 도커 엔진은 컨테이너를 생성하고 관리하는 주체로써 컨테이너를 제어할 수 있는 다양한 기능을 제공하는 핵심기술로써
도커 엔진에서 사용하는 가장 중요한 요소가 이미지와 컨테이너
[Docker Architecture]
컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 어플리케이션을 구동하는데 필요한
라이브러리 및 실행 파일만 존재한다. 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간이다. 컨테이너 내부에 수많은 SW를 설치하고 설정 파일을 수정해도 호스트 OS에는 영향을 끼치지 않는다.
컨테이너 내부에서 SW개발 및 라이브러리 설치 등의 작업을 마친 후 운영 환경에 배포할 경우 컨테이너를 도커 이미지로 패키징하여 운영 서버에서 실행할 수 있다. 운영 서버에서 SW 설치 및 라이브러리 의존성을 고민할 필요가 없다. 서비스 개발 환경을 다른 서버에서 컨테이너로 똑같이 복제할 수 있기 때문에 개발/운영 환경의 통합이 가능해진다. 컨테이너를 이미지로 만들어 배포하는 시간이 빠르고 가상화된 공간을 사용할때 성능 손실도 거의 없다.
○ 도커 이미지 컨테이너 생성할때 필요한 요소.
이미지는 여러 개의 계층으로 된 바이너리 파일, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다.
이미지 이름은 [저장소이름]/[이미지이름]:[태그] 로 구성된다. - 저장소 : 이미지 저장된 장소. 기본 저장소는 도커 허브(Docker Hub) - 이미지이름 : 이미지 역할, 종류 등 나타내는 이름 - 태그 : 이미지 버전, 생략시 latest 사용
○ 도커 컨테이너 이미지 목적에 맞게 독립된 SW, 자원 및 네트워크을 사용할 수 있는 독립된 공간
대부분의 도커 컨테이너는 생성될 때 사용된 이미지의 종류에 따라 알맞은 설정 파일을 가지게 된다.
하나의 이미지로 부터 여러 개의 컨테이너를 생성 할 수 있다.
컨테이너는 이미지를 읽기 전용으로 사용, 변경된 내용은 컨테이너 내부에 저장하므로 원래 이미지에 영향을 미치지 않는다.
생성된 컨테이너는 독립된 파일시스템을 사용, 호스트와 분리되어 있으므로
특정 컨테이너에서 어떤 애플리케이션이 설치하거나 삭제되어도 다른 컨테이너와 호스트에는 영향이 없다.
[Docker Command] o docker 정보 docker info docker -v
o 도커 이미지 조회 docker images
o 도커 이미지 다운로드 docker image repository 부터 Docker image 를 다운로드 private repository 사용 가능
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull ubuntu:18.04
o 도커 container 생성 이미지가 없는 경우는 이미지 다운로드 후 컨테이너 생성
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker create -i -t --name myub ubuntu:16.04 -i 상호 입출력 -t tty활성화해서 bash 셀 사용 -it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
o 도커 container 생성 & 실행
컨테이너가 없는 경우 생성, 있다면 실행 rm은 컨테이너 종료시 저장된 내용 사라짐
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] docker run --rm -it ubuntu:16.04 docker run --rm -it --name myserver ubuntu:16.04 /bin/bash
-d detached mode 흔히 말하는 백그라운드 모드 -p 호스트와 컨테이너의 포트를 연결 (포워딩) -v 호스트와 컨테이너의 디렉토리를 연결 (마운트) -e 컨테이너 내에서 사용할 환경변수 설정 --name 컨테이너 이름 설정 --rm 프로세스 종료시 컨테이너 자동 제거 -i 상호 입출력 -t tty활성화해서 bash 셀 사용 -it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 ?link 컨테이너 연결 [컨테이너명:별칭]
o 도커 container 실행 컨테이너 ID나 이름을 이용하여 실행 / 진입
docker start [OPTIONS] CONTAINER [CONTAINER...]
-a, --attach Attach STDOUT/STDERR and forward signals --detach-keys string Override the key sequence for detaching a container -i, --interactive Attach container's STDIN
o 도커 container exit Ctrl + P,Q : 컨테이너를 종료하지 않고 exit exit : 컨테이너 종료 후 exit
o 도커 container List 컨테이너 목록 조회 - PORTS : 컨테이너가 개방한 포트와 호스크 연결한 포트 - NAMES : 컨테이너 고유한 이름
docker ps [OPTIONS]
-a, --all Show all containers (default shows just running) -f, --filter filter Filter output based on conditions provided --format string Pretty-print containers using a Go template -n, --last int Show n last created containers (includes all states) (default -1) -l, --latest Show the latest created container (includes all states) --no-trunc Don't truncate output -q, --quiet Only display container IDs -s, --size Display total file sizes
o 도커 container name 변경 docker create -i -t --name myub ubuntu:16.04 docker ps -a docker rename vigorous_bhaskara myubt
o 도커 container 종료 docker stop myubt docker stop $(docker ps -a -q)
o Docker network docker network ls docker network inspect bridge
bride : 컨테이너 생성할때 자동으로 연결되는 docker() 브리지 활용 172.17.0.x IP 대역을 순차적으로 할당
o 도커 container 로깅 docker logs [OPTIONS] CONTAINER
--details Show extra details provided to logs -f, --follow Follow log output --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes) -n, --tail string Number of lines to show from the end of the logs (default "all") -t, --timestamps Show timestamps --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
-- syslog 설정 docker run --rm -d --name syslog_container --log-driver=syslog ubuntu:16.04 echo syslogtest
test 라는 이름의 busybox 이미지를 백그라운드에서 도커 컨테이너로 실행하여, 1초에 한 번씩 현재 시간을 출력 docker run --name demo3 -d busybox sh -c "while true; do $(echo date); sleep 1;done"
o 도커리소스 제한 -- 메모리 swap 메모리는 메모리의 2배로 설정, swap로 변경 가능(기본메모리보다 커야함)
docker run --rm -it --memory="1g" ubuntu:16.04 docker run --rm -it --memory=10m --memory--swap=50m ubuntu:16.04
-- CUP 1024를 기준으로 비율로 산정 docker run --rm -it --memory=100m --cpu-shares=1024 ubuntu:16.04 docker run --rm -it --memory=100m --cpu-shares=512 ubuntu:16.04
ps aux | grep stres
-- cpu 수 제한 cupset-cups=0.3은 1,3번째CPU, 0-2는 1,2,3번째 CPU docker run --rm -it --memory=100m --cpuset-cpus=2 ubuntu:16.04
[htop] CPU 사용량 확인 agt-get install htop yum -y install epel-release && yum -y install htop
o 도커 컨테이너 어플리케이션 구축 -d detached 모드로 백그라운드 실행 사용자입력을 받지 않고 반드시 컨테이너에서 프로그램이 실행되어야 함 포그라인드 프로그램이 실행하지 않으면 컨테이너는 종료됨 docker ps로 확인할 수 없음-> ps -a 로 확인 - link : 컨테이너에서 컨터이너로 접근. 내부 IP와 포트를 사용하지 않고 컨테이터 alias로 접근 컨테이너를 순차적으로 실행