티스토리 뷰

nginx 예제파일따라하기

Nginx+Flask로 웹서버 구축하기

필자는 리눅스에서 아파치와 플라스크를 이용하여 웹서버를 구축하려 하였으나 실패한 전적이 있다. ㅎㅎ.. 그래서 이번에는 좀 더 쉬운 방법으로 도커에서 이미지를 풀하여서 환경구축을 해보자한다. 이번에는 성공했으니 따라하셔도 좋다!

아마존 서버에서 리눅스로 접근, 도커에서 이미지를 받아서 컨테이너를 생성하는 것 까지 해보자

 

 

 

 

1. AWS server 접속

당연히 아마존 계정 만들고 putty로 접속까지 해야한다. 혹시 모르겠다면 필자가 전에 작성해둔 AWS에서 리눅스 접속 글을 읽으면 된다. https://hhhh88.tistory.com/12

 

 

2. docker 설치

자 그럼이제 도커를 설치해보자. 웹서치 중 정말 간단히 핵심코드만 써놓은 글을 찾았다.

https://blog.cosmosfarm.com/archives/248/%EC%9A%B0%EB%B6%84%ED%88%AC-18-04-%EB%8F%84%EC%BB%A4-docker-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95/

써주신 분 정말 감사합니다.

 

도커를 root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker그룹에 추가해야한다.

$ sudo usermod -aG docker $USER # 현재 접속중인 사용자에게 권한주기
$ sudo usermod -aG docker ubuntu # ubuntu 사용자에게 권한주기

설치확인하기

$ docker version

Client, Server 모두 정상적으로 출력되면 설치 완료

 

+) 시간대 변경

 $ date 
 $ ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
 $ date

현재시간확인 UTC기준 --> KST로 변경 --> 확인완료

 

 

3. docker 이미지 pull하기

필자가 받은 도커이미지 주소이다. https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask 들어가면 아래에 자세하게, 아주 길~~게 설명되어있다. 필자가 했던 방법도 여기서 한 걸 바탕으로 한 것이니 바로 해당 주소로가서 보고 따라해도 무방하다.

자, 그럼 이미지를 받아보자. : 뒤를 tag라고 하는데 태그는 자신이 원하는 버전으로 받으면 된다.

$ docker pull tiangolo/uwsgi-nginx-flask:python3.6

 

 

4. 이미지 build하기

+) docker 로그인

$ docker login

 

해당 주소에 들어가면 예제 파일이 있다. [example-flask-python3.7.zip] 이 파일을 받아서 FileZillar로 linux에 올리면 편하다. 아래 방법은 이 예제파일을 만드는 방법을 세세하게 적은 것이므로 귀찮다면 그냥 예제파일을 받아쓰는 것을 권한다. 예제파일을 받았다면 바로 docker build 명령을 치면 된다. 그럼 하나하나 찬찬히 만들어보자.

  1. 프로젝트 폴더에 진입

  2. Dockerfile 생성

    특히 필자는 이 도커파일을 어떻게 생성하라는 건지 몰라서 온갖 뻘짓을 했는데. (도대체 FROM과 COPY를 어디에 써라는 건지 몰랐다) 아래처럼 쓰면된다.

    $ touch Dockerfile # Dockerfile 생성
    $ nano Dockerfile # 작성
    
    # 아래처럼 써줍니다.
    FROM tiangolo/uwsgi-nginx-flask:python3.7
    
    COPY ./app /app
    
  3. app 디렉토리 생성 후 진입

  4. main.py 생성

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello World from Flask"
    
    if __name__ == "__main__":
        # Only for debugging while developing
        app.run(host='0.0.0.0', debug=True, port=80)
    

    해당 예제에서 flaks객체는 반드시 app이어야 함

    현재 디렉토리 구성

    .
    ├── app
    │   └── main.py
    └── Dockerfile
    
  5. Dockerfile있는 위치로( app 디렉토리가 포함된곳 ) 이동

    이게 굉장히 중요하다. 반드시 이 위치에서 이미지와 컨테이너를 생성해야한다!!

  6. 이미지 빌드

    이제 이미지를 빌드해보자. -t는 새롭게 생설될 이미지의 이름이고 마지막 구두점은 Dockrfile의 위치이다.

   $ docker build -t myimage . # 도커파일에서 이미지 빌드

 

5. 컨테이너 생성

이미지를 만들었으니 컨테이너를 만들어야 플라스크가 실행된다.

  $ docker run -d --name mycontainer -p 80:80 myimage

mycontainer위치에 자신이 쓰고 싶은 컨테이너 이름을 myimage 위치에 위에서 작성한 이미지 이름을 쓰면된다. -p 80:80은 포트를 설정해주는 건데 앞이 aws, 뒤가 docker port로 만약 웹의 포트를 바꾸고 싶다면 aws의 포트만 바꿔주면 된다! (물론 이때 aws들어가서 인바운드 규칙에 포트를 수정해주어야한다.)

컨테이너를 다 만들었다면

$ docker start mycontainer

위 명령줄을 친 후 본인의 도커이미지 url에서 플라스크를 확인할 수 있다.

여기서 필자가 헤맸던 이유는 도커 url이라해서 linux를 키면 나오는 도커 ip인 172.17.0.1으로 계속 접속했다는 사실이다. 여기가 아니라 아마존에서 접속했으므로 본인 퍼블릭IP로 접속하면 된다. 그럼이제 반가운 hello world 가 보일 것이다. ㅎㅎ

 

 

 

 

그 외)

$ docker ps -a # 정지된 container 포함
$ docker ps # 현재 실행중인 container만
$ docker images # 도커이미지 목록보기

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함