Legenda
Ketika seorang pengembang baru masuk, dia dihadapkan pada tugas untuk memulai lingkungan pengembangan. Dan sampai saat ini, sering seperti menari dengan rebana. Kirimkan 10 paket berbeda dari versi tertentu, dan ternyata proyek hewan peliharaan Anda membutuhkan versi yang berbeda, atau bahkan mungkin proyek berbeda dalam pekerjaan yang sama. Setiap kali spesialis keluar dari situasi ini dengan caranya sendiri, tetapi masalah utama, selain waktu yang dihabiskan untuk konfigurasi ini, tetap bahwa kinerja dari pengembang ke pengembang atau pelari tidak dijamin.
- , , . 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
Di mana letak file rahasia sectret.txt
File tersebut dapat dilihat dan diedit isinya.
Hasil
Tidak diragukan lagi, topik containerization sangat luas dan kami hanya membahas sebagian kecil, namun, kami telah membahas dasar yang diperlukan untuk memulai. Saya akan senang jika artikel ini memberikan titik awal untuk pengembangan FE di Docker.
GitHub: di sini