Docker과 무엇을 의미하는지, container와 image의 개념은 무엇인지에 대한 기본 내용은 이전 글에서 다루었으니 docker가 뭔지 모르시겠는 분들은 그 글을 참고하시고 이 글은 code를 base로 진행할게요.
Docker을 시작하시는 분들은 기본적인 리눅스 명령어, pip 을 이용한 설치, 삭제 과정은 아시리라 가정하고 설명할게요.
▼ 이전 글
[Docker] Docker 시작하기. Docker란? Docker와 Container의 개념에 대하여
● 흐름
1. app.py라는 이름으로 테스트해볼 프로그램을 작성한다. ( 필요한 python modules는 install 한다 )
2. app.py가 잘 작동되는지 확인한다.
3. pip uninstall 을 통해 app.py를 실행시키는데 필요한 모듈을 삭제해본다.
4. python을 실행시키고 module이 삭제되었는지 확인해본다.
5. 삭제되었으면 app.py를 실행시켜도 모듈이 없다며 오류가 나야한다.
6. 내 컴퓨터에서는 app.py가 실행이 안되는 상태에서
requirements.txt와 Dockerfile을 생성한다.
7. docker build를 통해 image를 빌드한다
8. build된 image를 이용해 docker run 한다.
9. 성공적으로 프로그램이 실행된다.
app.py 는
* 실행된 python의 version을 출력한다.
* 제 Docker Tutorial 글에 접속하는 http request 를 보내고, 그 페이지의 게시글의 제목을 따오는 크롤러 입니다. BeautifulSoup과 requests 모듈을 필요로 해요.
● 예제 시작!
(예제에 등장하는 모든 소스는 https://github.com/umi0410/docker_tutorial_1에 올려놓겠습니다.)
1. app.py라는 이름으로 테스트해볼 프로그램을 작성한다. ( 필요한 python modules는 install 한다 )
( 필요한 모듈은 bs4, requests )
$ vi app.py
혹은 윈도우는 그냥 에디터나 메모장
### all comments are in English
### because sometimes korean comments throw errors though they're just comments
import sys
import requests
from bs4 import BeautifulSoup
url="https://senticoding.tistory.com/49" # url to send HTTP request
headers={"user-agent":"docker_tutorial"}
print(sys.version) # to check out what version of python I am using
# rq is a variable to save the HTTP request
# pass "user-agent" to prevent to be blocked by things like robot
rq=requests.get(url, headers=headers)
#soupObject is a beautifulsoup object
soupObject=BeautifulSoup(rq.content, 'html.parser', from_encoding="utf-8")
# print(rq.status_code) #status_code should be 200 which means a success
print(soupObject.select(".tit_post a")) # print the title of bs based on the request
# result should be
# the title of the post in the url
# like
"""
[[Docker] Get started with Docker. What is Docker?]
"""
2. app.py가 잘 작동되는지 확인한다.
$ python3 app.py
or
$ python app.py
등등 자기 환경에 맞는 명령어를 통해 python 실행
: 제 환경의 경우 python3.6은 한글도 문제없이 출력되는데
python2.7은 한글은 깨져서 출력되네요.
3. pip uninstall 을 통해 app.py를 실행시키는데 필요한 모듈을 삭제해본다.
$ sudo pip uninstall bs4 requests
환경에 따라 pip3 등등
4. python을 실행시키고 module이 삭제되었는지 확인해본다.
$ python
>>> import bs4
>>> import requests
위와같이 삭제한 module을 import 하려할 때 에러가 발생되면 잘한거임!!
혹시 bs4를 지웠음에도 import bs4가 에러가 뜨지 않았다면
$ sudo pip uninstall beautifulsoup4
를 통해 다시 한 번 지워보세요.
5. 삭제되었으면 app.py를 실행시켜도 모듈이 없다며 오류가 나야한다.
$ python app.py
6. 내 컴퓨터에서는 app.py가 실행이 안되는 상태에서
requirements.txt와 Dockerfile을 생성한다. (requiremetns는 app.py등 프로그램을 실행시킬 때 설치할 모듈들 )
$ vi requirements.txt
$ vi Dockerfile
# Dockerfile
# without an file extension
# Use an official Python runtime as a parent image
FROM python:3.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
requirements.txt 내용
bs4
requests
7. docker build를 통해 image를 빌드하세요
$ docker build --tag=docker_tutorial_1 .
등 자기가 원하는 이름
. 도 빼먹지 말아요
--tag라는 옵션으로 image의 이름을 줄 수 있습니다.
뭐라고 뭐라고 주루루루룩 뜬 다음에 마지막에 Successfully가 뜨면 되겠죠~~
성공적으로 image를 build하면 위처럼
$ docker image ls
입력 시 몇 개의 image가 뜰 수 있습니다. ( 방금 껀 무조건 떠야하고 )
8. build된 image를 이용해 docker run 한다.
$ docker run docker_tutorial_1
9. 성공적으로 프로그램이 실행된다.
위의 그림과 같이 나오면 됩니다!
제 컴퓨터에서는 아까 bs4와 requests를 remove했는데도 다시 install 하지 않았지만, 마치 install 한 것처럼 작동이 되는 것입니다!! 가상환경에서 작업이 이루어지기 때문인것이죠.
그럼 아까 bs4랑 rquests를 지웠으니 다시
$ sudo pip install bs4 requests
를 이용해 module을 설치해주세요 ( 안 쓰시는 모듈이면 안 해도 됨. )
'Linux > Docker' 카테고리의 다른 글
docker daemon 설정을 이용해 원격으로 docker 이용하기 (0) | 2020.03.08 |
---|---|
Docker 를 이용해 가장 간단하게 다양한 가상환경에서 작업하기 (0) | 2019.09.08 |
Dockerfile의 CMD와 ENTRYPOINT 차이. docker-compose.yml의 command (0) | 2019.08.26 |
[Docker] Docker 시작하기. Docker란? Docker와 Container의 개념에 대하여 (0) | 2019.03.16 |
클라우드 컴퓨팅이란? with 데이터센터 (0) | 2019.03.14 |