AWS EC2에 Docker 를 설치하는 과정을 기록하고자 한다.
환경은
Ubuntu Server 24.04 LTS 기준
먼저 도커를 설치하는 과정이다.
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
1. https 통신을 통해 외부 데이터 및 패키지에 접근할 수 있는 기능들을 설치한다.
2. curl 명령어를 통해 설치관리자(apt)의 identify key 값을 통해서 서버에 Docker 저장소를 설치한다.
3. 설치관리자에다 Docker Repository 경로를 추가하고
4.install 명령어를 통해 도커를 설치한다.
sudo 명령어는 관리자 권한을 부여하는 명령어로, putty 와 같은 프로그램으로 SSH 연결을 통해 작업을 한다면, 꼭 붙여줘야 Permisson Denied 오류가 뜨지 않기에 주의해서 꼭 붙여줘야한다.
AWS 웹 콘솔로 접속 하게되면 웬만해선 필요없을 수 있다. 그래도 Permisson Denied 가 뜨면 한번 붙여보자
설치한 도커를 확인하는 과정이다.
sudo systemctl status docker
해당 명령어를 통해 설치되어있는 docker 정보를 확인할 수 있다.
도커 허브를 통해 실행하고자 하는 서버 이미지를 pull 즉 해당 환경에 불러오는 과정이다.
sudo docker search 이미지 이름
sudo docker pull 이미지 이름[:버전]
search 명령어를 통해 찾고자하는 이미지가 있는지 찾고, pull 명령어를 통해 해당 이미지를 서버에 다운받는다.
버전 같은 경우 따로 명시하지 않으면 latest 버전을 받게 된다.
불러온 이미지를 이용하여 새롭게 컨테이너를 만들어 실행하는 과정이다.
sudo docker run -p [호스트 포트]:[컨테이너 포트] -d -it --name {컨테이너 이름} {이미지 이름} sleep infinity
run 명령어를 통해 다양한 옵션을 부여하여 컨테이너를 실행시킬 수 있다.
-p : 포트를 바인딩해주는 옵션이다. (필수)
[외부에서 접속하는 포트] : [컨테이너 내부에서 사용할 포트] 이렇게 포트를 지정해주어야한다.
스프링 부트 서버라면, 컨테이너 내부에서 스프링 부트 애플리케이션이 주로 8080 포트로 열리고, 또 일반적으로 로 스프링부트 서버는 8080 포트를 이용하기 때문에 외부에서 접속할 포트 또한 8080 으로 해주는 것이 적절하다. 고로 스프링부트 서버를 실행시킬 예정이라면 8080:8080 옵션을 보통 부여해주는 것이 좋고 만약 안된다면 오른쪽 포트가 스프링 부트가 실행중인 포트와 정확히 일치하는지를 꼭 확인해봐야한다.
-d : daemon으로 실행, 즉 백그라운드(background)로 실행하도록 지정해주는 옵션이다. (필수)
스프링부트 서버는 요청이 들어올 때마다 적절한 응답을 반환해야하기에 포어그라운드(foreground)에서 사용자의 입출력과 상관없이 항상 실행되어야 하기 때문에 백그라운드 방식으로 실행되어야하기에 이 옵션을 꼭 붙여주어야한다.
-it : 이 옵션은 컨테이너 외부 터미널에서 해당 컨테이너에 사용자의 입력과 출력을 전달하기 위한 옵션이다.
컨테이너 내부에 접속하여 쉘 등의 CLI 도구를 통해 작업을 해야할 경우에 필요한데, 웬만하면 필요한 경우가 많으니 꼭 붙여주자.
-v : docker 볼륨을 지정하는 옵션이다.
--rm : 컨테이너 실행이 종료되면 컨테이너가 자동으로 삭제되도록 하는 옵션이다.
--name : 컨테이너의 이름을 설정하도록 하는 옵션이다. (필수)
--net : docker 네트워크를 지정하는 옵션이다.
sleep infinity : -d 옵션을 통해 백그라운드로 실행을 했다고 하더라도, entrypoint 나 cmd가 설정되어 있지 않은 이미지 일경우 컨테이너가 바로 종료되는데, 이를 방지해줄 수 있는 옵션이다. (필수)
웬만하면 우리가 직접 개발한 스프링 프로젝트를 통해 이미지를 만들텐데, 그때 entrypoint 나 cmd 를 지정하지 않을 경우가 많을 것이기 때문에 거의 필수적으로 필요한 옵션이다.
그 외 기타 명령어들이다.
sudo docker ps -a
sudo docker restart [컨테이너 명]
sudo docker stop [컨테이너 명]
sudo docker start [컨테이너 명]
sudo docker rm [컨테이너 명]
sudo docker rmi [이미지 명]
ps 명령어를 통해 지금 실행중인 컨테이너를 확인할 수 있고 -a 옵션을 통해서 정지된 컨테이너 까지 확인할 수 있다.
restart 명령어를 통해서 실행중인 컨테이너를 중지했다가 다시 실행시킬 수 있다.
stop, start 명령어를 통해서 실행을 중지하거나 실행할 수 있다.
rm, rmi 를 통해 컨테이너와 이미지를 삭제할 수 있다.
'인프라 > Docker' 카테고리의 다른 글
Docker 란? (0) | 2024.07.25 |
---|---|
SpringBoot 프로젝트 Docker 로 EC2에 배포하기 (0) | 2024.07.22 |