Docker란?
Host OS의 자원 위에 docker engine을 통해 다양한 어플리케이션 실행이 가능한 container를 구현할 수 있는 기술이다.
(추가)
클라우딩 컴퓨팅 용어 정리
컨테이너 기반 가상화
OS를 통째로 가상화하는 것이 아닌, 어플리케이션이 실행되는 환경을 가상화하는 기술이다.
APP실행에 필요한 요소들을 container라는 독립적인 단위로 패키징하며, kernel을 공유하며 필요한 환경만 가상화한다.
리소스를 덜 사용하므로 빠르고 가볍다 !
(HW >> Host OS >> Container runtime engine >> container)
예 ) K8s, docker
하이퍼바이저 기반 가상화
하이퍼바이저는 하나의 OS에서 여러 개의 가상머신(VM)을 실행할 수 있도록 하는 소프트웨어 및 플랫폼이다.
이떄, 각각의 VM은 독립적인 OS를 가지고 동작하며 이런식으로 구성된 전체 환경은 가상인프라(virtual infrastructure)라고 할 수 있다.
하이퍼 바이저 종류에는 Type1,2가 있다.
TYPE 1 (bare-metal hypervisor) |
하드웨어 위에서 바로 하이퍼바이저가 동작 성능 굿 주로 클라우드환경에서 많이 사용됨 (아무래도) ( HW >> Hypervisor >> VM들) |
VMware ESXi, Microsoft Hyper-V, KVM |
TYPE2 (Host os 기반 hypervisor) |
기존 OS 위에서 하이퍼바이저 실행 host os를 요구하기에 성능이 흠냐 ( HW >> Host OS >> Hypervisor >> VM들) |
VMware Workstation, VirtualBox |
Docker를 통한 마이크로서비스
마이크로서비스
는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 나누어 개발하는 방식이다.
각각의 서비스를 독립적으로 개발, 배포, 확장 가능하며, 서비스 간에는 API(REST, gRPC 등)을 통해서 통신한다.
이에 따라, 서비스 단위 고효율 저비용으로 구현할 수 있으며, 라이브러리 종속성 문제를 해결할 수 있다.
이전에 보안sw공모전 사이트 배포할 때, 인스턴스 위에서 서로 환경이 다른 두개의 라이브러리를 끌어다 써야하는 경우가 있어서 어거지로 다운그레이드하여 맞춰서 썼었는데, 이 과정에서 그냥 인스턴스 위에 각각의 docker를 두고 서비스 포트를 api로 끌어다 써도 됐겟다 ㅎ
container runtime engine
docker의 각 container가 실행되는 기반이 되는 docker runtime engine에는 cgroup(control group)이 존재하며, 이를 통해서 각 컨테이너가 사용하는 CPU, 메모리, 디스크 I/O 등을 제어할 수 있다.
Docker 컨테이너 기본 활용
도커 레지스트리
사용자가 사용할 수 있도록 도커 이미지를 저장한 저장소
해당 저장소는 public registry에서 다운받을 수 있으며, 기관에서는 on-premises기반의 private registry에서 받아 사용한다.
AWS ubuntu를 통한 docker 구성
생성한 EC2인스턴스에 접속하여 다음을 설치하여 기본 구성을 진행해보자.
● sudo apt install docker.io
● sudo apt install docker-compose
Nginx image 다운로드를 받고, 확인 / 실행
● docker pull nginx
(sudo docker search nginx : nginx 이미지들 검색)
● docker images
● docker system df : 다양한 compose확인
다운받은 이미지를 하나의 프로세스로 실행 (로컬 포트는 8080을 사용)
● sudo docker container run --name nginx_web -d -p 8080:80 nginx
동작하고 있는 프로세스 확인
● sudo docker ps
+ Docker 이미지
컨테이너를 실행하기 위한 실행 환경을 포함한 템플릿으로
어플리케이션 실행을 할 수 있는 파일 시스템과 설정이 미리 정의된 파일
Docker 컨테이너
이미지를 기반으로 실행되는 각각 하나의 인스턴스 (어플리케이션)
실행되고 있는 컨테이너에 대한 정보를 확인해보자.
● sudo docker inspect [containerID]
추가적 docker 명령어 정리
docker pull : container image를 로컬 캐시에 다운로드
docker attach : container 상세 정보
docker exec : 실행중인 container내에서 명령 실행
sudo docker exec -it nginx/web /bin/bash : 명령 console창 오픈
docker rm : 중지된 container 삭제
docker rmi : container iamge 삭제
AWS 도커 컴포즈로 워드프레스 설치
docker compsoe는 인프라 구성 기본 이미지까지 다운로드할 수 있으며,
docker file으로는 주로 환경 설정 (apache, html, 등)을 진행한다.
https://github.com/docker/awesome-compose/tree/master/official-documentation-samples/wordpress/
위의 예시를 통해서 다운받아 보았다.
docker-compose.yml을 생성해주고,
해당 docker compose를 통해서는 mysql db와 wordpress를 다운로드하여 구축한다.
+ 여기서 포트 A:B 는 EC2인스턴스에서 A포트를 사용하고, 내부적(컨테이너)으로 B번 포트에 연결한다는 의미이다.
이에 따라, EC2 SG설정 시에 A포트를 열어야 내부적으로 B로 연결해주어 접속이 가능하다.
services:
db:
# We use a mariadb image which supports both amd64 & arm64 architecture
## image: mariadb:10.6.4-focal
# If you really want to use MySQL, uncomment the following line
image: mysql:8.0.27
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
volumes:
- wp_data:/var/www/html
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
db_data:
wp_data:
docker-compose up -d로 실행 후, 확인하면 다음과 같다.
ip addr를 통해서 네트워크를 분석해보자.
■ compose로 생성한 브릿지 네트워크
현재 네트워크 게이트웨이(172.18.0.1/16) 가 생성되었으며,
활성화(state UP) / 정상적 작동 중(LOWER_UP)이다.
이떄, 172.18.255.255 브로드캐스트(br-b0b43...어쩌구) 를 통해서 내부에 구성된 wp와 mysql0을 통해서 전달되는 것이다.
■ 컨테이너 인터페이스
아래는 wp와 mysql 각각의 컨테이너 인터페이스이다. 위의 br-어쩌구 브리지 네트워크에 속해 있다.
앞서 wp를 EC2 80 -> 내부 80 호스팅으로 설정해놓았기때문에 SG를 수정하여 wp를 구축해보자.
SG에서 80포트를 오픈 후, 해당 포트로 접근 시에 워드프레스를 확인할 수 있다.
골드환경
이란 안정적이고 신뢰가능한 환경을 의미하며 보안, 성능, 가용성 등이 최적화된 시스템을 의미한다.
'주요 정보통신 기반 시설 취약점' 등을 기반으로 서버 진단을 하여
보안성이 구축된 환경에서 이를 이용하여 다른 자원생성 시에 이용한다.
실질적으로는 보안이 적용된 인스턴스를 구축한 후, 인스턴스가 중지된 상태에서 '인스턴스 및 템플릿 > 인스턴스 생성'을 통해 적용가능하다.
'Cloud > Cloud Security' 카테고리의 다른 글
AWS 로그 통합 모니터링(AWS CloudWatch) (0) | 2025.05.07 |
---|---|
AWS 로그 모니터링(Cloudtrail, VPC Flow Log) (0) | 2025.05.04 |
클라우드 서비스와 보안의 이해 (0) | 2025.03.19 |