📙
Daeun's devlogs
  • First page
  • Docker
    • 이미지, 레이어
    • 컨테이너 생성하기
    • Dockerfile로 이미지 생성하기
    • 이미지를 dockerhub repo에 push하기
  • Python
  • Algorithm Study
  • 방향없는 그래프(undirected graph)
  • 방향있는 그래프(directed graph)
  • 위상 정렬(topological sort)
  • BFS(Breadth-First Search)
  • 다익스트라(Dijkstra)
  • 벨만-포드(Bellman-Ford) 알고리즘
  • 최소신장트리(Minimum Spanning Tree)
  • 크루스칼(Kruskal) 알고리즘
  • Algorithm quiz
    • quizzes & solutions
    • graph에서 cycle 유무 확인하기
    • bipartite(이분그래프) 확인하기
    • Dijkstra 알고리즘으로 모든 정점으로의 최단 경로 구하기
  • operating system
  • 스루풋 & 레이턴시
  • Cloud Computing
    • cloud computing 의 종류
    • CloudFormation으로 EC2 & ElasticIP 생성하기
  • Network
    • DataLink 계층
    • Network 계층
    • subnetting & CIDR
    • Domain Name System
    • Transport 계층
  • Unix
    • dig 커맨드로 DNS서버에 질의하기
    • APT(Advanced Package Tool)로 젠킨스 설치하기
    • usermod 로 그룹에 유저 추가하기
    • sysctl 로 커널 변수 조회하기
  • Django
    • 마이그레이션 실행여부 확인하기
    • 마이그레이션 DDL 쿼리 확인하기
  • Kubernetes
  • 쿠버네티스(Kubernetes) 개념
  • k8s 클러스터에 애플리케이션 서버 실행하기
  • kops로 AWS에 k8s 클러스터 생성하기
  • k8s 클러스터에 replicaset 생성하기
  • Nginx & WSGI pod를 service로 노출하기
  • Helm으로 쿠버네티스 리소스 배포하기
Powered by GitBook
On this page
  • Dockerfile 작성하기
  • Dockerfile로 이미지 생성하기
  • 이미지로 컨테이너 생성하기

Was this helpful?

  1. Docker

Dockerfile로 이미지 생성하기

Dockerfile 작성하기

  • 이미지를 만들기 위해 Dockerfile 이라는 파일에 도커의 자체 DSL(Domain-Specific Language)를 사용하여 이미지 생성 명령어를 기록할 수 있다.

  • $ docker build 명령어를 사용하면 도커는 작성했던 Dockerfile을 읽어들여 이미지를 생성한다.

Flask 애플리케이션 이미지를 생성하는 Dockerfile을 만들어보겠다. 먼저 flask로 애플리케이션 서버를 띄울 수 있도록 app.py를 작성한다.

import time
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World!'

그리고 도커이미지를 생성하기 위해 Dockerfile을 작성한다.

# 1. 파이썬 설치 & dockerfile 작성자 표시.
FROM python:3.7-alpine
LABEL maintainer=kde6260@gmail.com

# 2. working directory 설정.
RUN mkdir /home/docker-practice
WORKDIR /home/docker-practice

# 3. 환경변수 설정.
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0

# 소스 복사 & 패키지 설치.
COPY . /home/docker-practice
RUN pip install -r requirements.txt

# 애플리케이션 서버 실행.
EXPOSE 8888
CMD flask run --port=8888

FROM : 새로운 이미지 빌드를 위한 기초이미지를 불러온다. 유효한 Dockerfile은 FROM 명령어로 시작해야 한다.

LABEL : 생성될 이미지에 메타데이터를 추가한다. 위 파일에서는 도커파일 작성자를 정의했다.

WORKDIR : 컨테이너에 RUN , CMD , COPY등과 같은 명령어를 실행할 디렉토리를 지정한다. 여러 개의 명령어로 디렉토리를 이동할 수 있다.

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

위 도커파일의 실행 결과 : /a/b/c

ENV <key> <value> : 환경변수를 정의한다. 이 명령어가 정의된 이후의 명령어들은 이 명령어에서 정의된 환경변수를 기반으로 동작한다.

COPY <src> <dest> : 호스트에 있는 <src> 파일 또는 디렉토리 컨테이너의 <dest> 에 복사한다.

EXPOSE <port> [<port/protocol>] : 컨테이너가 열어놓을 포트번호를 설정한다. 옵셔널하게 프로토콜도 지정 가능.

CMD <param1> <param2> : 실행가능한 명령어인 param1 과 argument 인 param2 를 넘겨서 컨테이너가 생될 때 돌아갈 커맨드를 정의한다. 하나의 도커파일에 1개의 CMD 명령어만 들어갈 수 있다.

Dockerfile로 이미지 생성하기

작성한 Dockerfile로 이미지를 생성하려면 Dockerfile이 있는 디렉토리로 이동해서 아래의 명령어를 실행한다.

$ docker build -t flask-with-docker .

--tag , -t

Name and optionally a tag in the ‘name:tag’ format

위 명령어를 실행하면 dockerfile에 작성되어있던 명령어들이 하나씩 실행된 후 이미지가 생성된다. 로컬에 있는 이미지들을 조회하면 아래와 같이 나타난다.

➜  docker-practice docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
flask-with-docker        latest              6d3a6c727008        5 seconds ago       203MB
ubuntu                   16.04               5e13f8dd4c1a        7 weeks ago         120MB

이미지로 컨테이너 생성하기

$ docker run -d -p 8888:8888 flask-with-docker

위 명령어를 실행하면 컨테이너가 생성되고 0.0.0.0:8888으로 플라스크에서 구동하는 웹 애플리케이션 서버에 접속할 수 있다. 소스코드가 변경되면 이미지를 다시 생성해야 한다.

Previous컨테이너 생성하기Next이미지를 dockerhub repo에 push하기

Last updated 5 years ago

Was this helpful?

더 많은 dockerfile instruction :

https://docs.docker.com/engine/reference/builder/