오늘은 도커를 이용해서 nginx를 띄우는 방법을 정리해 보려고 한다. 요즘 만들고 있는 서비스에 nginx를 적용해 웹서버를 구성하고 연동했기 때문에 이참에 정리를 해둬야겠다고 생각했다. 언제나 그렇듯 공부하면서 시도해 보는 동안에는 뭐가 뭔지 헷갈리면서 어렵다가도 한번 성공하고 나면 갑자기 간단해 보이는 느낌이 든다. nginx를 공부하기 전에는 분명 어려워 보였지만, 막상 적용하고 나니 별거 아닌 것 같기도 하다...
1. nginx 이미지 가져오기
docker pull nginx
우선 nginx를 컨테이너로 띄우려면 도커 공식 hub에서 제공하는 nginx 이미지를 받아야 한다.
방법은 간단하기 때문에 위의 명령어를 터미널에서 실행하면 된다.
이미지가 정상적으로 설치되었는지 확인하려면
`docker images`
명령어를 실행하면 확인이 가능하다.
2. nginx 컨테이너 띄우기
docker run -itd -p 8080:80 nginx:latest
옵션 설명
-i (--interactive) : 컨테이너와 상호작용할 수 있는 상호작용 모드를 활성화. 해당 옵션을 사용하지 않으면 컨테이너가 백그라운드에서 실행될 때 표준 입력이 닫히게 된다.
-t (--tty) : 터미널 환경 제공. 해당 옵션을 사용하면 터미널과 유사한 환경이 컨테이너에 제공되며, 컨테이너 내부에서 명령을 실행하고 터미널 출력을 확인할 수 있다.
-d (--detach) : 컨테이너를 백그라운드에서 실행. 컨테이너가 백그라운드에서 실행되며, 컨테이너의 출력이 터미널에 표시되지 않는다.
-p (--port) : 컨테이너 내부의 포트와 외부 포트의 포워딩 설정. 컨테이너 내부에서 실행된 포트를 외부에서 접근할 때 연동될 수 있도록 포워딩하는 설정.
나는 보통 컨테이너를 띄울 때 위의 명령어를 기준으로 사용한다. 해당 옵션을 사용하면 우선 컨테이너가 뜨게 되고, 정상적으로 확인됐는지를 확인한다.
위의 명령어를 실행하고 에러가 없다면 생성된 컨테이너 id가 노출되고 종료된다. 그러면 컨테이너가 정상적으로 실행됐는지 아래 명령어를 통해 확인이 가능하다.
`docker ps`
3. nginx 접속 확인
localhost:8080
브라우저에서 위의 경로로 접근했을 때 아래 화면과 같이 뜰 경우 정상적으로 실행이 된 것이다.
여기까지 진행이 됐다면 nginx 기본 이미지로 간단하게 nginx 서버가 실행된 것이다. 하지만 기본 이미지이기 때문에 nginx의 기본 설정값이 변경되지 않은 상태라 실제 운영을 하기엔 적합하지 않다. 운영을 하기 위한 nginx 이미지를 사용하려면 Dockerfile을 통해 약간의 커스텀을 해준다면 가능하기 때문에 다음 설명을 참고하면 된다.
4. 이미지 변경
기본 이미지를 컨테이너로 띄워 접속까지 잘 됐다면 이제 웹서버로 구동하기 위해 간단한 수정을 해줘야 한다.
그래서 보통 Dockerfile을 이용해 기본 이미지를 커스텀하여 구축하고자 하는 서버의 설정으로 다시 이미지를 만들어주면 된다.
Dockerfile
# 기본 이미지 가져오기
FROM nginx:latest
# nginx.conf 파일 추가
ADD nginx/nginx.conf /etc/nginx/nginx.conf
# default.conf 파일 추가
ADD nginx/default_http.conf /etc/nginx/conf.d/default.conf
EXPOSE 8080
# 커맨드 설정
CMD ["nginx", "-g", "daemon off;"]
위의 코드는 Dockerfile 명으로 만든 파일의 코드 내용이다.
1. 기본 이미지 ( FROM nginx:latest )
가장 먼저 기본 이미지를 설정해 준다. Dockerfile에서는 가장 윗 라인부터 읽어내려가기 때문에 반드시 FROM 구문이 첫 번째로 작성이 되어야 한다.
2. nginx.conf 파일 변경
nginx 내에서 가장 기본이 되는 nginx.conf 설정 파일을 변경하고 두번째 라인과 같이 ADD 명령어를 사용하여 이미지 내부의 nginx.conf 파일을 덮어씌워주면 된다.
3. default.conf 파일 변경
nginx.conf 파일 내에서 include되어 설정되는 default.conf 파일도 nginx.conf 파일과 마찬가지로 ADD 명령어를 사용하여 파일을 덮어씌워 준다.
4. 포트 변경
EXPOSE 명령어를 사용하여 현재 이미지의 기본 포트를 8080으로 변경해 준다.
5. 커맨드 설정
이미지를 컨테이너로 실행하게 될 때 자동으로 실행되는 커맨드 명령어 설정이다. 컨테이너를 실행하게 되면 nginx를 바로 실행하기 위해 해당 커맨드 명령어를 추가한다.
여기까지 작성이 됐다면 이미지 커스텀 준비는 끝이다. 이 외에 커스텀이 필요하다면 명령어를 추가하고 설정값을 원하는 대로 변경하면 된다.
5. 이미지 빌드
위에서 작성한 Dockerfile을 기반으로 이미지 빌드를 진행한다.
먼저 이미지 빌드를 하기 위해 터미널을 통해 Dockerfile이 위치한 경로로 이동한다. ( Mac 유저는 터미널, Windows 유저는 cmd )
docker build nginx_custom:1.0 .
해당 위치로 이동했다면 위의 명령어를 실행하면 된다. 위의 구문에서 nginx_custom:1.0은 원하는 이미지 명과 버전을 작성하면 되고,
. 는 현재 디렉터리를 가리키는 설정으로 현재 디렉터리에서 Dockerfile을 찾고 실행하게 되는 설정이다.
(본인은 보통 이미지 빌드할 때 시간을 가장 많이 썼던 것 같다. Dockerfile의 작성이 문제가 돼서 계속 수정해가면서 빌드를 했지만 한번 실패하기 시작하면 도돌이표가 되서 시간이 오래 걸렸다..)
빌드할 때 오류가 발생하여 이미지 빌드가 실패한다면 Dockerfile 작성한 코드에서 오타가 있거나 경로가 제대로 안 잡혀 있거나 한다면 잘 확인해 줘야 한다.
6. 빌드 이미지 컨테이너 실행
이미지 빌드까지 성공하였다면 여기서부터는 다시 위에서 실행했던 것과 같이 진행하면 된다.
1. nginx 컨테이너 띄우기
docker run -itd -p 8080:80 nginx_custom:1.0
2. nginx 접속 확인
localhost:8080
마무리
웹 서비스를 하다 보면 웹서버를 빼놓을 수 없는데, 보통은 apache와 nginx에서 고민을 많이 하는 것 같다. 예전에는 일반적으로 apache를 사용했지만 nginx가 나오면서 웹서버를 구축할 때 항상 고민을 하게 되는 것 같다. 작은 서비스를 운영하면 크게 차이가 없지만 서비스가 커진다면 반드시 고민하게 되는 부분인 것 같다. 현재 나는 작은 서비스를 운영하고 있어서 크게 상관은 없지만, 오히려 서비스가 작을 때 이런저런 시도를 해보는 것도 좋을 것 같아서 이번 기회에 nginx를 도입해 봤다.
아래 경로를 통해 들어가면 이번 글에서 정리한 nginx를 기반으로 한 서비스로 접속이 가능하다. 실제 설정값은 조금 더 디테일한 부분이 많기 때문에 다음 글에 계속해서 정리해보고자 한다.
https://econoflow.co.kr/
Economy FLow
econoflow.co.kr
'Docker > docker' 카테고리의 다른 글
서비스의 효율을 높여주는 도커 이미지에 대한 정리! (1) | 2024.01.21 |
---|---|
도커의 핵심, Dockerfile의 기초부터 알아보기! (0) | 2024.01.18 |
도커 Compose로 애플리케이션 관리하기 (1) | 2023.10.17 |