container

컨테이너 내부에서 어던 일이 일어나는지 아는 것은 디버깅뿐만 아니라 운영 측면에서도 중요하다. 도커는 컨테이너의 표준 출력(StdOut)과 에러(StdErr) 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공한다. docker logs 명령어를 사용해 컨테이너의 표준 출력을 확인할 수 있다. $ docker run -d --name mysql \ -e MYSQL_ROOT_PASSWORD=1234 \ mysql:5.7 $ docker logs mysql 2022-12-27 10:19:09+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.40-1.el7 started. 2022-12-27 10:19:10+00:00 [N..
업무 상 Docker와 Nginx를 통해 Blue Green 무중단 배포를 구축하려고 한다. OS는 Centos 7.x 기준이고 Application은 Spring Boot 기준으로 정리하였다. 현재 서버는 NCP에 Server를 사용하고 있고 Container Registry에 이미지를 저장해 사용하고 있다. 1. Centos에 Nginx 설치 먼저 yum 업데이트한다. $ sudo yum update 업데이트가 다 되었으면 yum 저장소에는 nginx가 없기 때문에 외부 저장소를 추가해서 설치해야 한다. $ sudo vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basea..
여러 기술들을 테스트를 하기 위해 Docker로 Centos나 Ubuntu를 설치하는 상황이 계속되다보니 항상 그때마다 찾아보기 귀찮아서 정리를 해보려고 한다. 1. Centos 이미지 pull 및 컨테이너를 실행 $ docker run --privileged -d --name centos centos:7 /sbin/init 버전과 컨테이너 명은 원하는 버전으로 바꾸면 된다. $ docker ps 2. centos 컨테이너 접속 $ docker exec -it centos bash 3. yum 업데이트 및 필요 Util 설치 $ yum update $ yum install yum-utils 4. Docker repository를 시스템에 등록 $ yum-config-manager --add-repo ht..
· MongoDB
Docker로 몽고DB 시작하기 먼저 아래 명령어로 몽고DB 이미지를 Pull 받는다. 태그에 버전을 지정하지 않으면 최신 버전을 Pull 받게 된다. $ docker pull mongo 아래 명령어로 정상적으로 몽고DB 이미지를 Pull 받았는지 확인한다. $ docker images 이미지를 Pull 받았으면 몽고DB의 볼륨으로 사용할 디렉터리를 하나 만든다. $ cd ~ $ mkdir mongodb 몽고DB 컨테이너의 볼륨을 로컬 디렉터리와 마운트시키지 않으면 컨테이너를 삭제할 때 컨테이너에 저장되어있는 데이터도 삭제되기 때문에 복구할 수 없다. 그리고 아래 명령어를 통해 몽고DB 이미지를 실행한다. $ docker run --name mongodb -v ~/mongodb:/data/db -d -p..
· ETC
이전 글에서는 Jenkins을 이용해 jar파일 자동화 배포를 해보았다. 이번에는 소스코드를 도커 이미지 화 후 서버에서 해당 이미지를 받아 구동시키는 파이프라인을 구축하려고 한다. Blue Ocean 플러그인을 사용해 빌드가 되는 상태를 시각화하고 파이프라인을 쉽게 만들어보겠다. 이전 글과 마찬가지로 Jenkins 서버는 Docker로 로컬에서 구동했고, Jenkins 서버 구축 방법은 이전 글을 참고 바란다. 배포할 서버는 Naver Cloud Platform Server를 사용했고, 컨테이너 저장소는 Naver Container Registry를 사용했으므로 AWS EC2나 ECR을 사용하는 경우 설정법이 조금 다를 수 있다. 대략 진행되는 단계를 그림으로 나타내면 아래와 같다. 구축 예제 1. J..
파드 내에 초기화만을 담당하는 컨테이너를 설정할 수도 있다. 그러면 초기화만을 수행하는 컨테이너와 요청을 처리하는 컨테이너를 별도로 개발하여 각각 재사용할 수 있다. 예를 들어 스토리지를 마운트할 때 '스토리지 안에 새로운 디럭터리를 만들고, 소유자를 변경한 후 데이터를 저장'하는 것과 같은 초기화 처리를 전담할 수 있다. Init-sample.yml apiVersion: v1 kind: Pod metadata: name: init-sample spec: containers: - name: main # 메인 컨테이너 image: ubuntu command: ["/bin/sh"] args: ["-c", "tail -f /dev/null"] volumeMounts: - mountPath: /docs # 마운..
프로젝트 폴더 내부에 docker-compose.yml 파일을 저장한다. version: '2.2' services: my_web: container_name: my-web # 컨테이너 명 image: aspendigital/codeigniter:latest # 이미지 ports: # 포트 설정 - 80:80 volumes: # 볼륨 설정 - $PWD:/var/www/html docker-compose up 명령어로 다른곳에서도 같은 환경으로 설치할 수 있다. 참고 Docker 자습서 - 8부: Docker Compose 사용 Docker Compose를 설치하고 사용하는 방법을 설명합니다. docs.microsoft.com
· Spring
이 전 블로그 글에서 Spring Boot 프로젝트를 생성하고 Prometheus와 연동까지 해봤다. 이제 Grafana를 연동해 시각화를 해보자. Grafana 설치 및 사용 Grafana 역시 도커로 설치하겠다. docker run -d -p 3000:3000 --name grafana grafana/grafana 설치 후 컨테이너가 실행됫으면 http://localhost:3000에 접속해보면 grafana 홈페이지에 접속될 것 이다. 초기 로그인은 admin/admin으로 접속해 비밀번호를 바꾸면 된다. 이제 Data source를 추가해 Prometheus와 연동해보자 전 블로그 글에서 접속했던 http request들이 확인되면 정상적으로 연동이 된 것이다. 전체 코드는 아래 GitHub에서 ..
· Spring
프로젝트 중 모니터링 시스템을 구현해보려고 한다. Prometheus + Grafana를 이용해 Spring Boot 애플리케이션을 모니터링 해 볼 것이다. 모니터링 시스템은 너무많은 종류가 있어서 본인이 사용하고 싶은것으로 사용해도 좋을듯하다. 추후에는 cAdviser도 연동해 컨테이너 모니터링까지 해볼 예정이다. 먼저 Prometheus, Grafana가 무엇인지 간단하게 알고 가자. Prometheus Prometheus는 SoundCloud사에서 만든 오픈소스 시스템 모니터링 및 경고 툴킷이다. 지금은 독립형 오픈소스 프로젝트이며 많은 회사들이 사용 하고 있고, 또한 kubernetes에서도 Prometheus를 사용하여 매트릭 수집 및 대시보드 구축하는 방식을 장려하고 있다. Jobs/expor..
이번엔 MySQL 컨테이너(DB 컨테이너)와 PHP 컨테이너(AP 컨테이너)를 컨테이너 네트워크로 연결해 보겠다. 1. 컨테이너 네트워크 작성 2. MySQL 서버 기동 -e 옵션으로 환경 변수 MYSQL_ROOT_PASSWORD를 저장했다. 이러한 환경 변수를 사용해 컨테이너를 개발하면 이미지의 재사용성이 좋아진다. 3. 애플리케이션 컨테이너 개발 파일 구조는 다음과 같다 php-example Dockerfile php index.php php-example 디렉터리에서 컨테이너 이미지를 빌드한다. 정상적으로 빌드가 되었다면 docker images로 생성된 이미지를 확인할 수 있다. 4. 컨테이너 실행 docker run [옵션] 리포지터리명[:태그]로 빌드한 이미지를 컨테이너로 실행할 수 있다. h..
beekei
'container' 태그의 글 목록