EC2 인스턴스를 실행시키면, 자동으로 퍼블릭 주소와 프라이빗 주소가 할당된다.
퍼블릭 IPv4 : ICP가 제공하는, 외부로 공개되어 인터넷 네트워크를 통해 접속할 수 있는 공개적 주소를 뜻한다. 우리가 DNS 서비스를 이용해서 특정 컴퓨터에 접근한다면 그 때에 사용되는 공개적 주소가 바로 저것이 되는 것
프라이빗 IPv4 : 개방된 네트워크를 통해 온갖 요청이 다 들어올 수 있다면 그만큼 해킹의 위험도도 커진다. 들어오더라도, 외부에는 노출되지 않을 격리된 네트워크망이 존재해야 한다. 이 영역에 할당되는 ip 주소들이 프라이빗 IPv4이다.
후에 보안그룹을 통해 어떤 루트가 접근이 허용될 지 설정해줘야 사용자들이 들어와서 도커를 통해 서비스를 이용할 수 있게 된다.
해당 강의에서는 컨테이너를 두개 띄울 것이다.
key 부분이 컨테이너 네이밍이 되는데, db라는 이름과 wordpress라는 이름으로 생성하게 될 것.
여기서 volumes라는 부분이 보일 것인데, 이 volume의 개념은 실제 컨테이너의 CRUD가 진행 될 파일을 호스트(즉 내 컴퓨터) 의 특정 영역과 싱크하겠다는 것을 뜻한다.
그냥 컨테이너 내에 데이터를 저장하고 있었을 경우, 코드가 수정되어 컨테이너가 리빌드되고 재실행되면 기존 데이터가 날아가는 문제점이 존재하는데 (마치 in-memory 형태로 저장되었던 휘발성 데이터가 새로고침하면 사라지듯 말이다)
volume을 통해 컨테이너 외부에 이 저장 및 쓰기 등을 진행할 폴더를 연결시켜두면 컨테이너가 없어지더라도 데이터는 유지될 수 있다. 이런 방식으로 사용하기 위한 부분이다.
구조는 "현재 로컬에 지정영역:연결될 컨테이너 내 폴더영역"
학습용으로 docker 홈페이지에서 제공하는 예시 yml을 사용하였다.
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:
현재 열려있는 포트는 3306과 80번이다.
이제 외부에서는 이 EC2에 접근하는 사람들이 해당 포트로 접근할 수 있도록 보안그룹을 통해 개방해두어야 한다.
참고로, 한 EC2에는 수많은 보안그룹 세팅 모음집을 만들 수 있고, 이것을 적절하게 선택해서 보안 시스템을 적용하는 것이 가능하다.
주의, 이 때에 보안그룹 내에는 인바운드 규칙을 설정하여 어떤 접근이 허용되게 할 지를 정할 수 있다. 그런데, 보안 그룹에 ssh와 관련된 설정을 해두지 않으면 pem키를 이용해서 초기 ec2 접근하는 것 조차 안되므로 설정해줘야 한다.