Legende
Wenn ein neuer Entwickler hinzukommt, steht er vor der Aufgabe, die Entwicklungsumgebung zu starten. Und bis vor kurzem wurde es oft so, als würde man mit einem Tamburin tanzen. Liefern Sie 10 verschiedene Pakete bestimmter Versionen, und es stellt sich heraus, dass für Ihr eigenes Haustierprojekt unterschiedliche Versionen erforderlich sind, oder es kann sich sogar um ein anderes Projekt innerhalb derselben Arbeit handeln. Jedes Mal, wenn der Spezialist auf seine Weise aus dieser Situation herauskam, blieb das Hauptproblem zusätzlich zu der Zeit, die für diese Konfiguration aufgewendet wurde, bestehen, dass die Leistung von Entwickler zu Entwickler oder Läufer nicht garantiert wurde.
- , , . Docker.
FrontEnd , Docker. .
, :
Docker
production, DevOps.
Docker
docker-compose, MacOS Docker Desktop , linux .
CLI Docker
docker docker-compose --help
docker --help
docker ps --help
docker-compose --help
docker-compose up --help
FE 2 package.json: "dev" "build" production .
. node , .
TL;DR;
docker-compose.dev.yml
version: "3.9"
services:
web:
image: node:15.8-alpine3.11
ports:
- "3000:3000"
volumes:
- ".:/app"
environment:
NODE_ENV: development
HOST: 0.0.0.0
working_dir: /app
command: sh -c "cd /app; yarn install; yarn run dev --host 0.0.0.0"
docker-compose.yml
version: "3.9"
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "80:80"
environment:
NODE_ENV: production
Dockerfile
FROM node:15.8-alpine3.11 AS build
WORKDIR /app
COPY package.json package.json
RUN yarn install
COPY . .
RUN yarn build
FROM nginx:1.19-alpine
COPY --from=build /app/dist /opt/site
COPY nginx.conf /etc/nginx/nginx.conf
nginx.conf
worker_processes auto;
events {
worker_connections 8000;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
listen [::]:80 default ipv6only=on;
root /opt/site;
location / {
try_files $uri $uri/ /index.html;
}
}
}
, :
:
docker-compose.dev.yml - , production
1 . ‘web’. : node:15.8-alpine3.11
, , production build.
2 . , .
3 . . , rebuild, — .
4 . ‘environment’ , .
5 . ‘working_dir’ , .
6 . (webpack-dev-server ): command: sh -c "yarn install; yarn run dev --host 0.0.0.0”
: docker-compose -f docker-compose.dev.yml up
production:
, . SSR, : node ..
docker-compose.yml
develop ?
Dockerfile
,image
NODE_ENV:
development
->production
command
nginx
nginx fallback /index.html , - , .
Dockerfile
: multi-stage building, .
Dockerfile
—
1 . , develop FROM node:15.8-alpine3.11 AS build
! build, , , , .
2 . /app
3-5 . :
: package.json ?
( ): , .
“package.json”, , docker , . . .
6 . build.
—
— nginx .
8 . nginx .
9 . .
10 . nginx
: docker-compose up
deveopment
volumes , docker.
? :
~/project
. secret.txt
, : “secret text”
docker-compose.yml
, .
docker-compose.yml
version: "3.9"
services:
web:
image: alpine:latest
volumes:
- "./project:/app"
command: sh -c "sleep 3600”
7. 1 .
: docker-compose up -d
, docker.
: docker ps
: docker-compose exec -it {_} /bin/sh
: cd /app
Darin liegt die geheime Datei sectret.txt Die
Datei kann ihren Inhalt anzeigen und bearbeiten.
Ergebnisse
Zweifellos ist das Thema Containerisierung sehr umfangreich und wir haben nur einen winzigen Teil behandelt, jedoch die notwendige Basis, um loszulegen. Ich würde mich freuen, wenn dieser Artikel einen Ausgangspunkt für die FE-Entwicklung in Docker bietet.
GitHub: hier