퐈니썬's LIfe - 잘 실패하자 RSS 태그 관리 글쓰기 방명록
docker 배포 (2)
2021-12-23 08:52:06
728x90
반응형

이번 포스트는 지난 포스트인 "[Linux] Docker의 Dockerfile 작성하여 Docker image 만들기"에 이어 image를 다른 컴퓨터로 배포 하는 과정과 image를 통해 구동시킨 container에 외부접속하는 과정을 정리해보았습니다. 

 

2021.12.22 - [OS(운영체제)/Linux] - [Linux] Docker의 Dockerfile 작성하여 Docker image 만들기

 

[Linux] Docker의 Dockerfile 작성하여 Docker image 만들기

 최근 다른 운영체제에 프로그램을 실행해야하는 상황에서 Docker를 통해 image를 만들어 배포했던 경험을 정리해두고자합니다.  본 포스트에서는 우리가 배포하고자하는 프로그램이나 시스템을

panython.tistory.com

 

01. Docker 소프트웨어 배포 

본 포스트에서는 앞서 제작한 Dockerfile을 통해 "flask를 이용한 게시판 프로젝트" 를 배포하고자 합니다.

Ubuntu나 다른 OS 환경에서 CentOS7에서 사용할 수 있도록 만들어진 프로젝트의 어플리케이션을 배포할 때 아래와 같습니다. 

 

01. Dockerfile을 통해 만든  Docker image를 *.tar 파일로 만든다.

일종의 스냅샷처럼 현재 docker image의 환경과 설정을 그대로 저장하는 과정입니다. 

docker save [저장할 도커 이미지:버전] -o Name.tar

 

02. 설치하고자 하는 OS 환경에 docker를 사용할 수 있도록 설치한다.

03. 설치할 docker image.tar 파일을 옴기고 load 한다.

 docker load -i Name.tar

04. docker image 확인한다.

docker image ls

주의 사항: 간혹, load된 docker image의 이름과 tag가 <none>으로 표기 될 수 있습니다.

꼭 확인하고, docker tag를 통해 변경하세요!!

05. docker image를 통해 docker container 생성하기

기본 사용법 중 docker image 실행하기 참고하세요.

2021.12.16 - [OS(운영체제)/Linux] - [Linux] Docker 주로 사용하는 명령어 모음!!

 

[Linux] Docker 주로 사용하는 명령어 모음!!

도커를 사용하면서 주요하게 사용하는 명령어를 까먹지 않도록 메모 해두고자 합니다!! 깃허브 처럼 생활화하여 기억하자!! 01. docker OS 이미지 다운 받기 #Docker Hub로 부터 이미지 다운로드 받기 #

panython.tistory.com

 

 

02. Docker에 외부 접속 하기

docker 이미지를 load 하고, docker 이미지를 통해 container을 실행할 수 있었습니다. 

flask를 이용한 게시판 프로젝트는 외부에서 접속하여 게시판을 사용 할 수 있도록 해야하므로 container를 생성할때, 외부접속과 백그라운드 실행을 해두어야 할것입니다. 

 

01. 포트 포워딩 하기

일단, 외부에서 접속이 가능하도록 외부 ip와 포트번호를 넘겨 받아야합니다. 아래의 링크 참조해주세요. 

 

2021.12.23 - [네트워크] - [네트워크] 외부접속을 위한 포트포워드 하기

 

[네트워크] 외부접속을 위한 포트포워드 하기

 본 포스트는 서버 PC에 외부 접근을 위해서 네트워크 포워드 방법을 메모해두고자 합니다!! 잘못된 점이나 피드백은 언제든지 환영입니다. 01. 포트포워드란?  외부 접속을 위해서는 외부의 기

panython.tistory.com

 

02. docker container 외부 접속 및 백그라운드로 실행

포트 포워드를 통해 외부 ip와 포트번호를 알았으니, 이제 docker container 생성시 이를 적용 해야합니다. 

docker run -d -it --name test -p [ip주소]:[외부포트번호]:[docker 내부포트번호] dockerimage:version

