Docker 초보자 | ptyhon 서버를 시작하여 로컬에서 접근 | 공식 강좌에서 part2

6368 단어 Docker초학자

Docker file 만들기


로컬 디렉토리에서 Docker file을 만듭니다.
Dockerfile
# ベースとなるイメージの指定
# 自動的に docker hub からダウンロード出来る
FROM python:2.7-slim

# コンテナのワークディレクトリの指定
WORKDIR /app

# ローカルのカレントディレクトリの中身を全て コンテナのワークディレクトリにコピーする
# コンテナ実行時ではなく、イメージ作成時にコピーされる
ADD . /app

# python スクリプトでモジュールをインストールするための処理
RUN pip install -r requirements.txt

EXPOSE 80

# 環境変数の指定
# Docker コンテナで export NAME=World した状態になる
ENV NAME World

# コンテナ実行時に走らせるコマンドの指定
# この例では $ python app.py というコマンドが走る
CMD ["python", "app.py"]

스크립트 생성


같은 디렉터리에 ptyhon 스크립트를 만듭니다.
app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr('counter')
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv('NAME', "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)
requirements.txt
Flask
Redis

이미지 만들기


Docker file을 기반으로 이름을 붙여 이미지를 만든다.
docker build -t python-server .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
python-server       latest              c3907742b08f        7 seconds ago       195 MB

용기의 제작


지정한 포트 운행 컨테이너.
이 예에서 로컬 4000번에서 도커의 80번을 방문할 수 있습니다.
docker run -p 4000:80 python-server

로컬 액세스


http://localhost:4000/가 나오면 성공합니다.

(손에 왜 리디스가 움직이지 않았는지...나중에 조사)

서버 접속


용기를 실행하고 있다면, 도커 서버에 바로 들어갈 수 있습니다.

프로세스 ID 확인

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                  NAMES
c7b95a8a2a22        python-server       "python app.py"     About a minute ago   Up About a minute   0.0.0.0:4000->80/tcp   examole-server

exec


컨테이너 IDdocker exec를 지정합니다.
예:
docker exec -it c7b95a8a2a22 /bin/bash

확인 파일


docker 용기에 파일이 펼쳐져 있음을 알 수 있습니다.
$ ls
Dockerfile  app.py  requirements.txt

환경 변수 확인


Doke rfile에서 설명하는 환경 변수는 export입니다.
$ echo $NAME
World

참고 자료

  • Get Started, Part 2: Containers - Docker Documentation
  • 좋은 웹페이지 즐겨찾기