[AWS] 도커(Docker)
컨테이너의 이해
컨테이너는 운영 체제 수준의 가상화 기술로, 애플리케이션과 그 의존성을 격리하여 배포하고 실행할 수 있는 환경을 제공한다. 도커 컨테이너는 Linux 커널을 사용하여 다양한 플랫폼에서 작동할 수 있다. 이는 도커가 운영 체제 수준에서 가상화를 수행하기 때문에 빠르고 효율적인 배포가 가능하다는 장점이 있다.
컨테이너와 가상 머신(VM)의 차이점
- 시작 시간: VM은 하드웨어 가상화를 통해 CPU, 메모리, 하드디스크 등의 자원을 가상화하여 전체 운영 체제를 부팅해야 하므로 시작 시간이 오래 걸린다. 반면에 컨테이너는 이미 실행 중인 OS 위에서 애플리케이션을 실행하는 프로세스만 시작하면 되기 때문에 부팅 시간이 훨씬 짧다.
- 오버헤드: VM은 가상화된 하드웨어 및 하이퍼바이저를 통해 애플리케이션을 실행하기 때문에 추가적인 처리 시간이 필요하다. 반면에 컨테이너는 OS 커널을 공유하고 개별 프로세스로 작동하기 때문에 오버헤드가 거의 없다.
도커 아키텍처
도커는 클라이언트-서버 구조로 이루어져 있으며, 클라이언트는 도커 명령어를 사용하여 도커 데몬(Docker Daemon)과 통신하고, 데몬은 컨테이너를 관리하고 실행하는 역할을 한다.
도커 퍼블릭 레지스트리
도커 허브(Docker Hub)는 도커 이미지의 중앙 저장소로, 사용자들은 여기서 이미지를 검색하고 다운로드할 수 있다. 이는 도커 이미지를 쉽게 공유하고 배포할 수 있게 해준다.
도커 명령어 예시
- 컨테이너 실행: docker run
- 실행 중인 컨테이너 목록 보기: docker ps
- 컨테이너 중지: docker stop
- 이미지 빌드: docker build
- 컨테이너 접속: docker exec -it <container_id> /bin/bash
Dockerfile
Dockerfile은 컨테이너 이미지를 생성하기 위한 스크립트 파일로, 필요한 명령어와 설정을 기록하여 일관된 환경을 제공한다. 이는 애플리케이션의 배포 및 관리를 자동화하는 데 유용하다.
AWS EC2 Ubuntu에서 Docker를 실행
1. Repository 인덱스 갱신
우선, 우분투의 패키지 목록을 최신 상태로 갱신해야 한다. 이는 시스템에 설치된 소프트웨어의 최신 버전을 확인하고 다운로드할 수 있도록 해준다.
2. Docker 다운로드를 위해 필요한 패키지 설치
도커를 설치하기 위해 필요한 몇 가지 패키지를 설치해야 한다. 여기에는 apt-transport-https, ca-certificates, curl, 그리고 software-properties-common이 포함된다.
- apt-transport-https: APT가 HTTPS를 통해 패키지를 다운로드할 수 있게 해준다.
- ca-certificates: 시스템이 HTTPS 연결을 통해 인증된 서버와 통신할 때 필요한 인증서를 관리한다.
- curl: 다양한 프로토콜을 통해 데이터를 전송할 수 있는 커맨드 라인 도구이다.
- software-properties-common: 소프트웨어 저장소와 PPA를 관리할 수 있게 해준다.
3. Docker GPG 키 다운로드 및 저장
도커 패키지의 신뢰성을 확인하기 위해 GPG 키를 다운로드하고 시스템에 저장해야 한다. 이는 패키지의 출처를 확인하고 보안성을 보장하는 데 필요하다.
4. Docker 저장소 추가 및 패키지 목록 업데이트
도커를 설치하기 위해 Docker 저장소를 APT 리스트에 추가해야 한다. 그런 다음 패키지 목록을 업데이트하여 Docker 패키지를 검색할 수 있도록 한다.
5. Docker 설치
이제 Docker CE (Community Edition)를 설치할 수 있다. 이는 Docker의 기본적인 기능을 제공하며, 다양한 컨테이너를 실행하고 관리할 수 있게 해준다.
6. Docker 서비스 시작
Docker를 설치한 후에는 서비스를 시작해야 한다. 이를 통해 Docker 데몬이 실행되며, 컨테이너를 관리하고 실행할 준비를 한다.
7. Docker 서비스 상태 확인
Docker 서비스가 정상적으로 실행되고 있는지 확인해야 한다. 이는 서비스의 상태를 점검하고, 문제가 있는지 여부를 확인하는 데 도움이 된다.
8. Docker 설치 확인
Docker가 제대로 설치되었는지 확인하기 위해 Docker의 버전을 확인할 수 있다. 이는 명령어를 통해 현재 설치된 Docker의 버전을 출력한다.
9. Docker 기본 명령어 사용
Hello World 이미지 받기 및 실행
Docker가 제대로 작동하는지 확인하기 위해 hello-world 이미지를 다운로드하고 실행해본다. 이는 Docker가 올바르게 설치되고 작동하는지 간단히 테스트하는 방법이다.
EC2 인스턴스 보안 그룹 설정
EC2 인스턴스의 보안 그룹을 설정하여 외부에서 접근할 수 있도록 해야 한다. 이를 통해 웹 서버나 다른 서비스에 접근할 수 있게 된다.
Docker 컨테이너 실행
우분투 이미지 다운로드 및 실행
Docker를 사용하여 우분투 이미지를 다운로드하고, 이 이미지를 기반으로 컨테이너를 실행한다. 이 과정에서 특정 포트로 접근할 수 있도록 설정한다.
컨테이너 진입
실행 중인 우분투 컨테이너에 접근하여 명령을 실행할 수 있다. 이는 컨테이너 내부에서 직접 작업을 수행할 수 있도록 해준다.
컨테이너에서 nginx와 vim 설치
컨테이너 내부에서 nginx와 vim을 설치한다. nginx는 웹 서버 소프트웨어이며, vim은 텍스트 편집기이다. 이를 통해 웹 서버를 설정하고 필요한 파일을 편집할 수 있다.
EC2 인스턴스 보안 그룹 설정 (포트 8080 추가)
EC2 인스턴스의 보안 그룹에 포트 8080을 추가하여 외부에서 해당 포트로 접근할 수 있게 설정한다.
nginx 설정 파일 수정
nginx의 설정 파일을 수정하여 웹 서버의 동작을 설정한다. 기본적으로 /var/www/html 디렉토리에서 파일을 제공하도록 설정되어 있다.
서버 재시작
nginx 설정을 변경한 후에는 서버를 재시작하여 변경 사항을 적용한다.
웹 페이지 확인
브라우저를 통해 EC2 인스턴스의 IP 주소와 포트를 입력하여 웹 페이지가 정상적으로 표시되는지 확인한다.
컨테이너 삭제 및 이미지 관리
필요에 따라 Docker 컨테이너와 이미지를 삭제할 수 있다. 이는 더 이상 필요하지 않은 리소스를 정리하는 데 사용된다.
