Programming-[Base]/Docker 20

[TIL]Connection error..Max Retries... localhost로 호출 -> docker로 호출시 host

현상 python에서 requests를 통해 http://localhost:8080로 환경변수를 설정한 후 요청을 보내는데 자꾸 아래처럼 에러가 났다. HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /xxx (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 61] Connection refused')) 원인 .env에 아래처럼 환경변수를 지정해서 서버를 실행했었다. TEST_URL=http://localhost:8080 그리고,, docker를 통해서 실행했다! docker를 통해 host 컴퓨터인 localhost를 호..

도커 교과서(엘튼 스톤맨, 심효섭) - 20. 비동기 통신, 마무리

1. 비동기 메시징 동기적, 비동기적 통신 방식에 대한 설명은 생략한다. 비동기 메시징 방식을 이용하면 서버와 클라이언트 사이의 메시지 큐에 요청 또는 응답 내용을 저장하고 있으므로 혹시나 서버나 클라이언트에서 문제가 발생하더라도 통신 내용을 메시지 큐에 안전하게 저장해놓을 수 있다는 장점이 있다. 레디스 사용 실습 실습으로 레디스 컨테이너를 실행해본다. docker network create ch21 docker container run -d --name redis --network ch21 diamol/redis docker container logs redis --tail 1 메시지를 보내본다. 메시지큐는 일반적으로 최적화된 전용 통신 프로토콜을 갖고 따로 메시지에 가공을 하지 않는 형태이기 때문에..

도커 교과서(엘튼 스톤맨, 심효섭) - 18. 리버스 프록시-1: nginx, 로드밸런싱, 라우팅과 SSL, Traefik

1. 프록시, 리버스 프록시 서버 보통 프록시 서버는 클라이언트단을 관리하는 의미인 것 같다. 내 컴퓨터에서 인터넷으로 요청을 하면 프록시가 적용된 네트워크에서 해당 요청을 가로채서 허용된 사이트인지 확인하거나 빠른 속도를 위해 접근하려는 사이트의 캐시를 제공하는 용도로 사용한다. 리버스 프록시 서버는 서버단을 관리하는 의미인 것 같다. 서버로 들어오거나 서버에서 나가는 모든 트래픽을 관리하면서 해당 트래픽이 어떤 애플리케이션에서 출발한 것인지 파악한다. 그리고 서버 내 애플리케이션의 응답 내용을 캐싱하였다가 적절하게 가공하여 클라이언트에게 전달하기도 한다. [리버스 프록시- 애플리케이션 컨테이너들간 상호 작용 그림 추가] 그림에서 리버스 프록시는 포트를 외부로 공개한 유일한 컨테이너가 된다. 이 덕분에..

도커 교과서(엘튼 스톤맨, 심효섭) - 17. 로그 설정: fluentd, elasticsearch, kibana

1. 도커의 로깅 구성 도커는 표준 출력(stdout), 표준 오류(stderr) 스트림을 주시하면서 스트림을 통해서 출력되는 내용을 수집한다. 이런 표준 입출력들은 운영체제의 커널과 연결된 셸(터미널)로 입력받고, 표시해주는 것을 의미한다. 어쨌든 도커의 컨테이너는 이런 방식을 통해서 수집된다. 포어그라운드로 다음 컨테이너를 실행해보면 터미널에 표준 출력이 출력되는 것을 볼 수 있다. 5초마다 찍힌다. docker container run diamol/ch15-timecheck:3.0 따라서 애플리케이션이 표준 출력으로 로그를 출력한다면, 도커 컨테이너에서도 이를 감지하여 로그를 저장하거나 출력할 수 있게 된다. 포어그라운드로 실행되는 컨테이너뿐만 아니라 터미널 세션과 분리되어 데몬으로 작동하는 컨테이..

도커 교과서(엘튼 스톤맨, 심효섭) - 16. 이미지 최적화, 환경 변수 설정 관리

이미지를 최적화하는 것은 이미지의 용량을 최소화하고 보안 위험을 줄일 수 있다. 1. 이미지 최적화 이미지를 확인하고 관리하는 명령어로 다음 명령어들을 사용할 수 있다. docker system df # 현재 환경에서의 이미지, 컨테이너, 볼륨, 캐시 등 상황 표시 docker system prune # 현재 사용하지 않는 이미지 레이어나 빌드 캐시를 비워줌 컨테이너나 이미지 레이어는 잠시 사용 중이지 않을 수도 있으므로 docker system prune 명령어는 신중히 사용해야한다. rm 명령어는 용량을 줄여주지 않는다. FROM diamol/base CMD echo app- && ls app && echo docs- && ls docs COPY . . RUN rm -rf docs 이미지에서 불필요한..

도커 교과서(엘튼 스톤맨, 심효섭) - 15. 다중 아키텍처 빌드

