AWS EC2 Ubuntu 20.04 서버에, 도커를 사용하여 Pinpoint를 설치하는 방법이다.

Pinpoint란?
네이버에서 개발한 오픈소스 웹 어플리케이션 모니터링 툴

 

0. 준비 : EC2 서버에 ssh 접속

 

1. docker와 docker-compose를 설치

>> 설치 방법은 다음 글 참고 https://life-coding.tistory.com/141

 

2. 적당한 위치에 pinpoint-docker.git을 클론할 폴더 생성

(아래는 홈 디렉토리 안에 repos라는 폴더를 만들어 그 안으로 이동하는 예)

cd ~
mkdir repos
cd repos

 

3. pinpoint-docker git repository를 복제

git clone https://github.com/naver/pinpoint-docker.git

 

4. pinpoint-docker 폴더 안으로 이동

cd pinpoint-docker

 

5. pinpoint 도커 이미지 다운 & 설치 & 실행

docker-compose pull && docker-compose up -d
※ 참고
위 명령 돌리기 전에, 사용중인 포트를 먼저 체크해보자.
- 3306 포트는 미사용중이어야 한다. (이미 3306 포트로 DB가 실행되고 있다면 포트 binding을 못해서 pinpoint가 실행 안됨. 기존에 사용중이던 mysql을 stop 하고 다시 docker-compose up -d를 해주어야 한다.)
- 그 외에도, 설정에 기록된 포트들은 모두 미사용 중이어야 한다.

 

6. 현재 실행중인 도커 이미지 확인

docker ps

 

7. 본인의 서버주소:8080으로 접속되면 성공! (아래와 같이 PINPOINT 화면이 나오면 된다.)

 

참고

https://m.blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=bokmail83&logNo=221861896820

1. 도커 이미지

1) 도커 이미지 검색

# docker images

2) 도커 단일 이미지 삭제

# docker image rm <image ID>

3) 도커 모든 이미지 삭제

# docker rmi $(docker images -q) -f

 

2. 도커 컨테이너 생성

1) 도커 컨테이너 생성 & 실행

# docker run <옵션> --name <컨테이너이름:test> <이미지 Repository>

2) 도커 컨테이너 생성만

# docker create <옵션> --name <컨테이너이름:test> <이미지 Repository>

 

3. 도커 컨테이너 접속

1) 도커 컨테이너 접속

# docker exec -it <컨테이너이름> /bin/bash

 

4. 도커 컨테이너 빠져나오기

컨테이너에서 빠져나오는 방법은 두가지가 있습니다.

1) 컨테이너를 종료하면서 빠져나오기

# exit 또는 ctrl+D

2) 컨테이너가 가동되는 상태를 유지하면서 접속만 종료하기

# ctrl + P 입력 후 Q 입력

 

5. 도커 컨테이너 실행/종료

1) 컨테이너 실행

# docker start <컨테이너이름>

2) 컨테이너 종료

# docker stop <컨테이너이름>

3) 모든 컨테이너 한번에 종료

# docker stop $(docker ps -qa)

4) 컨테이너 강제 종료 (SIGKILL 시그널 전달)

# docker kill [container]

5) 컨테이너 일시 중지

# docker pause [container]

6) 컨테이너 재개

# docker unpause [container]

 

6. 컨테이너 조회

1) 실행중인 컨테이너 리스트 출력

# docker ps

2) 전체 컨테이너 리스트 출력

# docker ps -a

3) 컨테이너 상세 정보 확인

# docker inspect [container]

 

7. 컨테이너 삭제

1) 개별 컨테이너 삭제

# docker rm <컨테이너이름>

2) 모든 컨테이너 한번에 삭제

# docker rm $(docker ps -qa)

3) 중지된 모든 컨테이너 삭제

# docker container prune

 

8. 컨테이너 로그 확인

1) 개별 컨테이너 로그 확인

# docker logs [컨테이너이름]

2) 마지막 로그부터 사용자가 지정한 라인까지 출력 (로그가 너무 많아 읽기 힘든 경우)

# docker logs --tail 10 [컨테이너이름]

3) 입력받은 유닉스 시간 이후의 로그 확인, -t 옵션으로 타임스탬프 표시 가능

# docker logs --since 1549150300 -t [컨테이너이름]

