클라우드 컴퓨팅에서 컨테이너란 무엇인가요?
2013년 Docker가 등장한 이후 컨테이너의 인기는 폭발적으로 증가했습니다. 이미 많은 기업이 소프트웨어를 쉽게 배포, 배포, 관리 및 확장할 수 있는 컨테이너를 워크플로에 통합하고 있습니다.
이 글에서는 클라우드 컴퓨팅에서 컨테이너란 무엇인지 설명합니다. 컨테이너 사용의 이점과 사용 사례, 가상 머신과 비교하고 Docker와 Kubernetes에 대해 살펴봅니다. 마지막으로 웹 애플리케이션을 코딩하고, 도커화하여 Back4app 컨테이너에 배포하는 방법을 완전히 무료로 알려드립니다!
Contents
컨테이너 정의
컨테이너는 코드, 런타임, 라이브러리, 환경 변수, 구성 파일 등 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 독립 실행형 실행 패키지입니다. 컨테이너화된 앱의 멋진 점은 로컬 개발 환경부터 퍼블릭 클라우드 등 어디에서나 실행할 수 있다는 것입니다. 컨테이너는 크기가 작고 효율적이며 효과적인 격리가 가능합니다.
컨테이너 사용의 이점
컨테이너를 사용하면 몇 가지 이점이 있습니다. 그 중 몇 가지를 살펴보겠습니다.
효율성
컨테이너는 운영 체제 이미지를 포함하지 않기 때문에 기존 서버나 가상 머신보다 적은 시스템 리소스를 필요로 합니다. 따라서 매우 효율적이고 크기가 작으며(보통 MB 단위로 측정) 하나의 서버에서 상당한 수의 애플리케이션을 실행할 수 있습니다.
애플리케이션 격리
컨테이너는 애플리케이션과 애플리케이션의 종속성을 호스트 시스템으로부터 격리합니다. 동시에 OS 커널과 CPU, 메모리, 스토리지, 네트워크와 같은 시스템 리소스를 공유할 수 있습니다.
휴대성
컨테이너화된 소프트웨어는 컨테이너 엔진이 설치된 거의 모든 머신에서 동일한 방식으로 실행되고 작동할 수 있습니다. 따라서 서로 다른 환경 간에 앱을 쉽게 배포하고 이동할 수 있으며 “내 컴퓨터에서만 작동한다”는 문제를 해결할 수 있습니다.
책임의 분리
컨테이너는 개발자와 IT 운영팀 간에 작업과 책임을 분담하여 책임 분담을 가능하게 합니다. 개발자는 애플리케이션 코드와 종속성을 생성하고 유지 관리하며, IT 운영팀은 컨테이너와 기본 인프라를 배포하고 관리하는 데 집중할 수 있습니다.
더 빠른 애플리케이션 개발
컨테이너화를 사용하면 소프트웨어를 더 쉽게 개발, 테스트, 관리 및 배포할 수 있습니다. 컨테이너는 CI/CD 시스템과 쉽게 통합할 수 있으므로 소프트웨어 개발 및 출시 프로세스를 크게 가속화할 수 있습니다.
간편한 확장
컨테이너화된 애플리케이션을 Kubernetes와 같은 오케스트레이션 플랫폼과 결합하면 필요에 따라 쉽게 확장할 수 있습니다. 이를 통해 비즈니스는 비용을 최소화하면서 높은 워크로드를 수용할 수 있습니다.
컨테이너 사용 사례
컨테이너 기술은 개발자뿐만 아니라 IT 운영팀에도 많은 사용 사례가 있습니다.
컨테이너 네이티브 개발
컨테이너 네이티브 개발은 컨테이너를 기본 빌딩 블록으로 활용하는 소프트웨어 개발 접근 방식입니다. 컨테이너 네이티브 개발에서는 애플리케이션이 컨테이너로 패키징되어 컨테이너화된 환경에서 실행됩니다. 이 개발 접근 방식은 컨테이너가 제공하는 모든 멋진 이점을 제공합니다.
지속적 통합 및 지속적 배포(CI/CD)
CI/CD 파이프라인에서 컨테이너는 애플리케이션을 패키징하고 자동화된 테스트를 실행하는 데 사용되므로 일관되고 반복 가능한 방식으로 애플리케이션을 테스트하고 배포할 수 있습니다. 컨테이너는 CI/CD 파이프라인의 일부로 쉽게 생성, 테스트 및 배포할 수 있어 오류의 위험을 줄이고 소프트웨어 개발 프로세스의 전반적인 효율성을 개선할 수 있습니다.
마이크로서비스
컨테이너는 마이크로서비스 아키텍처를 따르는 앱을 개발하는 데 사용할 수 있습니다. 컨테이너를 사용하면 모놀리식 앱을 서로 다른 컨테이너에서 실행되는 느슨하게 결합된 세분화된 서비스 모음으로 쉽게 분할할 수 있습니다.
개발 환경
컨테이너를 사용하면 개발자 팀이 개발 환경을 쉽게 설정할 수 있습니다. 컨테이너는 호스트 운영 체제 및 호스트 라이브러리에 관계없이 일관된 개발 환경을 제공합니다.
배치 프로세스
배치 프로세스는 쉽게 컨테이너화하여 클라우드에 배포할 수 있습니다. 각 작업은 개별 컨테이너 이미지로 패키징되어 별도의 컨테이너 인스턴스로 실행됩니다. 따라서 각 작업이 자체 환경에서 실행되고 다른 작업을 방해하지 않으므로 리소스를 효율적으로 활용할 수 있습니다.
컨테이너와 가상 머신 비교
컨테이너와 가상 머신은 가상화에 대한 두 가지 다른 접근 방식입니다. 몇 가지 유사점이 있긴 하지만 상당히 다릅니다.
가상 머신(VM)은 물리적 하드웨어를 추상화한 것입니다. 가상 머신을 사용하면 하나의 서버를 여러 대의 서버로 전환할 수 있습니다. 각 VM에는 자체 운영 체제가 있으며 일반적으로 하이퍼바이저에 의해 관리됩니다. VM은 동일한 서버에서 여러 애플리케이션, 모놀리식 애플리케이션, 고도의 격리 및 보안이 필요한 애플리케이션을 실행하는 데 적합합니다. 단점은 공간을 많이 차지하는 경향이 있고 부팅 속도가 상당히 느리다는 것입니다.
반면 컨테이너는 운영 체제 수준에서 가상화됩니다. 컨테이너는 동일한 Linux 커널을 공유하기 때문에 공간을 덜 차지하고, 더 효율적이며, 부팅 속도가 빠르고, 확장성이 뛰어나며, 더 많은 애플리케이션을 처리할 수 있습니다. 컨테이너는 컨테이너 엔진에 의해 관리됩니다. VM과 달리 컨테이너의 주요 사용 사례는 휴대성, 경량성, 확장성이 필요한 마이크로서비스 및 애플리케이션입니다.
컨테이너와 VM을 결합하여 두 가지의 장점을 모두 누릴 수도 있습니다.
Docker 및 Kubernetes
컨테이너 작업에 가장 많이 사용되는 두 가지 도구는 Docker와 Kubernetes입니다. 두 도구의 작동 방식을 설명하고 차이점을 살펴보겠습니다.
Docker는 경량 컨테이너에서 애플리케이션의 배포 및 관리를 자동화하는 데 사용되는 Linux 기반 오픈 소스 프로젝트입니다. 이를 통해 컨테이너화된 앱이 다양한 환경에서 효율적으로 작동할 수 있습니다. 오늘날 Docker는 Linux 머신부터 대형 클라우드 제공업체 등 거의 모든 곳에서 찾아볼 수 있습니다.
가장 인기 있는 Docker 대안으로는 Podman, LXD, containerd 있습니다.
쿠버네티스(K8s)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하기 위한 오픈소스 컨테이너 오케스트레이션 시스템입니다. 2014년에 출시된 이후 클라우드 환경에서 컨테이너화된 애플리케이션을 배포하고 운영하기 위한 사실상 표준으로 자리 잡았습니다. 확장성, 고가용성, 자동화된 운영, 인프라 추상화, 상태 모니터링 등의 이점을 제공하는 Kubernetes의 장점은 다음과 같습니다.
기타 오케스트레이션 플랫폼은 다음과 같습니다: AWS ECS, Nomad 및 Red Hat OpenShift.
그렇다면 도커와 쿠버네티스의 차이점은 무엇일까요? 간단히 말해서, Docker를 사용하면 컨테이너 내에서 애플리케이션을 패키징하고 배포할 수 있는 반면, Kubernetes를 사용하면 여러 컨테이너가 서로 조화롭게 작동하도록 쉽게 만들 수 있습니다.
컨테이너 기반 아키텍처를 사용한 앱 개발
이 튜토리얼의 이 섹션에서는 간단한 REST API를 생성하고, 도커화하여 Back4app 컨테이너에 배포하는 방법을 알아봅니다.
Back4app 컨테이너란 무엇인가요?
Back4app 컨테이너는 클라우드 인프라의 전 세계에 분산된 컨테이너에 앱을 배포하고 확장하기 위한 무료 오픈 소스 플랫폼입니다.
DevOps에 대해 걱정할 필요 없이 소프트웨어에만 집중하여 더 빠르게 출시할 수 있습니다. 이 플랫폼은 GitHub와 긴밀하게 통합되어 있고 CI/CD 시스템이 내장되어 있으며 몇 분 안에 앱을 실행할 수 있습니다!
Back4app 컨테이너를 사용하는 이유는 무엇인가요?
- GitHub와 잘 통합
- 다운타임 없는 배포
- 사용하기 쉽고 무료 티어가 있습니다.
- 탁월한 고객 지원
프로젝트 소개
영화 시청 목록 역할을 하는 간단한 REST API를 구축할 것입니다. 웹 앱에서는 영화 추가, 영화 삭제 등과 같은 기본적인 CRUD 작업을 수행할 수 있습니다. API를 만들기 위해 Flask 프레임워크를 사용하겠습니다. 마지막으로 프로젝트를 도커화하여 Back4app 컨테이너에 배포하는 것이 얼마나 쉬운지 보여드리겠습니다.
전제 조건
코드 앱
다음 단계를 수행하려면 Python이 설치되어 있어야 합니다. 아직 Python이 설치되어 있지 않다면 지금 바로 다운로드하세요.
프로젝트 초기화
먼저 앱 전용 디렉토리를 만들고 해당 디렉토리로 이동합니다:
$ mkdir flask-watchlist
$ cd flask-watchlist
그런 다음 새 가상 환경을 만들고 활성화합니다:
$ python3 -m venv venv && source venv/bin/activate
Flask를 프레임워크로 사용할 예정이므로 이를 설치해야 합니다:
$ (venv) pip install Flask==2.2.2
다음 내용으로 app.py를 생성합니다:
# app.py
from flask import Flask
app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False
@app.route('/')
def index_view():
return {
'detail': 'Hello world!'
}
이 코드는 Flask를 초기화하고 메시지를 반환하는 간단한 엔드포인트를 생성합니다.
서버를 실행합니다:
$ flask run
http://localhost:5000/ 으로 이동하면 Hello world!
라는 메시지가 표시됩니다.
데이터베이스
데이터베이스에는 SQLite를 사용하겠습니다. SQLite는 서버가 필요 없는 임베디드 관계형 데이터베이스 관리 시스템입니다. 데이터베이스 작업을 간소화하기 위해 앱에 SQLAlchemy에 대한 지원을 추가하는 Flask용 확장 프로그램인 Flask-SQLAlchemy를 설치하겠습니다.
실행하여 설치하세요:
$ (venv) pip install Flask-SQLAlchemy==3.0.3
그런 다음 app.py의 상단으로 이동하여 다음과 같이 변경하여 데이터베이스를 초기화합니다:
# app.py
db = SQLAlchemy()
app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False
app.config['SECRET_KEY'] = '5b3cd5b80eb8b217c20fb37074ff4a33'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///default.db"
db.init_app(app)
가져오기를 잊지 마세요:
from flask_sqlalchemy import SQLAlchemy
다음으로 데이터베이스 모델을 정의해 보겠습니다.
간단한 영화 시청 목록 앱을 구축하는 것이므로 하나의 모델만 필요합니다. 다음과 같이 영화
모델을 정의합니다:
# app.py
class Movie(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(128), nullable=False)
release_date = db.Column(db.Date(), nullable=False)
is_watched = db.Column(db.Boolean, default=False)
watched_at = db.Column(db.DateTime, default=None, nullable=True)
def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
def __repr__(self):
return '<Movie %r>' % self.title
데이터베이스를 초기화하고 채우기 위해 간단한 Python 스크립트를 만들겠습니다. 프로젝트 루트로 이동하여 다음 내용으로 init_db.py라는 새 파일을 만듭니다:
# init_db.py
from datetime import date
from app import db, app
from app import Movie
with app.app_context():
db.create_all()
if Movie.query.count() == 0:
movies = [
Movie(title='Fight Club', release_date=date(1999, 9, 15)),
Movie(title='The Matrix', release_date=date(1999, 3, 31)),
Movie(title='Donnie Darko', release_date=date(2001, 1, 19)),
Movie(title='Inception', release_date=date(2010, 7, 16)),
]
for movie in movies:
db.session.add(movie)
db.session.commit()
마지막으로 해야 할 일은 스크립트를 실행하는 것입니다:
$ (venv) python init_db.py
이렇게 하면 데이터베이스와 데이터베이스 테이블이 생성되고 테이블이 채워집니다. 데이터베이스 파일은 인스턴스 폴더에 배치됩니다.
API 엔드포인트
웹 앱에는 다음과 같은 엔드포인트가 있습니다:
/
기본 API 정보를 반환합니다./api/는
영화 목록을 반환합니다./api/create/는
새 영화를 시청 목록에 추가합니다./api/
/ 특정 영화의 세부 정보를 반환합니다./api/watch/
/ 동영상을 본 것으로 표시합니다.
app.py의 하단에 엔드포인트를 정의하세요:
# app.py
@app.route('/')
def index_view():
return {
'name': 'flask-watchlist',
'description': 'a simple app for tracking the movies you want to watch',
'version': 1.1,
}
@app.route('/api/')
def list_view():
json = [movie.as_dict() for movie in Movie.query.all()]
return jsonify(json)
@app.route('/api/<int:movie_id>/', methods=['GET', 'DELETE'])
def detail_view(movie_id):
movie = db.get_or_404(Movie, movie_id)
if request.method == 'DELETE':
db.session.delete(movie)
db.session.commit()
return {
'detail': 'Movie has been successfully deleted.'
}
else:
return movie.as_dict()
@app.route('/api/create/', methods=['POST'])
def create_view():
title = request.form.get('title')
release_date = request.form.get('release_date', type=float)
if title is None or release_date is None:
return {
'detail': 'Please provide the title and release_date.'
}, 400
movie = Movie(title=title, release_date=datetime.fromtimestamp(release_date))
db.session.add(movie)
db.session.commit()
return movie.as_dict()
@app.route('/api/watch/<int:movie_id>/')
def watch_view(movie_id):
movie = db.get_or_404(Movie, movie_id)
if movie.is_watched:
return {
'detail': 'Movie has already been watched.'
}, 400
movie.is_watched = True
movie.watched_at = datetime.now()
db.session.commit()
return movie.as_dict()
수입품도 잊지 마세요:
from datetime import datetime
from flask import request, jsonify
이제 앱이 어느 정도 완성되었습니다. 개발 서버를 실행합니다:
$ (venv) flask run
동영상 목록을 가져올 수 있는지 테스트합니다:
$ (venv) curl http://localhost:5000/api/ | jq '.'
[
{
"id": 1,
"title": "Fight Club",
"release_date": "Wed, 15 Sep 1999 00:00:00 GMT",
"is_watched": false,
"watched_at": null
},
{
"id": 2,
"title": "The Matrix",
"release_date": "Wed, 31 Mar 1999 00:00:00 GMT",
"is_watched": false,
"watched_at": null
},
...
]
Gunicorn
Flask 개발 서버는 프로덕션에 적합하지 않으므로 Gunicorn으로 교체해 보겠습니다. Gunicorn 또는 “Green Unicorn”은 프로덕션에 사용할 수 있는 유닉스용 Python WSGI HTTP 서버입니다.
실행하여 설치합니다:
$ (venv) pip install gunicorn==20.1.0
패키지가 설치되면 다음과 같이 WSGI 서버를 시작할 수 있습니다:
$ (venv) gunicorn -w 2 -b 0.0.0.0:5000 app:app
[INFO] Starting gunicorn 20.1.0
[INFO] Listening at: http://0.0.0.0:5000 (1)
[INFO] Using worker: sync
[INFO] Booting worker with pid: 7
[INFO] Booting worker with pid: 8
이 명령은 UNIX 기반 운영 체제에서만 작동한다는 점에 유의하세요.
이렇게 하면 두 명의 Gunicorn 워커가 시작되고 앱이 인터넷에 노출됩니다. 앱에 액세스하려면 즐겨찾는 웹 브라우저를 열고 http://localhost:5000 으로 이동합니다.
요구 사항.txt
앱을 도커라이즈하기 전에 마지막으로 해야 할 일은 요구사항.txt 파일을 만드는 것입니다. 요구사항 .txt 파일은 프로젝트의 종속성을 지정하는 데 사용됩니다.
가장 쉽게 생성하는 방법은 실행하는 것입니다:
$ (venv) pip freeze > requirements.txt
도커라이즈 앱
다음 단계를 수행하려면 Docker가 설치되어 있어야 합니다. Docker를 설치하는 가장 쉬운 방법은 Docker Desktop을 다운로드하는 것입니다.
Docker가 설치되어 있는지 확인하려면 실행합니다:
$ docker --version
Docker version 20.10.22, build 3a2c30b
Dockerfile
애플리케이션을 도커화하기 위해 Dockerfile을 사용하겠습니다. Dockerfile은 기본 이미지, 환경, 환경 변수, 명령어, 네트워킹 설정, 볼륨 등을 정의할 수 있는 일반 텍스트 파일입니다.
프로젝트 루트에 다음 내용으로 Docker파일을 생성합니다:
# syntax=docker/dockerfile:1.4
FROM --platform=$BUILDPLATFORM python:3.10-alpine
# set the working directory
WORKDIR /app
# set environmental variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install the requirements
COPY requirements.txt /app
RUN --mount=type=cache,target=/root/.cache/pip \
pip3 install -r requirements.txt
# copy the code to the container
COPY . .
# initialize the database (create DB, tables, populate)
RUN python init_db.py
# expose
EXPOSE 5000/tcp
# entrypoint command
CMD ["gunicorn", "-w", "2", "-b", "0.0.0.0:5000", "app:app"]
- 기본 이미지로
python:3.10-alpine을
사용했습니다. - 파이썬이 더 이상 .pyc 파일을 디스크에 쓰지 않도록
PYTHONDONTWRITEBYTECODE를
1로
설정합니다. - 파이썬 출력 스트림이 터미널로 바로 전송되도록
파이썬언버퍼를
1로
설정합니다.
Dockerfile 작성에 대한 자세한 내용은 Dockerfile 참조를 참조하세요.
.dockerignore
Docker는 이미지를 빌드하기 전에 .dockerignore 파일을 찾습니다. .dockerignore 파일을 사용하면 이미지에 포함하지 않을 파일을 정의할 수 있습니다. 이렇게 하면 이미지 크기를 크게 줄일 수 있습니다. .gitignore 파일과 유사하게 작동합니다.
프로젝트 루트에 다음 내용으로 .dockerignore 파일을 만듭니다:
# .dockerignore
.git/
instance/
__pycache__/
.idea/
제외할 디렉토리나 파일을 추가로 추가하세요.
이미지 빌드 및 실행
이제 Docker 이미지를 빌드하고 태그를 지정해 보겠습니다.
$ docker build -t flask-watchlist:1.0 .
[+] Building 11.1s (15/15) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 34B 0.0s
=> resolve image config for docker.io/docker/dockerfile:1.4 0.5s
=> CACHED docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531a0dbc 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> [internal] load .dockerignore 0.0s
=> [internal] load metadata for docker.io/library/python:3.10-alpine 0.5s
=> [stage-0 1/6] FROM docker.io/library/python:3.10-alpine@sha256:da5ab5e911253dfb 0.0s
=> [internal] load build context 0.3s
=> => transferring context: 182.45kB 0.2s
=> CACHED [stage-0 2/6] WORKDIR /app 0.0s
=> [stage-0 3/6] COPY requirements.txt /app 0.0s
=> [stage-0 4/6] RUN --mount=type=cache,target=/root/.cache/pip
pip3 install -r requirements.txt 7.2s
=> [stage-0 5/6] COPY . . 0.3s
=> [stage-0 6/6] RUN python init_db.py 1.5s
=> exporting to image 0.3s
=> => exporting layers 0.3s
=> => writing image sha256:2671ccb7546a0594807c721a0600a 0.0s
=> => naming to docker.io/library/flask-watchlist:1.0
이미지를 나열하면 새 이미지가 표시됩니다:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flask-watchlist 1.0 7bce66230eb1 8 hours ago 110MB
마지막으로 이미지를 사용하여 새 Docker 컨테이너를 스핀업합니다:
$ docker run -it -p 5000:5000 flask-watchlist:1.0
[2023-02-02 20:08:57 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2023-02-02 20:08:57 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2023-02-02 20:08:57 +0000] [1] [INFO] Using worker: sync
[2023-02-02 20:08:57 +0000] [7] [INFO] Booting worker with pid: 7
[2023-02-02 20:08:57 +0000] [8] [INFO] Booting worker with pid: 8
d를
사용하여 분리된 모드에서 Docker 컨테이너를 시작할 수 있습니다. 즉, 컨테이너가 터미널의 백그라운드에서 실행되며 입력을 받거나 출력을 표시하지 않습니다.
이제 앱이 컨테이너에서 실행 중입니다! http://localhost:5000 으로 이동하면 다음과 같은 응답이 표시됩니다:
{
"name": "flask-watchlist",
"description": "a simple app for tracking the movies you want to watch",
"version": 1
}
GitHub
Back4app 컨테이너에 앱을 배포하려면 소스 코드를 GitHub 리포지토리에 업로드해야 합니다. GitHub에 새 리포지토리를 만들고 리모트를 추가한 다음 .gitignore 파일을 추가하고 코드를 커밋합니다. 코드가 GitHub에 업로드되면 다음 단계로 이동합니다.
Back4app 컨테이너에 앱 배포하기
다음 단계를 수행하려면 Back4app 계정이 필요합니다. 이미 계정이 있는 경우 로그인하고 그렇지 않은 경우 무료 계정에 가입하세요.
Back4app으로 작업하려면 먼저 앱을 만들어야 합니다. 대시보드에 로그인하면 앱 목록이 표시됩니다. 새 앱을 만들려면 “새 앱 만들기”를 클릭합니다.
다음으로 ‘서비스형 컨테이너’를 선택합니다.
아직 연결하지 않았다면 GitHub를 Back4app에 연결하고 배포하려는 리포지토리를 가져오세요. GitHub가 연결되면 리포지토리가 표에 표시됩니다.
“선택”을 클릭하여 배포할 리포지토리를 선택합니다.
다음으로 Back4app에서 환경 구성을 요청합니다. 앱 이름을 선택하세요. 저는 Flask 감시 목록으로
하겠습니다. 다른 모든 항목은 기본값으로 그대로 두세요.
마지막으로 ‘앱 만들기’를 클릭하면 자동으로 앱을 생성하고 배포할 수 있습니다.
그러면 배포 로그를 볼 수 있는 앱 세부 정보로 리디렉션됩니다.
앱이 배포될 때까지 몇 분 정도 기다리면 짜잔! 이제 앱이 Back4app 컨테이너에 배포되었습니다. 앱이 작동하는 모습을 보려면 왼쪽에 표시된 녹색 URL을 클릭하세요.
결론
지금까지 컨테이너의 정의와 이점을 설명하고 컨테이너를 워크플로에 구현하는 방법을 설명했습니다. 이제 여러분은 자신만의 간단한 REST API를 빌드하고, 이를 도커화하여 Back4app 컨테이너에 배포할 수 있을 것입니다.
GitHub 리포지토리에서 최종 소스 코드를 가져옵니다.
향후 단계
- 이미지에 데이터베이스를 저장해서는 안 됩니다. 현재로서는 재배포할 때마다 데이터베이스가 초기화됩니다. 관리형 PostgreSQL 또는 MySQL 인스턴스로 전환하는 것을 고려하세요.
- 다단계 빌드를 통해 Docker파일을 최적화하는 방법에 대해 알아보세요.
- 단계별 튜토리얼은 Docker 컨테이너 배포하기 문서를 읽어보세요.
자주 묻는 질문
컨테이너란 무엇인가요?
컨테이너는 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 독립 실행형 패키지입니다. 여기에는 코드, 런타임, 라이브러리, 환경 변수, 구성 파일이 포함됩니다.
컨테이너를 사용하는 이점은 무엇인가요?
– 효율성
– 애플리케이션 격리
– 책임 분리
– 더 빠른 애플리케이션 개발
컨테이너와 가상 머신의 차이점은 무엇인가요?
가상 머신은 물리적 하드웨어의 추상화인 반면, 컨테이너는 운영 체제 수준에서 가상화됩니다. 가상 머신은 더 높은 격리성과 보안을 제공하지만, 컨테이너는 공간을 적게 차지하고 효율적이며 확장 가능합니다.
Docker와 Kubernetes의 차이점은 무엇인가요?
Docker는 애플리케이션을 컨테이너로 패키징하고 배포할 수 있게 해주며, Kubernetes는 여러 개의 컨테이너가 함께 작동하도록 쉽게 만들어줍니다.
컨테이너 기반 아키텍처로 앱을 개발하는 방법은?
1. 프로그래밍 언어를 선택하고 앱을 작성하세요.
2. Dockerfile 또는 Docker Compose로 앱을 도커라이징하세요.
3. Docker 이미지를 빌드하고 로컬에서 테스트하세요.
4. Back4app Containers 같은 CaaS를 선택하고 코드를 푸시하세요.
서비스가 배포될 때까지 기다리면 완료입니다!