1. 다중 아키텍처 지원이 필요한 이유 이 교재의 맨 처음 글에서 도커는 가상 머신과 다르게, 실행하고 있는 컴퓨터와 운영체제는 공유하면서 IP, host, 드라이브를 개별적으로 갖는다고 했었다(architecture-specific). 따라서 도커의 이미지 빌드 및 실행은 대상 컴퓨터의 운영 체제로 어떤 아키텍처를 갖느냐에 영향을 받게 된다. arm64, amd64 등 여러 아키텍처에 따라 개별적인 관리가 필요하다. 클라우드에서만 하더라도 AWS에서 ARM 아키텍처를 사용하여 가상 머신을 열고 노드로 컨테이너를 구동하면 AMD 프로세서를 사용하는 경우에 비해서 단가가 절반 정도로 저렴하다고 한다. 그리고 IoT 기반의 프로세서에서 동작하게 할려는 경우 라즈베리파이처럼 ARM 프로세서를 사용하는 아키텍처..

도커 교과서(엘튼 스톤맨, 심효섭) - 14. 도커 원격 접속, 보안과 context

1. 도커 API 접속 엔드포인트 도커 엔진에 접근하여 여러 작업들을 할려면 도커 API에 요청을 해야된다. 그리고 기본적으로 도커 API는 로컬 채널에만 열려있다. 다시 말해 본인의 컴퓨터로만 본인 컴퓨터의 도커 엔진에 접근할 수 있다. 비보안 HTTP로 도커 엔진 접근해보기 비보안 HTTP 접근 설정은 위험하다. 아무나 내 컴퓨터의 도커 엔진에 인증없이 접근하여 비트코인 채굴 등의 서비스를 컨테이너로 띄워버릴 수도 있다! 그냥 실습만해보고 설정을 원래대로 돌려놔야한다. 원격으로 내 컴퓨터의 도커 엔진에 접속하는 연습을 위해 HTTP 접근을 허용해본다. 도커 데스크탑의 설정 > General 부분에서 Expose daemon on tcp://localhost:2375 without TLS라는 체크박스에..

[에러] 도커 교과서(엘튼 스톤맨, 심효섭) - 13. 지속적 통합(CI) 파이프라인 구축. Gogs, 젠킨스

1. 도커로 CI 작업하기 CI란 CI는 배포가 가능한 결과물(artifact)을 코드로부터 만들어내는 파이프라인이다. 이 파이프라인에는 빌드, 테스트, 패키징 등이 포함된다. 코드 변경이나 특정 시각마다 CI 절차가 실행되도록 자동화할 수 있다. 도커를 이용하여 CI 인프라 구축 배포하고자하는 프로그램을 도커로 이미지화하면 기술 스택에 상관없이 똑같은 과정을 거칠 수 있기 때문에 CI 절차의 일관성을 확보할 수 있다. 깃허브, 애저 데브옵스 등 여러 CI를 지원하는 매니지드 서비스가 있으나, 컨테이너 내부에서 CI 인프라를 구축할 수 있도록 도커를 이용하여 빌드를 할 수도 있다. 이렇게 하면 조직 내부 보안을 유지할 수도 있고 인터넷이 다운된 상황에서도 내부적으로 CI를 진행할 수 있다. 2. CI 구..

도커 교과서(엘튼 스톤맨, 심효섭) - 12. 업데이트와 롤백

이번 글에서는 애플리케이션을 업데이트하고 롤백하는 절차에 대해서 배운다. 애플리케이션이 어떤 상황에서도 잘 유지되고 업데이트 되기 위한 설정을 하는 과정이며, 교재에서 제시하는 여러 상황별로 애플리케이션의 버전을 업데이트하면서 서비스의 고가용성을 확보하는 연습을 해본다. 1. 업데이트 프로세스 기본적인 업데이트 프로세스 직접 만든 이미지를 주기적으로 업데이트해야하는 경우가 있으나, 내 이미지를 업데이트 하지않더라도 이미지가 참조하는 여러 부분들의 업데이트 때문에라도 주기적인 업데이트가 필요하다. 대표적으로 생각하고 있어야하는 업데이트 주기가 적어도 4가지가 있다. 애플리케이션의 의존 모듈 업데이트 코드를 컴파일하는 SDK 업데이트 애플리케이션이 동작하는 플랫폼 업데이트 운영체제 업데이트 각 라이브러리와 ..

도커 교과서(엘튼 스톤맨, 심효섭) - 11. 스택, 컨피그, 시크릿, 스웜에서의 볼륨

1. 스택과 배포 스택은 여러 애플리케이션(서비스)와 그 애플리케이션의 레플리카, 네트워크 등을 관리하는 단위다. 스택도 일급 객체라서 명령어로 직접 호출이 가능하다. 컴포즈 파일을 이용해서 stack deploy를 해본다. 기본 배포 cd ./ch13/exercises docker stack deploy -c ./todo-list/v1.yml todo docker stack ls docker service ls stack deploy 명령어를 이용하여 배포하면, '_default'라는 이름이 붙은 네트워크가 생성되고 yml 파일의 내용을 따라 서비스가 실행되는 것을 볼 수 있다. -c 부옵션은 서비스, 네트워크, 볼륨 등의 정보를 정의한 컴포즈 파일의 path를 입력한다는 의미이다. 저자의 애플리케이션..