4) 실시간으로 생성되는 로그를 스트림으로 확인

# docker logs --tail 10 -f [컨테이너이름]

 

 

참고

https://narup.tistory.com/198

https://kimjingo.tistory.com/58

https://velog.io/@bbangi/Docker-%EC%83%9D%EC%84%B1-%EC%8B%A4%ED%96%89-%EC%A2%85%EB%A3%8C

https://sungwookkang.com/1299

준비 : EC2에 ssh로 접속한다.

 

Docker 설치

1. 패키지 업데이트 

sudo apt-get update

2. https관련 패키지 설치

sudo apt install apt-transport-https ca-certificates curl software-properties-common

3. docker repository 접근을 위한 gpg 키 설정

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4. docker repository 등록

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

5. 다시 패키지 업데이트

sudo apt update

6. 도커 설치

sudo apt-get install docker-ce docker-ce-cli containerd.io

7. 설치 확인

sudo docker --version

8. 도커로 hello-world 이미지 구동해봄

sudo docker run hello-world

9. 아래와 같은 메시지가 나오면 성공!

latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:926fac19d22aa2d60f1a276b66a20eb765fbeea2db5dbdaafeb456ad8ce81598
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

 

Docker-compose 설치

docker-compose를 standalone 방식으로 설치하는 방법이다.

 

1. Compose standalone을 다운로드하고 설치

sudo curl -SL https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

2. 설치한 파일에 실행권한 추가

sudo chmod +x /usr/local/bin/docker-compose

3. 어느 위치에서든 docker-compose 명령을 사용하고 싶으면, 아래 심볼릭 링크 추가

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

4. docker-compose 버전 확인

sudo docker-compose -v

 

sudo 없이 docker 명령어 사용하기

1. 현재 사용자를 docker group에 포함

sudo usermod -aG docker ${USER}

사용자명이 ubuntu라면,

sudo usermod -aG docker ubuntu

2. 터미널 재시작 후 결과 확인(끝에 docker가 있는지 확인)

id -nG

 

참고

https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation

https://docs.docker.com/compose/install/standalone/

https://everydayyy.tistory.com/121

문제상황

리눅스에서 docker login을 하려고 하는데, 아래와 같은 메시지가 뜨면서 로그인이 안되는 경우가 있다.

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth": dial unix /var/run/docker.sock: connect: permission denied

 

해결방법

/var/run/docker.sock에 접근할 권한이 없어서 그렇다. sudo 명령어 사용해서 로그인 하면, 에러 없이 잘 된다.

# sudo docker login

# Username: 아이디 입력

# Password : 비밀번호 입력

로그인 된다.

도커란?

컨테이너 기반의 오픈소스 가상화 플랫폼이다. 어플리케이션을 인프라스트럭처와 분리하여 신속하게 개발, 배포, 운영할 수 있게 해준다.  Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있다.

 

가상화란, 물리적 자원인 하드웨어를 효율적으로 활용하기 위해서 하드웨어 공간 위에 가상의 머신을 만드는 기술이고

컨테이너란, 컨테이너가 실행되고 있는 호스트 os의 기능을 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술이다.

 

도커를 사용하는 이유

  • 개발 과정에서 다른 라이브러리와 충돌하는 것을 방지하기 위해 격리된 환경이 필요할 때(컨테이너 별로 상이한 설정이 가능, 서로 간섭 안받음)
  • 개발 환경과 운영 환경의 동일성이 보장됨(실행환경의 비일관성 문제가 해결됨)
  • 완성된 서비스를 배포할 때, 또는 배포 중인 서비스를 받아서 실행해 볼 때 용이함(이미지만 가져다 컨테이너에 올리면 됨)
  • 운영중인 서버를 다른 서버로 옮겨야 할 때(서버 스펙이 달라져도 동일한 실행을 보장)
  • 다수의 서버를 운영해야 할 때 (클라우드 서버를 이용하거나, 로드 분산을 위해 동일한 서비스를 여러 서버에 배포해야 하는 등의 경우, 다수 서버를 각각 설정할 필요 없으므로 배포 및 관리가 쉬워짐)

 

도커 아키텍처

