我刚开始使用docker,我正在试图弄清楚如何部署我们的webapplication。 我们得到了:
我的第一个方法是将它全部放在一个ubuntu容器中,然后部署它。这导致了一个非常长的dockerfile,所以我认为这不是正确的方式I googled best practices并且达到了每个容器应该只有一个问题的程度。
这是否意味着我应该为上述每个进程使用一个容器并链接它们,这将导致4个正在运行的容器(数据库中有一个容量)?
我现在看到的优点是:
我能想到的唯一两个缺点是
答案 0 :(得分:10)
您可以使用4种不同的容器!使用Docker,您通常希望尝试保持每个容器相对简单,但这并不意味着您必须将每个组件分成不同的容器,例如您的Web应用程序来自您的服务器API(我发现将它们组合在同一容器中很有用,因为它使通信更容易)但是将数据库放在一个单独的容器中是一种好习惯。 Docker有一个名为Docker Compose的工具,用于启动容器应用程序:
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用Compose文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。 - Overview of Docker Compose
要使用此工具,您将:
为每个单独的容器创建一个包含文件夹的项目目录。
通过为子文件夹中的每个容器(Web App / Server API)(数据库)创建Dockerfile
来定义应用程序环境。
服务器API的Dockerfile(和Web App(角度):
# Create image based on the official Node 6 image from dockerhub
FROM node:6
# Create a directory where our app will be placed
RUN mkdir -p /usr/src/app/
# Change directory so that our commands run inside this new directory
WORKDIR /usr/src/app
# Get all the code needed to run the app
COPY . /usr/src/app
# Move into AngularApp directory
WORKDIR /usr/src/app/public
# Install dependencies for AngularApp
RUN npm install
# Changed to updated angular dependency
RUN ./node_modules/@angular/cli/bin/ng build
# Move into server directory
WORKDIR /usr/src/app/server
# Install dependencies for server
RUN npm install
# Return to top level directory of project
WORKDIR /usr/src/app
# Add API environment variables
ENV USERNAME="username"
ENV PASSWORD="password"
# Expose the port the app runs in
EXPOSE 4200
EXPOSE 80
WORKDIR /usr/src/app
docker-compose.yml
文件。此文件将定义应用程序中的服务,以便它们可以在隔离环境中一起运行。 Compose file version 3 reference docker compose文件遵循以下结构:
version: '3'
services:
web:
build: <directory with Dockerfile for service>
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
database:
image: mongo
volumes:
logvolume01: {}
docker-compose up
,Compose将开始运行整个应用程序!