배고픈 개발자 이야기

[2021/07/26] 가상화 구축을 위한 리눅스와 Docker활용 본문

인포섹 아카데미

[2021/07/26] 가상화 구축을 위한 리눅스와 Docker활용

이융희 2021. 7. 26. 11:28
728x90

- 명령어(설치 / 실행 / 삭제 / 정지)

# 태그가 없으면 최신버전 다운로드
docker pull ubuntu

# 특정 버전 다운로드
docker pull ubuntu:18.04

# docker image 목록을 보여주는 명령어
docker images
docker image ls

# docker image ID목록을 보여주는 명령어
docker images -q
docker image ls -q

# docker image 삭제 명령어
docker rmi [이미지ID or Repository 이름]
docker image rm [이미지ID or Repository 이름]

 

 

- Docker run 옵션

 

- Docker 실행

docker pull ubuntu:18.04

# 터머널에 stdin이 가능한 demon(백그라운드)로 myubuntu라는 별칭의 지정버전으로 실행
docker run -itd --name myubuntu ubuntu:18.04

# 실행중인 컨테이너 조회
docker ps

# myubuntu 컨테이너 실행, 입력 터미널에서 /bin/bash 명령 실행
docker exec -it myubuntu /bin/bash

# 종료
exit

 

 

- Container 중지 및 삭제

# 컨테이너 중지
docker stop myubuntu

# 실행중인 목록에 조회 안됨
docker ps

# 중지된 목록에 조회됨
docker ps -a

# 컨테이너 삭제
docker rm myubuntu

 

 

- Docker file : 이미지 생성을 위한 스크립트

텍스트 파일 형식으로 명령과 인자로 이루어지며 대문자로 작성함.

 

 

- Docker file 기본 명령어

 

- alpine

FROM alpine

docker 컨테이너는 특정 응용 프로그램의 실행을 목적으로 하는 경우가 많기 떄문에 다양한 기능을 모두 포함할 필요가 없음 ( 도커 이미지/컨테이너 사이즈가 작으면 작을 수록 좋음)

 

docker 이미지의 기본이 되는 이미지는 ubuntu가 아닌, alpine 경우가 많음

 

 

- build

# 현재경로에 저장된 DockerFilel로 test 태그로 이미지 빌드
docker build --tag nginx_image ./

# nginx_image를 이용해서 nginx_container 생성 -d(백그라운드 실행)
docker run -d -p 8081:80 --name nginx_container nginx_image

# docker container 접속
docker exec -it nginx_container /bin/bash

 

 

# Docker File을 이용한 플라스크 서버 구축

기존에 만든 hello_flask 플라스크 웹서버를 docker로 띄우기

# nginx 를 기본 이미지로 함
FROM nginx
# 작성자 정보
LABEL maintainer="cloud.ai.education@gmail.com"

# 리눅스 업데이트
RUN apt-get update

#개발과 관련한 프로그램 (파이썬등) 업데이트 -y는 설치할때 y를 자동 입력
#파이썬 3.7.3 버젼이 설치됨
RUN apt install -y software-properties-common

#파이썬 개발 관련 패키지 설치
RUN apt-get install -y python3-dev

# 폴더 생성
# docker는 기본 이미지에 bash 대신에 sh 가 설치되 있음
# flask 프로그램을 설치할 폴더 /home/ubuntu/ai/cloud/workspace/flask_project 생성
RUN ["/bin/sh", "-c", "mkdir -p /home/ubuntu/ai/cloud/workspace/flask_project/hello_flask"]

# 파일 생성
# 현재 폴더의(./) hello_flask 폴더를 Docker container의 /home/ubuntu/ai/cloud/workspace/flask_project/hello_flask 복사
COPY ./hello_flask  /home/ubuntu/ai/cloud/workspace/flask_project/hello_flask

# 파이썬 라이브러리를 설치할 pip3 설치
RUN apt-get install -y python3-pip

# wheel pandas Flask matplotlib  pyecharts  waitress 라이브러리 설치
RUN pip3 install wheel pandas Flask matplotlib  pyecharts  waitress

# nginx 설정파일 hello_flask.conf 를 /etc/nginx/conf.d 폴더로 복사
COPY ./hello_flask.conf  /etc/nginx/conf.d/

# 기존 nginx 설정 파일 /etc/nginx/conf.d/default.conf 삭제
RUN ["/bin/sh", "-c", "rm  /etc/nginx/conf.d/default.conf"]

# 한글 폰트 설치
RUN apt -qq -y install fonts-nanum

# 한글폰트를 matplotlib로 복사
RUN cp /usr/share/fonts/truetype/nanum/Nanum* /usr/local/lib/python3.7/dist-packages/matplotlib/mpl-data/fonts/ttf/

ps) DockerFile이 있는 경로에 flask.conf 파일과 프로젝트 폴더파일이 같이 있어야함

 

 

이제 CMD를 관리자 권한으로 켜서 아래의 프로세스를 진행해 주자

# 이미지 빌드
docker build --tag flask_image ./

# container 생성
docker run -d -p 80:80 --name flask_container flask_image

# flask_container 접속
docker exec -it flask_container /bin/bash

# 플라스크 서버 백그라운드 실행
app.py&

http://localhost으로 확인

ps) 80(진짜):80(가짜) 일때는 브라우저 접속시 포트번호 x, 8080:80일때는 접속시 :8080추가

 

 

 

Comments