Journey to Security/클라우드 44

[Docker] Dockerfile을 이용해서 이미지 빌드하고 실행하기 (2) - Apache

이어서, nginx처럼 완성된 웹 서버 이미지가 아닌 ubuntu 베어(bare) 이미지에서 시작하여 Apache를 설치하고 구성해본다. 또한 컨테이너 내부에 html 파일을 생성하고, 호스트 작업 디렉토리에 만든 html 파일을 컨테이너 내부 디렉토리로 복사(COPY)해서 각각의 html 파일을 띄워보는 것도 테스트 해본다.1) 호스트에서 html 파일 만들기COPY 지시어를 통해 호스트의 html 파일을 컨테이너 내부로 복사하기 위해 다음과 같이 작업 디렉토리에 미리 파일을 생성해 둔다. 명령어:root@host:/home/username/dockerfile# echo "This is from Outside" > out-test.html 2) Dockerfile1 작성현재 작업 디렉토리가 /home/..

[Docker] Dockerfile을 이용해서 이미지 빌드하고 실행하기 (1) - Nginx

도커파일(Dockerfile)은 단순히 이미 만들어진 도커 이미지를 가져다 쓰는 것을 넘어서, 목적에 맞는 어플리케이션 환경을 직접 구성하고 배포하는 것을 가능하게 해준다. Dockerfile이 무엇인지, 어떤 문법으로 작성되는지 살펴보고, 실제 Nginx와 Apache 웹 서버를 커스텀 이미지로 빌드해보자.1. Dockerfile이란?Dockerfile은 도커 이미지를 생성하기 위한 설정 파일이다. 이미지가 어떤 베이스 위에서 만들어지고, 어떤 소프트웨어가 설치되며, 실행 시 어떤 명령을 수행할지 정의하는 청사진과 같다.이러한 작업을 Dockerizing(도커라이징)이라고 부르며, 이는 인프라 구성을 코드로 관리하는 IaC(Infrastructure as Code)의 시발점이자 CI/CD(지속적 통합/..

[Docker] Volume을 활용한 정적 웹사이트 배포와 컨테이너 간 데이터 공유

웹 서비스를 개발하고 배포할 때 가장 기본이 되는 것은 정적 파일(HTML, CSS, JS)을 웹 서버에 띄우는 것이다.Docker를 사용하면 Nginx와 같은 웹 서버를 순식간에 실행할 수 있다.하지만 보다 확장성 있는 아키텍처를 위해서는 단순히 컨테이너를 띄우는 것에서 나아가, 호스트의 파일을 컨테이너와 연결하고(Bind Mount), 여러 컨테이너가 동일한 데이터를 바라보게 설정(--volumes-from)할 수 있어야 한다. 간단한 포트폴리오 웹사이트 예제를 통해 Docker Volume의 활용법을 알아보자. 1. 실습 환경 준비: 정적 파일 준비먼저 웹 서버에 띄울 소스 코드가 필요하다.구글에 "free bootstrap template"을 검색해서 Bootstrap 기반의 간단한 포트폴리오 템..

[Docker] 바인드 마운트(Bind Mount)를 활용한 데이터 동기화 (3)

이번에는 워드프레스와 MySQL을 링크하여 컨테이너가 삭제되어도 호스트 경로에 데이터가 보존되는 바인드 마운트를 구현해본다. WordPress와 MySQL 링크(--link)에 대한 내용은 아래 포스팅에 자세히 정리되어 있다. https://nanujahope.tistory.com/1011. MySQL 컨테이너 실행 (Host Volume 마운트)가장 먼저 데이터베이스 컨테이너를 생성한다.핵심은 컨테이너 내부의 데이터가 저장되는 경로를 내 로컬 호스트의 경로와 연결하는 것이다.docker run -d --name wp_db \-e MYSQL_ROOT_PASSWORD=rootoor \-e MYSQL_DATABASE=wordpress \-v /home/wp_mysql:/var/lib/mysql \mysql:..

[Docker] 바인드 마운트(Bind Mount)를 활용한 데이터 동기화 (2)

지난 포스팅에 이어 계속해서 바인드 마운트 방식을 이용한 도커 볼륨 관리 방법에 대해 알아보자. 1. 작업 디렉토리 준비 및 컨테이너 실행호스트의 현재 경로($(pwd))에 있는 index.html 파일을 Nginx가 웹 서비스를 제공하는 경로(/usr/share/nginx/html)에 마운트한다.# 1. 작업 디렉토리 이동 및 확인cd Desktop/webs/pwd/home/ubuntu/Desktop/webslsindex.html# 2. Bind Mount를 적용하여 새 컨테이너 생성하고 실행docker run --name web_four -v $(pwd):/usr/share/nginx/html:rw -p 2003:80 -d nginx 2. 컨테이너 상태 확인docker psCONTAINER ID ..

[k8s] 스프링부트(Spring boot) 서버를 파드(Pod)로 띄우기

쿠버네티스에서 스프링부트 서버를 파드로 띄우는 과정을 알아보자.1. IDE에 스프링 프로젝트 열기먼저 스프링 이니셜라이저(Spring Initializr)에서 스프링부트(Spring Boot) 프로젝트 demo 파일(zip)을 다운받아서 원하는 경로에 압축을 풀어놓는다. 이전 포스팅 참고 : https://nanujahope.tistory.com/105 그 다음, IDE에(ex. IntelliJ) 스프링 프로젝트(ex. demo)를 오픈한다.2. 테스트용 코드 작성src/main/java/com.example.demo/ 디렉토리에 AppController라는 자바 클래스를 새로 만든다. 파드가 실행되는 것만 확인하는 용도이므로 다음과 같이 간단한 예시 코드를 복붙해서 정상적으로 실행(run)되는지 확인한..

[Docker] 바인드 마운트(Bind Mount)를 활용한 데이터 동기화

컨테이너는 기본적으로 데이터를 저장하지 않는 휘발성(Stateless) 프로세스다.도커는 데이터를 영구적으로 보존하거나 호스트와 공유하기 위해 '볼륨(Volume)'과 '바인드 마운트(Bind Mount)' 기능을 제공한다.우선 이번 포스팅에서는 바인드 마운트 방식에 대해 알아보자. 바인드 마운트는 호스트의 특정 파일 경로를 컨테이너 내부에 직접 연결하므로, 호스트에서 소스 코드를 수정하면 컨테이너에 즉시 반영된다. 개발 환경에서는 소스 코드를 수정할 때마다 이미지를 다시 빌드하는 것이 비효율적이므로, 바인드 마운트 기능을 활용한다. 예시: 호스트에 웹 페이지 소스 디렉터리를 생성하고, 호스트의 디렉터리를 Nginx 컨테이너의 웹 루트 디렉터리에 마운트 하여 호스트에서 파일을 수정하면 웹 페이지가 변경..

[Docker] 컨테이너의 네트워크 구조: docker0과 veth

도커(Docker)를 사용할 때 단순히 컨테이너를 띄우는 것을 넘어, 실제 서비스 운영을 위해서는 네트워크(Network)가 어떻게 연결되는지, 그리고 컨테이너 내부의 데이터를 어떻게 관리할 것인지에 대해 이해해야 한다. Nginx와 Ubuntu 두 개의 컨테이너를 이용해 도커의 네트워크 인터페이스 구조(veth, bridge)를 직접 확인해보자.1. 컨테이너 포트 포워딩과 네트워크 격리 확인먼저 Nginx 웹 서버와 우분투 컨테이너를 각각 실행하여 외부에서 접근이 가능한지 확인해 본다.이때 -p 옵션을 사용하여 호스트의 포트와 컨테이너의 포트를 연결한다.# Nginx 컨테이너 실행 (호스트 8000 -> 컨테이너 80)docker run --name myweb -p 8000:80 -d nginx:lat..

[Docker] 컨테이너 통신: 링크(--link) 옵션을 활용해서 WordPress와 DB 연동하기

도커를 활용해 가장 기본적인 2-Tier 아키텍처인 웹 서버와 데이터베이스를 구축하고 연동하는 과정을 알아보자.프론트엔드 역할을 할 WordPress 컨테이너와 백엔드 데이터베이스 역할을 할 MySQL 컨테이너를 생성하고, 이 둘을 연결(Link)하여 블로그 서비스를 띄워본다.1. 아키텍처 및 개념우리가 구축할 구조는 클라이언트(브라우저)가 워드프레스 웹 서버에 접속하고, 워드프레스는 내부적으로 MySQL 데이터베이스에 접속하여 데이터를 저장하거나 불러오는 구조다.컨테이너 환경에서 이 구조를 만들 때 가장 중요한 고려 사항은 상태(State)와 설정(Configuration)의 분리다.이미지와 데이터: 도커 이미지는 불변(Immutable)이다. 이미지 자체에 비밀번호나 설정값을 하드코딩하면 보안상 위험..

[k8s] Nginx 파드(Pod) 생성하고 포트 포워딩(port forwarding)하기

쿠버네티스에서 가장 기본이 되는 배포 단위인 파드(Pod)를 직접 생성하고, 내부 접속 및 외부 노출을 테스트하는 과정을 실습해본다.대표적 웹 서버인 Nginx 컨테이너를 띄우고, 로컬 환경에서 접속이 가능한지 확인해보는 과정이다.1. 선언적 정의: YAML 파일 작성쿠버네티스는 선언적(Declarative) 시스템이다.즉, 내가 "무엇을 하고 싶다"라고 명령어로 하나하나 지시하기보다는, "어떤 상태가 되기를 원한다"라고 명세서(Manifest)를 작성해서 제출하는 방식이 권장된다.먼저 인텔리제이(IntelliJ)를 이용해 다음과 같이 nginx-pod.yaml 파일을 작성했다. apiVersion: 오브젝트를 생성하기 위한 API 버전 (Pod는 v1).kind: 생성할 리소스의 종류 (여기서는 Pod..

1 2 3 4 5