-
Windows 10 환경에서 Docker 및 nginx로 웹 서버 구성하기 (2)DevOps, 클라우드/Container 2021. 1. 27. 18:55
이전 글 : https://floodnut.tistory.com/2
참고자료 : https://ndb796.tistory.com/95?category=1009977
이전 글에서 윈도우10 환경에서의 도커의 설치와 간단한 명령어들을 알아보았다.
이번에는 도커의 이미지파일 생성을 살짝 알아볼 것이다. 내용 참고는 나름 유명하신 것 같은 '나동빈' 님의 블로그 자료와 기타 검색 자료들을 참고했다.
Dockerfile
처음 이미지 구성을 생각할때는 되게 복잡하게 생각하고 있었다. 이미지 구성을 한번에 다 해야될 것 같은 느낌이어서...
nginx에 DB 구성에 웹 페이지까지 다 준비해놓고 이미지를 생성해야할 줄 알았는데 그냥 하나씩 올리면 되는거였다.
나는 그래서 우분투에 nginx를 추가적으로 설치하기로 했다.
FROM ubuntu:18.04 MAINTAINER Floodnut "나의 email" RUN apt-get update RUN apt-get install -y nginx WORKDIR /etc/nginx CMD ["nginx","-g","daemon off;"] EXPOSE 80
간단하게 우분투 18.04 위에 nginx만 설치하여 올렸다. 저 중간에 쭈욱 뭔갈 넣으려 했던 생각을 버리고 그냥 하나씩 쌓기로 했다. 여기서 CMD 행을 보면 nginx를 백그라운드 환경에서 돌아가게 한다고 한다. 웹 서버가 완성되고 구동될때의 환경이다.
위와 같은 Dockerfile을 작성하고 이를 이미지로 빌드한다. 여러 모듈 등이 필요한 경우 추가적으로 레이어를 쌓아주면 된다.
docker build --tag 이미지_이름:이미지_버전
Dockerfile과 같은 경로에서 CMD(또는 파워쉘)과 같은 터미널 창을 열어 위 명령어를 실행시키면 내가 작성한 Dockerfile을 이미지로 빌드해준다. 여기서 이미지 버전은 나만의 버전이다. 나는 첫번째 테스트를 위해 0.1이라 하였다.
이렇게 빌드 된 이미지를 이전 글처럼 컨테이너로 인스턴스화 해야한다.
docker images docker run -d --name 컨테이너_이름 -p 포트:80 이미지:버전 docker-machine ip
위에서 빌드한 이미지를 확인해주고 이를 나만의 컨테이너 이름으로 실행시키겠다. 그러면 우분투 기반의 나의 컨테이너가 구성되고 -d 옵션으로 백그라운드로 구동될 것이다.
docker-machine ip로 도커의 ip를 확인하여 nginx의 기본 페이지로 들어가볼 수 있다.
ATTACH
위와 같이 기본적인 서버가 구성되면 이제 DB를 올리고 웹 어플리케이션을 구성해야한다.
docker attach 컨테이너명
나는 nginx 컨테이너를 실행시키고 attach 명령어로 해당 도커 웹서버 내부로 들어가보려 했지만 백그라운드로 웹 서버가 구동 중이라 우분투의 쉘을 확인할 수 없었다. 혹시 도커 파일로 빌드된 내용이 문제였는지 여러 값을 변경해보며 이미지를 계속 빌드해보았다.
각각 빌드된 이미지들을 여러 옵션별로 또 다르게 인스턴스화 시켜서 컨테이너로 올렸다. 뽑은 이미지는 많지만 그래도 나름 빠르게 해결하였다. 바로 쉘의 문제였다. nginx 웹 서버를 구동시키면 기본적으로 '웹 서버'가 구동된다. 따라서 내부적인 리눅스(우분투) 쉘을 따로 옵션으로 붙여줘야 한다.
위와 같이 flood 0.5 버전의 이미지로 flood9이라는 이름의 컨테이너를 실행시키고 attach 하였지만 우분투의 쉘이 나오지 않았다. 그래서 "bin/bash"를 옵션으로 넣고 다시 컨테이너를 만들었다.
이렇게 되면 바로 nginx가 실행되는게 아니라 우분투의 bash쉘이 먼저 실행되고 이후에 service nginx start를 통해 서버를 구동할 수 있다.
결론적으로 내가 쌓으려던 레이어를 한번에 쌓은게 아닌 하나씩 인스톨해버린 셈이 되버렸다.
어찌됬건... attach 명령어를 통해 도커에 붙은 뒤 /var/www/html의 index 페이지를 간단하게 수정하고
nginx를 실행시켜 보았다. 해당 경로에서 웹 어플리케이션을 구성하고 서버를 다시 nginx를 구동시키면 일반적인 리눅스 서버가 될 것이다.
해당 도커 컨테이너를 올리며 알아본 결과 아래와 같은 명령어도 가능했다.
docker start flood9 docker exec -it flood9 bin/bash
'flood9'은 3번 이미지에서 보다시피 bash 쉘이 아닌 nginx 웹서버 자체를 백그라운드로 실행시킨다. 여기서 웹서버를 실행시킨 후 exec 옵션을 통해 bash 쉘로 접속할 수 있었다.
이렇게 간단한 이미지 구성 후 웹 서버를 올려보았다. 결국 호스트가 윈도우고 리눅스고는 상관없었다. 어쨌건 호스트 위에 또 다른 OS가 올라가고 거기서 nginx가 돌아갔다. VM과 다른 점이 무엇인가? 매뉴얼 페이지를 보고도 지금쯤 되니 헷갈린다. 도커 위에서 돌아가기 때문에 호스트에서 도커만 돌리면 다른 점은 없었다.
이 후에는 웹 어플리케이션과 DB 등을 올려보고 계속 진행해보려한다.
'DevOps, 클라우드 > Container' 카테고리의 다른 글
라즈베리파이를 이용한 멀티 노드 클러스터링 (4) - Spring Boot (0) 2022.04.06 라즈베리파이를 이용한 멀티 노드 클러스터링 (3) - MySQL (0) 2022.04.05 라즈베리파이를 이용한 멀티 노드 클러스터링 (2) - 쿠버네티스 명령어 (2) 2021.08.15 라즈베리파이를 이용한 멀티 노드 클러스터링 (1) - 설치 (1) 2021.07.23 Windows 10 환경에서 Docker 및 nginx로 웹 서버 구성하기 (1) (0) 2021.01.20