도커는 클라이언트-서버 아키텍처를 사용한다. 도커 데몬은 컨테이너를 빌드, 실행, 배포하는 역할을 담당하고, 도커 클라이언트는 이러한 도커 데몬과 REST API로 통신한다. 도커 클라이언트와 데몬은 한 컴퓨터 내에서 실행될 수도 있고, 별개의 컴퓨터에서 실행될 수도 있다.

도커 데몬 (The Docker daemon)

도커 데몬은, 도커 API 요청을 받아 도커 객체(이미지, 컨테이너, 네트워크 볼륨 등)을 관리하는 역할을 한다.

 

도커 클라이언트 (The Docker client)

도커 클라이언트는, 사용자가 도커와 상호작용 하는 주요 수단이다. 사용자가 docker run 같은 명령어를 사용하면, 도커 클라이언트가 해당 명령을 데몬에 보내고, 데몬이 명령을 수행한다. 도커 클라이언트는 하나 이상의 데몬과 통신할 수 있다.

 

도커 데스크탑 (Docker Desktop)

도커 데스크탑은 컨테이너화된 애플리케이션과 마이크로서비스를 구축하고 공유할 수 있는 Mac, Windows 또는 Linux 환경을 위한 설치하기 쉬운 애플리케이션이다. 도커 데스크탑에는 도커 데몬(dockerd), 도커 클라이언트(docker), Docker Compose, Docker Content Trust, Kubernetes 및 Credential Helper가 포함된다.

 

도커 레지스트리 (Docker registries)

도커 레지스트리는 도커 이미지를 저장한다. 도커 허브(Docker Hub)는 공개된 레지스트리(저장소)로, 누구나 이용 가능하다.  도커는 기본적으로 도커 허브에서 이미지를 찾도록 설정되어 있으나, 자신만의 비공개 레지스트리를 운영하는 것도 가능하다.

 

도커 객체

Docker를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 개체를 만들고 사용하게 된다. 이러한 개체 중 일부에 대한 간략한 개요를 살펴보면 다음과 같다.

 

이미지

이미지는 읽기 전용 템플릿으로, 도커 컨테이너를 생성하는 명령어들이 포함되어 있다. 주로 이미지는, 다른 이미지를 기반으로 생성해서 약간의 커스터마이징을 하게 된다. 예를 들어, 사용자는 ubuntu 이미지를 기반으로 이미지를 빌드하여 아파치 웹 서버나 다른 어플리케이션을 설치 및 설정 할 수 있다.

 

이미지는 직접 생성하거나, 공개된 레지스트리에 등록된 이미지를 가져다 사용할 수도 있다. 자신만의 이미지를 생성하려면, 이미지 생성하는 명령과 스텝을 기술한 Dockerfile을 작성하고 실행하면 된다. Dockerfile의 각 명령은 이미지 안의 하나의 레이어를 생성한다. Dockerfile을 변경하고 이미지를 다시 빌드하면, 변경된 레이어만 다시 빌드된다. 이점이 이미지를 가볍고, 작고, 빠르게 만들 수 있는 기술이다.

 

컨테이너

컨테이너는 이미지의 실행 가능한 인스턴스이다. 사용자는 Docker API나 CLI를 이용해 컨테이너를 생성, 시작, 중지, 이동, 삭제할 수 있다. 컨테이너를 하나 이상의 네트워크에 연결하거나, 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지를 생성할 수도 있다.

 

기본적으로 컨테이너는 다른 컨테이너 및 해당 호스트 시스템과 비교적 잘 격리되어 있다. 컨테이너의 네트워크, 스토리지 또는 기타 기본 하위 시스템이 다른 컨테이너나 호스트 시스템과 얼마나 격리되었는지 제어할 수 있다.

컨테이너는 이미지 + 환경설정 옵션(컨테이너를 만들거나 시작할때 설정 옵션 추가 가능)으로 정의된다. 컨테이너가 제거되면 영구 저장소에 저장되지 않은 상태 변경 사항은 사라진다.

 

 

참고

https://docs.docker.com/get-started/overview/

https://en.wikipedia.org/wiki/Docker_(software) 

https://velog.io/@markany/%EB%8F%84%EC%BB%A4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%96%B4%EB%96%A4-%EA%B2%83-1.-%EB%8F%84%EC%BB%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

+ Recent posts