docker run에서 "-d" 옵션은 백그라운드 실행 "-p" 는 외부접속을 위한 옵션입니다. 

 

해당 예시의 명령어의 마지막에 "flask run"은 프로젝트의 실행을 위한 명령어 이며, dockerifle 생성시 CMD 명령어 대신에 실행되는 부분입니다.  

 

그리고 해당 게시판을 외부에서 열 수 있고, 서버에서는 사진과 같이 외부접속과 행동을 확인 할 수 있습니다. 

 

 

728x90
반응형
2021-12-22 15:47:37
728x90
반응형

 최근 다른 운영체제에 프로그램을 실행해야하는 상황에서 Docker를 통해 image를 만들어 배포했던 경험을 정리해두고자합니다.

 

 본 포스트에서는 우리가 배포하고자하는 프로그램이나 시스템을 image로 만들기 위해 Dockerfile 작성에 대해 정리해보겠습니다.

 

Docker의 기본 명령어는 아래 링크 참조 해주세요!

2021.12.16 - [OS(운영체제)/Linux] - [Linux] Docker 주로 사용하는 명령어 모음!!

 

[Linux] Docker 주로 사용하는 명령어 모음!!

도커를 사용하면서 주요하게 사용하는 명령어를 까먹지 않도록 메모 해두고자 합니다!! 깃허브 처럼 생활화하여 기억하자!! 01. docker OS 이미지 다운 받기 #Docker Hub로 부터 이미지 다운로드 받기 #

panython.tistory.com

공부한 내용을 바탕한 거라 잘못된 부분이나 피드백은 언제든지 환영입니다.

 

01. Dockerfile 이란?

Dockerfile은 Docker Image를 만들기 위한 config(설정) 명령이 담긴 파일입니다. 

Dockerfile 작성에 명령어를 사용하여 작성자가 원하는 설정의 Docker Image를 얼마든지 만들 수 있습니다.

Docker File을 안다는 것은 해당 이미지가 어떻게 구성되어 있는지 알 수 있습니다!

 

 

02. Dockerfile 을 이용한 Docker image 만드는 과정

1. docker image에 올릴 프로그램 준비

2. 이에 맞는 dockerfile 작성

3. docker build 를 통해 docker 이미지 생성 

docker build -t [내 이미지 이름]:[버전] [target directory]
예시) docker build -t myprogram:v1.0.1 ./

4. dockerfile을 수정 시, docker build을 다시해주어야 합니다. 

 

 

03. Dockerfile 작성 관련 명령어

FROM

어떤 이미지를 기반으로 할지 설정한다. Docker 이미지는 기존에 만들어진 이미지를 기반으로 생성한다. 만약 완전히 새로운 이미지를 생성하고 싶으면(“맨 땅에서 시작한다”) FROM scratch를 쓰면 된다.

MAINTAINER

메인테이너(제작자) 정보이다. 

RUN

쉘 스크립트/명령을 실행한다. docker image 를 생성할때, docker build 를 해줄 때 실행되는 명령어를 입력해야한다.

그렇기 때문에 이미지 생성 중에는 사용자 입력을 받을 수 없다. 그래서 apt-get install 명령어를 사용할 경우 -y 옵션을 붙여야 한다.

VOLUME

호스트와 공유할 디렉터리 목록이다. docker run 명령어에서 -v 옵션으로 설정할 수도 있다.

COPY

빌드시에 주어진 컨텍스트에서 첫번째 인자로 주어진 파일, 폴더를 두번째 인자로 주어진 컨테이너 경로에 추가한다.

오로지 로컬 호스트의 DIR에서 docker image로 복사해온다. (리눅스의 cp 명령어와 같다 생각하면된다!)

ADD

COPY 명령어와 동일하게 필요한 폴더를 가지고 올 수있다. 하지만 ADD는  URL(설치 서버 URL)도 docker image 빌드시 가져올 수 있으며, ".tar" 파일을 복사하면 자동으로 압축해제를 해준다.

CMD

