네이버 클라우드 캠프/Spring Boot & React

[Docker] 도커로 앱 배포하기 (1) with Ncloud

graph-dev 2023. 8. 9. 15:07
728x90

도커 심볼 로고

 

리눅스 서버 생성 

이번에는 설치부터 배포까지 실습해보겠습니다. 먼저 리눅스 서버(ubuntu)를 생성해두고 시작하시면 됩니다. 필요한 경우, 제가 작성한 글을 참고하셔서 서버를 생성하는 것부터 진행하시면 됩니다.

https://graph-dev.tistory.com/41

 

[Ncloud] 나만의 리눅스 서버 만들기

네이버 클라우드로 Linux 서버를 만들어보겠습니다. 리눅스에 대해 먼저 살펴봐야겠죠? Linux: "Just For Fun!" 재미로 시작한 리눅스 리눅스는 헬싱키 대학 리누스 토발즈가 만들었습니다. 당시 자율

graph-dev.tistory.com

 

 

 다만 위 글은 Classic 기준으로 이번에 작성하는 글은 VPC(Virtual Private Cloud)를 기반으로한 서버를 생성하여 수행합니다. 그 과정을 먼저 진행해보겠습니다. 네이버 클라우드 홈페이지에서 로그인 후, 콘솔에 들어가서 VPC를 누릅니다.

 

1. VPC management에서 VPC 생성을 합니다.

vpc 생성

 

2. 다음은 VPC > Subnet Management > Subnet 생성을 수행합니다.

subnet 생성

 

3. 이제 Server로 들어가서 서버 생성을 수행하겠습니다.

대부분 옵션은 디폴트로 두고, OS 이미지 타입은 Ubuntu로 설정하고, 서버 이미지 이름에 ubuntu-20.04로 선택하고 다음을 누릅니다.

서버 이미지 선택

 

다음은 서버 설정을 수행하겠습니다. 아래 그림처럼 설정해주세요.

서버 설정 화면

 

 위 화면에서 주의할 점은 Network interface는 추가버튼을 눌러줘야하고, 외부에서 접속하려면 공인 IP가 필요하므로 새로운 공인 IP를 할당한다는 것입니다. 다음을 누릅니다.

 

 

 인증키는 없으면 새로운 인증키를 생성하면 되고, 이 때 저장된 파일은 잘 보관해두세요. 차후 서버 비밀번호를 구할 때 필요합니다.

인증키 설정

 

 

 마지막으로 네트워크 접근 설정을 합니다. Nework Interface로 지정한 ACG만 사용하면 됩니다. ACG를 설정하겠습니다. 이름을 원하시는대로 정하시고 생성합니다.

ACG 생성

 

인바운드 규칙을 적용합니다.

인바운드 ACG 규칙

 

 위에 제시된 것처럼 만들겠습니다. 다만 주의하실 점은, 연습용 서버로 인바운드(Inbound)에서 접근 소스를 전체(0.0.0.0/0)으로 설정하시면 보안에 매우 취약합니다. 그래서 가능하시다면, myIP를 눌러서 현재 내 아이피만 접속이 가능하도록 설정하는 것이 좋겠습니다. 추가로 허용 포트도 1-65535는 모든 포트에서 접근이 가능하다는 뜻이므로 보안에 취약하겠죠? 필요한 포트번호만 허용해주는 게 좋겠습니다

 

 ACG 아웃바운드 규칙은 서버에서 나오는 조건이므로 폭넓게 접근 규칙을 잡고 생성해보겠습니다.

ACG 아웃바운드 규칙

 

  이 작업이 마쳤다면, 서버 설정을 마저 진행하고 서버를 생성하시면 됩니다. 생성에 시간이 좀 걸리니 상태가 "운영중"으로 변할때까지 기다리겠습니다.

 

도커 서버 접속

서버 이름을 우리가 docker-test-server로 설정했습니다. 접속해보겠습니다. 저는 ssh 명령어로 접속하겠습니다. 공인 아이피를 활용해서 접속합니다.

ssh root@[공인아이피]

 

접속을 하겠습니다. 처음 접속을 하시면 yes를 입력하고 진행하면 됩니다.

접속 후 화면

 

접속 후에 이전 글에서 본대로, 명령어를 차례로 입력해줍니다.

sudo apt-get update
sudo apt-get install curl
curl https://get.docker.com > docker-install.sh
chmod 755 docker-install.sh
sudo ./docker-install.sh

 

 

도커 컨테이너 상태 확인

이제 도커가 설치되었고, 도커 컨테이너 상태를 확인해보겠습니다.

# 컨테이너 확인
docker container ls
# 도커 이미지 확인
docker image ls
#도커 프로세스 확인
docker ps