컨테이너가 시작되었을 때 실행할 실행 파일 쉘 스크립트이다. CMD는 생성된 docker image로 container 생성시, 입력 인자를 받아 변경이 가능하다. (ENTRPYPOINT와 다른점)

ENTRYPOINT

컨테이너가 시작되었을때, 스크립트 혹은 명령어를 실행합니다.

WORKDIR

디렉토리를 이동 할 수 있다. (리눅스의 cd 명령어와 같다!)

EXPOSE

호스트와 연결할 포트 번호이다. 외부와 통신을 가능하게 노출시켜 준다. 기본적으로 컨테이너 실행시 docker run -p 옵션을 주게 되면 암묵적으로 EXPOSE가 된다.

ENV

환경변수를 설정한다.

04. Dockerfile 작성 예시

Dockerfile 작성 예시는 작성된 Dockerfile 로 이미지 생성후 배포 및 외부접속까지 하고자합니다.

그래서, Dockerfile 작성 예시에 작성될 내용은 flask를 이용한 게시판 프로젝트를 작성하고자합니다. 

flask를 이용한 게시판 프로젝트는 해당 링크 참조 부탁드립니다.

(https://wikidocs.net/book/1)

 

flask 게시판 프로젝트를 "CentOS7" 환경을 서버로하여 구동하는 것을 예시로 했습니다.

flask image를 pull로 받아서 하실 수 있을거에요!

예시는 예시로써 참고해주세요! 제가 진행한 방법에 대한 정리입니다!

 

#vi Dockerfile

FROM centos:7 
#set root password

RUN echo "root:panython" | chpasswd

#install systemc package 

RUN yum install -y sqlite-devel openssl-devel bzip2-devel libffi-devel zlib zlib-devel sudo which 

RUN yum install -y python3 python3-devel


#python and python library

## requirements.txt는 필요한 python library 설치

RUN python3.6 -m pip install --upgrade pip 

COPY requirements.txt /

RUN pip3.6 install -r requirements.txt 


#flask file systems

ADD /flask_board_project.tar /root/ 


#ENV 

ENV LC_ALL=en_US.UTF-8 

ENV FLASK_APP=/root/flask_board_project/pybo  

ENV FLASK_ENV=development 


#Start Directory

WORKDIR /root/	

CMD ["/bin/bash"]

 

Dockerfile을 한줄씩 간략히 설명하자면 아래와 같습니다. 

더보기

#vi Dockerfile

FROM centos:7   >> centos7 image를 가상 os로 만들어줘

#set root password

RUN echo "root:panython" | chpasswd   >> 계정은 root로 만들고, 비밀번호는 panython으로 해

#install systemc package 

RUN yum install -y sqlite-devel openssl-devel bzip2-devel libffi-devel zlib zlib-devel sudo which >> RUN을 통해 해당 명령어 수행해줘

RUN yum install -y python3 python3-devel >> RUN을 통해 해당 명령어 수행해줘


#python and python library

## requirements.txt는 필요한 python library 설치

RUN python3.6 -m pip install --upgrade pip >> RUN을 통해 해당 명령어 수행해줘

COPY requirements.txt / >> 현재 디렉토리에 있는 requirements.txt 파일을 docker image의 "/" 위치로 복사해줘

RUN pip3.6 install -r requirements.txt >> RUN을 통해 해당 명령어 수행해줘


#flask file systems

ADD /flask_board_project.tar /root/ >> 현재 디렉토리에 /flask_board_project.tar을 docker iamge의 "/root/" 위치로 복사하고 압축해제 해줘


#ENV 

ENV LC_ALL=en_US.UTF-8 >> LC_ALL을 en_US.UTF-8로 환경변수 설정해줘

ENV FLASK_APP=/root/flask_board_project/pybo  >> 환경변수 설정해줘

ENV FLASK_ENV=development >> 환경변수 설정해줘


#Start Directory

WORKDIR /root/ >> 생성된 docker image의 시작 디렉토리는 "/root"로 해줘

CMD ["/bin/bash"] >> docker image가 실행될땐 "/bin/bash"가 실행해줘

 

 

 

 

728x90
반응형