확인해보면 다 비어있음을 알 수 있습니다. 

최초 도커 컨테이너 상태 확인

 

이제 httpd라는 패키지를 받아보겠습니다.

docker run -d httpd

위 run 명령어는 이미지를 받아서 컨테이너 생성 및 실행까지 한번에 수행합니다. -d 명령어는 백그라운드에서 실행하게 됩니다.

httpd 패키지 다운로드 및 실행

 

 이제 다시 컨테이너 상태를 확인합니다.

httpd 관련 컨테이너, 이미지가 잘 내려받아서 동작하고 있음을 알 수 있습니다. 

 

컨테이너 실행과 정지

이름(Names), CONTAINER ID로 삭제, 정지가 가능한데요 한번 실습해보겠습니다.

# CONTAINER에는 ID, NAMES 가능
# 정지
docker container stop CONTAINER
# 실행
docker container start CONTAINER

위 ID 값을 활용해서 컨테이너를 정지시키겠습니다.

ID를 통해 docker 정지

잘 정지가 되어, ls했을 때 아무것도 안 나타나는 것을 확인했습니다. ls -a 옵션을 주면 STATUS가 Exited 상태로 변했다고 표기됩니다.

 

 

이번에는 NAMES에 해당하는 elated_lichterman 으로 컨테이너를 다시 실행해보겠습니다.

NAMES를 활용해 docker 시작

잘 시작되었음을 확인할 수 있습니다. NAMES, ID 두 가지 방법으로 컨테이너를 시작, 정지시킬 수 있다는 것을 확인했습니다.

 

이름 옵션 사용해보기

이번에는 내가 원하는 이름으로 패키지를 실행해봅시다.

docker run --name [원하는 이름] -d 패키지

 

 저는 graph라는 이름을 부여해서 패키지를 실행했습니다.

원하는 이름으로 컨테이너 만들기

 

컨테이너 이름으로 시작, 정지, 삭제도 해보겠습니다. 삭제의 경우 아래 명령어를 사용합니다.

docker container rm [컨테이너 이름(NAMES)]

원하는 이름으로 컨테이너 정지 및 시작 수행

그런데, 컨테이너 삭제를 할 때, 아래와 같은 오류가 나타납니다.

docker 삭제시 오류 발생

 You cannot remove a running container [container ID]. Stop the container before attempting removal or force remove

실행 중인 컨테이너는 삭제할 수 없으니, 해당 컨테이너를 "정지"시킨 후에 삭제해야하라는 뜻입니다. 정지 후 삭제하겠습니다.

 

아래와 같이 정지 후 삭제를 시키면 docker container ls로는 정지되었는지 삭제되었는지 구분이 안됩니다. 이 때, docker container ls -a 옵션으로도 안 나타나야 삭제가 되었다고 할 수 있습니다.

정지 후 컨테이너 삭제

 

 

접속 포트 설정

내부 8080 포트로 접속 시, 외부에서는 80포트로 연결되도록 설정해보겠습니다. 

docker run --name [원하는 컨테이너 이름] -d -p 8080:80 httpd

포트 설정 후 실행화면

다음은 이 실행 중인 컨테이너로 접속하기 위해서는, 명령어 끝에 /bin/bash를 넣습니다.

docker container exec -it [컨테이너 ID 혹은 이름] /bin/bash

실행 중인 컨테이너 접속 화면

 

실행 상태에서는 이름이 root@[컨테이너 ID]로 표기됩니다.

 

접속 중인 상태에서 화면

 

이제 공인아이피:8080 으로 접속해보겠습니다.

위 사진처럼 It works이 나타나면 잘 접속된 것입니다.

 

마무리

컨테이너와 이미지를 모두 삭제하고 초기 상태로 돌아가보겠습니다.

# 컨테이너 정지 후 삭제
docker container stop [컨테이너 ID or 이름]
docker container rm [컨테이너 ID or 이름]

# 이미지 삭제
docker image rm [이미지 REPOSITORY 이름]

# 상태 확인
docker container ls -a
docker image ls -a

도커 이미지 삭제 후 확인

이미지까지 전부 삭제되었습니다. 컨테이너 상태도 함께 확인해보겠습니다.

 

삭제 후 확인

 

이렇게 해서 도커의 컨테이너와 이미지를 생성하고, 시작 후 실행해서 접속해보고 공인 아이피로 웹 상에서 확인했습니다. 또한, 컨테이너를 정지하고 컨테이너와 이미지를 모두 삭제해서 초기 상태로 만드는 것까지 진행해보았습니다. 다음 글에서는 도커 네트워크를 통해 Wordpress로 간단한 웹사이트와 연동시켜보겠습니다.