uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 419
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
+130 kunlar
Postlar arxiv
ToCode
1 419
ื•ืžื”ืžืกื•ืฃ ืฉืžืจื™ืฅ ืืช ื” logger ื ื™ื›ื ืก ืœืชื™ืงื™ื™ืช ื”ืœื•ื’ื™ื ื›ื“ื™ ืœืจืื•ืช ืืช ื”ืชื•ืฆืื•ืช:
$ cat /var/log/syslog-ng/*/* 
Jul  8 06:27:35 32-setup-syslogng_client1_1 client-demo[16]: {"message":"Hello World","level":"info"}
Jul  8 06:27:45 32-setup-syslogng_client2_1 client-demo[16]: {"message":"Hello World","level":"info"}
## ื”ื•ืกืคืช Log Destination ื‘ื•ืื• ื ืขื“ื›ืŸ ืืช ืฉืจืช ื”ืœื•ื’ื™ื ื›ื“ื™ ืฉื™ื›ืชื•ื‘ ืงื•ื‘ืฅ ืœื•ื’ ื ื•ืกืฃ ื”ืคืขื ืื—ื“ ืฉืžืจื›ื– ืืช ื›ืœ ื”ืœื•ื’ื™ื ื”ื ื›ื ืกื™ื ืžื›ืœ ื”ืžืงื•ืจื•ืช - ืœื ืžืฉื ื” ืžืื™ื–ื” ืฉืจืช ื•ืžืื™ื–ื• ืชื•ื›ื ื™ืช. ืื ื™ ื™ื•ื“ืข, ืงืœ ืžืื•ื“ ื‘ืขื–ืจืช ื›ืœื™ ื™ื•ื ื™ืงืก ืœืจืื•ืช ื‘ืžื›ื” ืื—ืช ืืช ื›ืœ ื”ืœื•ื’ื™ื ืžืžืกืคืจ ืงื‘ืฆื™ื, ืื‘ืœ ื—ื™ืฉื‘ื• ืขืœ ื–ื” ื™ื•ืชืจ ื‘ืชื•ืจ ื“ื•ื’ืžื” ืœืื™ืš ืžื•ืกื™ืคื™ื ื™ืขื“ ืœื•ื’ ื ื•ืกืฃ. ืขื“ื›ื ื• ืืช ืงื•ื‘ืฅ ื”ื’ื“ืจื•ืช ื”ืœื•ื’ syslog-ng.conf ื•ื”ื•ืกื™ืคื• ืืช ื”ื‘ืœื•ื’ ื”ื‘ื:
destination alllogs {
  file("/var/log/syslog-ng/all.log"
      create-dirs(yes));
};
ืœืื—ืจ ืžื›ืŸ ื‘ืชื•ืš ื‘ืœื•ืง log ื”ื•ืกื™ืคื• ืืช ื” destination ื”ื—ื“ืฉ:
log {
  source(s_net);
  destination(logfiles);
  destination(alllogs);
};
ื ืคืขื™ืœ ืžื—ื“ืฉ ื•ื ื™ื›ื ืก ืœืฉืจืช ื”ืœื•ื’ื™ื. ืฉื ื ื•ื›ืœ ืœืžืฆื•ื ื‘ืชื™ืงื™ื™ืช /var/log/syslog-ng ืืช ื”ืงื•ื‘ืฅ ื”ื—ื“ืฉ all.log ื”ืคืขื ืขื ื›ืœ ื”ื•ื“ืขื•ืช ื”ืœื•ื’ ืžืฉื ื™ ื”ืœืงื•ื—ื•ืช ืฉืœื ื•. (ืฉื™ืžื• ืœื‘ ืฉื”ืงื•ื‘ืฅ ื™ื•ืคื™ืข ืจืง ืื—ืจื™ ืฉื”ืคืขืœืชื ืืช ื”ืœืงื•ื—ื•ืช ืขืฆืžื ื•ื›ืชื‘ืชื ื”ื•ื“ืขื•ืช ืœืœื•ื’). ## ืกื™ื›ื•ื ื”ืขื‘ื•ื“ื” ืขื syslog-ng ืื™ืคืฉืจื” ืœื ื• ืœื”ืจื™ื ื‘ืงืœื•ืช ืกืจื‘ื™ืก ืฉืœ ืฉืžื™ืจืช ืœื•ื’ื™ื ืฉืžืงื‘ืœ ืœื•ื’ื™ื ืžื›ืœ ื”ืกืจื‘ื™ืกื™ื ื”ืื—ืจื™ื ื‘ืžืขืจื›ืช ื•ืฉื•ืžืจ ืื•ืชื ื‘ืžืงื•ื ืื—ื“. ืื ื™ ื‘ื—ืจืชื™ ืœืฉืžื•ืจ ืืช ื”ืœื•ื’ ืœืงื‘ืฆื™ื ืื‘ืœ ื‘ืžืขืจื›ื•ืช ื’ื“ื•ืœื•ืช ื™ื•ืชืจ ื”ืจื‘ื” ืคืขืžื™ื ื”ืœื•ื’ ื™ื™ืฉืžืจ ืœื‘ืกื™ืก ื ืชื•ื ื™ื ืฉื ืืคืฉืจ ื™ื”ื™ื” ืœื”ืจื™ืฅ ืขืœื™ื• ื—ื™ืคื•ืฉื™ื ืื• ืœื”ืงืคื™ืฅ ื”ืชืจืื•ืช ื‘ื–ืžืŸ ืืžืช. ื‘ืฉื‘ื™ืœ ืœืื—ืกืŸ ืืช ื”ืœื•ื’ื™ื ื‘ืขื ืŸ ื ืฆื˜ืจืš ื‘ืกืš ื”ื›ืœ ืœืคืชื•ื— ื—ืฉื‘ื•ืŸ ื‘ืฉืจืช ืœื•ื’ื™ื ื‘ืขื ืŸ ื•ืœื”ื•ืกื™ืฃ ืขื•ื“ destination ืœื”ื’ื“ืจื•ืช ื” syslog ืฉื™ืฆืจื ื•. ืœื“ื•ื’ืžื” ื›ื“ื™ ืœื—ื‘ืจ ืืช ื”ืœื•ื’ื™ื ืœืžืขืจื›ืช papertrail ืื ื™ ืžื•ืกื™ืฃ ื‘ืœื•ืง ืฉื ืจืื” ื‘ืขืจืš ื›ื›ื”:
destination d_papertrail {
 udp("logsN.papertrailapp.com" port(XXXXX));
};

ToCode
1 419
# ืžื“ืจื™ืš: ื”ืงืžืช ืฉืจืช ืœื•ื’ื™ื ืขื syslog-ng ืฉืจืช ืœื•ื’ื™ื ื”ื•ื ื‘ืกืš ื”ื›ืœ ืกืจื‘ื™ืก ืฉื›ื•ืœื ืคื•ื ื™ื ืืœื™ื• ืขื ื”ื•ื“ืขื•ืช ื”ืœื•ื’ ืฉืœื”ื ื•ื”ื•ื ื›ื•ืชื‘ ืืช ื”ืžื™ื“ืข ืœืื™ื–ืฉื”ื• ื™ืขื“. ื‘ืจื™ืจืช ืžื—ื“ืœ ืคืฉื•ื˜ื” ื”ื™ื ืœื›ืชื•ื‘ ืืช ื›ืœ ื”ืœื•ื’ื™ื ืœืงื‘ืฆื™ื ื•ื–ื” ื™ืชืื™ื ืœื ื• ื‘ืฉื‘ื™ืœ ื”ืชื—ืœื”, ืื‘ืœ ื”ืจื‘ื” ืคืขืžื™ื ื ืจืฆื” ืœื ืชื‘ ืืช ื”ืœื•ื’ื™ื ื”ื—ื•ืฆื” ืžืฉืจืช ื”ืœื•ื’ื™ื ื’ื ืœื‘ืกื™ืก ื ืชื•ื ื™ื ืื• ืืคื™ืœื• ืœืฉื™ืจื•ืช ืื™ื—ืกื•ืŸ ืœื•ื’ื™ื ื‘ืขื ืŸ. ืชื•ื›ื ืช syslog-ng ื”ื™ื ืžืขืจื›ืช ื ื™ื”ื•ืœ ืœื•ื’ื™ื ืคื•ืคื•ืœืจื™ืช ืฉืžืืคืฉืจืช ื’ื ืฉืžื™ืจื” ืžืงื•ืžื™ืช ืฉืœ ื”ืœื•ื’ื™ื ื•ื’ื ื™ืฉ ืœื” ืื™ื ื˜ื’ืจืฆื™ื” ืžืฆื•ื™ื ืช ืขื ืฉื™ืจื•ืชื™ ืื™ื—ืกื•ืŸ ืœื•ื’ื™ื ื‘ืขื ืŸ ื›ืš ืฉื™ื”ื™ื” ืงืœ ืœืขื‘ื•ืจ ืœืฉื ื›ืฉื ืฆื˜ืจืš. ## ื™ืฆื™ืจืช ืื™ืžื’' ืœืกืจื‘ื™ืก ื”ืœื•ื’ื™ื ื‘ืฉื‘ื™ืœ ืœื›ืชื•ื‘ ืกืจื‘ื™ืก ืœื•ื’ื™ื ื ืคืขื™ืœ ื‘ืชื•ืš ืงื•ื ื˜ื™ื™ื ืจ ืชื•ื›ื ื™ืช ื‘ืฉื syslog-ng ืฉืžืงื‘ืœืช ืœื•ื’ื™ื ืžื”ืกืจื‘ื™ืกื™ื ื”ืฉื•ื ื™ื ื•ืฉื•ืžืจืช ืื•ืชื ืœื™ืขื“ ืฉื ื‘ื—ืจ. ื›ืš ื ืจืื” ืงื•ื‘ืฅ ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ืคืฉื•ื˜ ืฉืœ syslog-ng:
@version: 3.19

source s_net {
  tcp( ip("0.0.0.0"));
  udp( ip("0.0.0.0"));
  syslog( ip("0.0.0.0"));
 };

destination logfiles {
  file("/var/log/syslog-ng/$HOST/$PROGRAM.log"
      create-dirs(yes));
};

log {
  source(s_net);
  destination(logfiles);
};

ืื—ืจื™ ืชื™ืื•ืจ ื”ื’ื™ืจืกื” ืื ื—ื ื• ืžื’ื“ื™ืจื™ื "ืžืงื•ืจื•ืช", ื›ืœื•ืžืจ ืžืื™ืคื” ืœื•ื’ื™ื ื ืฉืœื—ื™ื ืืœื™ื ื•, ื•"ื™ืขื“ื™ื", ื›ืœื•ืžืจ ืœืืŸ ื”ืœื•ื’ ื™ื™ื›ืชื‘. ื‘ืœื•ืง log ืžื—ื‘ืจ ื‘ื™ืŸ ืžืงื•ืจ ืœื™ืขื“ ื•ื”ื•ื ืฉืื—ืจืื™ ืขืœ ื”ืงืกื. ื›ืจื’ืข ื”ื™ืขื“ ื”ื•ื ืงื‘ืฆื™ื. ื”ืžืฉืชื ื™ื $HOST ื• $PROGRAM ื‘ืชื•ืš ืฉื ืงื•ื‘ืฅ ื”ื™ืขื“ ื™ืชื•ืจื’ืžื• ืœืฉื ื”ืฉืจืช ืฉืฉืœื— ืืช ื”ื”ื•ื“ืขื” ื•ืฉื ื”ืชื•ื›ื ื™ืช ืฉืจืฆื” ืฉื. ื ืฉืžื•ืจ ืืช ื”ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื‘ืงื•ื‘ืฅ ื‘ืฉื syslog-ng.conf ื•ืืช ื”ืงื•ื‘ืฅ ื ืฉืžื•ืจ ื‘ืชื™ืงื™ื” ื‘ืฉื logserver. ื‘ืื•ืชื” ืชื™ืงื™ื” ืื ื™ ืžื•ืกื™ืฃ ื’ื ืงื•ื‘ืฅ Dockerfile ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
FROM debian:buster

RUN apt-get update && apt-get upgrade -y && apt-get install -y syslog-ng
COPY syslog-ng.conf /etc/syslog-ng/

EXPOSE 514/udp 514/tcp 601/tcp 6514/tcp

ENTRYPOINT ["/usr/sbin/syslog-ng", "-F", "-f", "/etc/syslog-ng/syslog-ng.conf", "--no-caps"]
ื”ืงื•ื‘ืฅ ืžืชืงื™ืŸ ืืช syslog-ng ืขืœ ืื™ืžื’' ืฉืœ ื“ื‘ื™ืืŸ ื•ืžืคืขื™ืœ ืื•ืชื• ืขื ืงื•ื‘ืฅ ื”ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ืฉื™ืฆืจื ื•. ## ื™ืฆื™ืจืช ืืคืœื™ืงืฆื™ื™ืช Node.JS ืฉื›ื•ืชื‘ืช ืœืกืจื‘ื™ืก ื”ืœื•ื’ื™ื ื‘ื•ืื• ื ืจืื” ืฉื–ื” ืขื•ื‘ื“ ื•ื‘ืฉื‘ื™ืœ ื–ื” ื ื™ื™ืฆืจ ืืคืœื™ืงืฆื™ื™ืช Node.JS ืฉืชื›ืชื•ื‘ ืœืœื•ื’. ื‘ืชื™ืงื™ื” ื—ื“ืฉื” ื‘ืฉื client ืฆืจื• ืงื•ื‘ืฅ ื‘ืฉื main.js ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
const winston = require('winston');
require('winston-syslog').Syslog;

const logger = winston.createLogger({
  levels: winston.config.syslog.levels,
  transports: [
    new winston.transports.Syslog({
      host: process.env.SYSLOG_NG_HOST,
      app_name: 'client-demo',
    }),
  ]
});

console.log('--- Writing To Syslog');

logger.info("Hello World");
logger.end();
ืคืงื•ื“ืช console.log ืชื›ืชื•ื‘ ืืช ื”ืคืœื˜ ืœืงื•ื ืกื•ืœ ื›ืš ืฉื ืจืื” ืืช ื–ื” ื‘ืžืกื•ืฃ ืฉืœ ื“ื•ืงืจ, ื•ืคืงื•ื“ืช logger.info ืชืฉืชืžืฉ ื‘ืกืคืจื™ื™ืช winston-syslog ื›ื“ื™ ืœืฉืœื•ื— ืืช ื”ื”ื•ื“ืขื” ืœืฉืจืช ืœื•ื’ ืžืจื•ื—ืง. ืฉื™ืžื• ืœื‘ ืฉื›ืชื•ื‘ืช ื”ืฉืจืช ืžื’ื™ืขื” ืœืชื•ื›ื ื™ืช ื“ืจืš ืžืฉืชื ื” ืกื‘ื™ื‘ื” ื•ืœื›ืŸ ืื ื—ื ื• ืžืฆืคื™ื ืœืžืฆื•ื ืืช ื”ืขืจืš ืœืžืฉืชื ื” ื–ื” ื‘ืงื•ื‘ืฅ ื” docker-compose ื”ืจืืฉื™. ื‘ืื•ืชื” ืชื™ืงื™ื” ืฆืจื• ื’ื ืงื•ื‘ืฅ package.json ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
{
  "name": "client",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "winston": "^3.3.3",
    "winston-syslog": "^2.4.4"
  }
}
## ื”ืคืขืœื” ืžืชื•ืš Docker Compose ื ื‘ื“ื•ืง ืืช ื”ื›ืœ ื›ื“ื™ ืœื•ื•ื“ื ืฉืืคืฉืจ ืœื›ืชื•ื‘ ื•ืœืงืจื•ื ืœื•ื’ื™ื ืžื›ืžื” ืกืจื‘ื™ืกื™ื. ื‘ืชื™ืงื™ื” ื”ืจืืฉื™ืช ื›ืชื‘ื• ืงื•ื‘ืฅ docker-compose.yml ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
version: '3.9'

services:
  logger:
    build: ./logserver
    volumes:
      - logs:/var/log/syslog-ng/

  client1:
    build: ./client
    command: ["sleep", "infinity"]
    environment:
      SYSLOG_NG_HOST: logger

  client2:
    build: ./client
    command: ["sleep", "infinity"]
    environment:
      SYSLOG_NG_HOST: logger


volumes:
  logs:
ื•ื”ืคืขื™ืœื• ืขื:
$ docker compose up
ืขื›ืฉื™ื• ื™ืฉ ืœื ื• ืฉืชื™ ืžื›ื•ื ื•ืช client ืฉืœื ืขื•ืฉื•ืช ื›ืœื•ื, ืื‘ืœ ื›ื•ืœืœื•ืช ืืช ื”ืชื•ื›ื ื™ืช ืฉืœื ื• ืฉื™ื•ื“ืขืช ืœื›ืชื•ื‘ ืœืœื•ื’, ื•ืžื›ื•ื ืช server ืื—ืช ืฉืžืงืฉื™ื‘ื” ืœื”ื•ื“ืขื•ืช ืœื•ื’ ื ื›ื ืกื•ืช. ื ืคืชื— ืฉืœื•ืฉื” ื—ืœื•ื ื•ืช ื—ื“ืฉื™ื ื•ื ืชื—ื‘ืจ ืœื›ืœ ืื—ืช ืžื”ืžื›ื•ื ื•ืช:
# First Terminal
$ docker compose exec logger /bin/bash

# Second Terminal
$ docker compose exec client1 /bin/bash

# Third Terminal
$ docker compose exec client2 /bin/bash
ืžื”ืžืกื•ืคื™ื ืฉืžืจื™ืฆื™ื ืืช client1 ื• client2 ื ืจื™ืฅ ืืช ื”ืคืงื•ื“ื”:
$ node main.js

ToCode
1 419
# ืื™ืœื•ืฆื™ื ืžื–ื•ื™ืคื™ื ืดื‘ืฉื‘ื™ืœ ืœื”ื’ื™ืข ืœ Zero Downtime Deployments ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืฉื“ืจื’ ืœืงื•ื‘ืจื ื˜ื™ืก.ืด ืดื‘ืฉื‘ื™ืœ ืœืคืชื•ืจ ืืช ื‘ืขื™ื•ืช ื”ื‘ื™ืฆื•ืขื™ื ืื ื—ื ื• ื—ื™ื™ื‘ื™ื ืœืขื‘ื•ืจ ืžืื ื’ื•ืœืจ ืœืจื™ืืงื˜.ืด ืดื‘ืฉื‘ื™ืœ ืฉื ื•ื›ืœ ืœื‘ื ื•ืช ืคื™ืฆ'ืจื™ื ื—ื“ืฉื™ื ื™ื•ืชืจ ืžื”ืจ ืื ื—ื ื• ื—ื™ื™ื‘ื™ื ืœืขืฉื•ืช Rewrite ืœื›ืœ ื”ืžืขืจื›ืช.ืด ืดื‘ืฉื‘ื™ืœ ืœืคืชื•ืจ ืืช ื‘ืขื™ื™ืช ื”ืื‘ื˜ื—ื” ืื ื—ื ื• ื—ื™ื™ื‘ื™ื ืœืฉื“ืจื’ ืืช ื”ืชืฉืชื™ืช ืœื’ื™ืจืกื” ื”ื—ื“ืฉื” ื‘ื™ื•ืชืจ ื•ืœืฉื‘ื•ืจ ื”ืžื•ืŸ ืงื•ื“ ื‘ืชื”ืœื™ืš.ืด ืดื‘ืฉื‘ื™ืœ ืฉืื•ื›ืœ ืœื”ืชื—ื™ืœ ืœืœืžื•ื“ ืืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื”ื™ื ืฉื ืฉืžืขืช ืœื™ ืžืขื ื™ื™ื ืช ืื ื™ ืฆืจื™ืš ืฉื”ื‘ื•ืก ื™ื™ืชืŸ ืœื™ ืœืขื‘ื•ื“ ืขืœ ืคืจื•ื™ืงื˜ ืฉื›ืชื•ื‘ ื‘ื”.ืด ืื ื—ื ื• ื™ื•ืฆืจื™ื ืœืขืฆืžื ื• ืื™ืœื•ืฆื™ื ื›ืœ ื”ื–ืžืŸ, ื‘ื“ืจืš ื›ืœืœ ื›ื™ ื”ืื™ืœื•ืฅ ื ื•ืชืŸ ืœื ื• ืชื™ืจื•ืฅ ืœืขืฉื•ืช ืืช ื”ื“ื‘ืจ ื”ืงืฉื”. ืื‘ืœ ืฉื•ื•ื” ืœื–ื›ื•ืจ ืฉืžื•ืชืจ ืœื•ื•ืชืจ ืขืœ ื”ืื™ืœื•ืฅ ืื ื‘ืคื•ืขืœ ื”ื•ื ืžื•ื ืข ืžื›ื ืœืขืฉื•ืช ืืช ื”ื“ื‘ืจ ื”ืงืœ. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืื ื‘ื’ืœืœ ืฉืื™ืŸ ื–ืžืŸ ืขื›ืฉื™ื• ืœืฉื“ืจื’ ืœืงื•ื‘ืจื ื˜ื™ืก ืืชื ืžื•ื•ืชืจื™ื ืขืœ Zero Downtime Deployment, ื”ื‘ืขื™ื” ืœื ืงืฉื•ืจื” ืœืงื•ื‘ืจื ื˜ื™ืก.

ToCode
1 419
ื”ืงืœื˜ื” ืžื”ื•ื•ื‘ื™ื ืจ ืฉื”ืชืงื™ื™ื ื‘ื—ืžื™ืฉื™ ืขืœืชื” ืœืืชืจ https://www.tocode.co.il/past_workshops/113

ToCode
1 419
# ื˜ื™ืค ื“ื•ืงืจ: ืฉื™ืžื•ืฉ ื‘ Multistage Builds ื‘ื‘ื ื™ื™ืช Docker Image ื™ื”ื™ื• ืœื ื• ืžืฆื‘ื™ื ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืื™ืžื’' ื‘ืกื™ืก ืžืกื•ื™ื ื›ื“ื™ ืœื‘ืฆืข ืขื‘ื•ื“ืช "ื”ื›ื ื”", ืื‘ืœ ืื—ืจื™ ืฉื”ื”ื›ื ื” ื”ืกืชื™ื™ืžื” ืืคืฉืจ ืœืงื—ืช ืืช ื”ืชื•ืฆืจื™ื ื•ืœื”ื’ื™ืฉ ืื•ืชื ืžืื™ืžื’' ืื—ืจ. ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ื”ื™ื ืืคืœื™ืงืฆื™ื™ืช next.js ืฉื™ื•ืฆืจืช ืืชืจ HTML ืกื˜ื˜ื™. ืื ื™ ืฆืจื™ืš ืืช node.js ื•ื›ืœ ืžื” ืฉืงืฉื•ืจ ืืœื™ื• ื‘ืฉื‘ื™ืœ ืœื‘ื ื•ืช ืืช ื”ืืชืจ ื”ืกื˜ื˜ื™, ืื‘ืœ ืื—ืจื™ ืฉื‘ื ื™ืชื™ ืื•ืชื• ืื ื™ ื™ื›ื•ืœ ืœื”ื’ื™ืฉ ืืช ื”ืชื•ืฆืื” ืžืื™ืžื’' ืฉืœ nginx. ื‘ื“ื•ืงืจ ื™ืฉ ืžื ื’ื ื•ืŸ ืฉื ืงืจื multi stage builds ืฉื ื•ืขื“ ืœืชืช ืžืขื ื” ืœืžืฆื‘ื™ื ื›ืืœื” ื•ืœืืคืฉืจ ื‘ื ื™ื” ืžืื™ืžื’' ืื—ื“ ื•ืืจื™ื–ื” ื‘ืื™ืžื’' ืื—ืจ. ื‘ื•ืื• ื ืจืื” ืื™ืš ื–ื” ืขื•ื‘ื“. ## ืืคืœื™ืงืฆื™ื™ืช next ืจื’ื™ืœื” ื‘ืื™ืžื’' ืฉืœ node ื ืชื—ื™ืœ ืขื ื›ืชื™ื‘ืช Dockerfile ืœืืคืœื™ืงืฆื™ื™ืช next ืจื’ื™ืœื” ื‘ืื™ืžื’' ืฉืœ node.js. ื‘ืฉื‘ื™ืœ ืœื‘ื ื•ืช ืืช ื”ืืคืœื™ืงืฆื™ื” ืื ื™ ืฆืจื™ืš ืœื”ืจื™ืฅ:
$ npm run build
$ npx next export
ื‘ื”ื ื—ื” ืฉื™ืฉ ืœื™ ื‘ืชื™ืงื™ื” ืชืช-ืชื™ืงื™ื” ื‘ืฉื next-demo-app, ื‘ื•ืื• ื ื‘ื ื” ืืช ื” Dockerfile ื”ื‘ื:
FROM node:17
WORKDIR /app

COPY next-demo-app .

RUN npm install
RUN npm run build
RUN npx next export

CMD ["npm", "run", "start"]
ืื—ืจื™ ื–ื” ืื ื™ ื‘ื•ื ื” ืืช ื”ืื™ืžื’' ืขื:
$ docker build . -t multistage-demo
ืื ื™ ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืืช ื”ืื™ืžื’' ืœืจืื•ืช ืฉื”ื›ืœ ืขื•ื‘ื“:
$ docker run -p 8080:3000 --rm multistage-demo
ืื‘ืœ ืžื” ืฉื‘ืืžืช ืžืขื ื™ื™ืŸ ื–ื” ืœืจืื•ืช ืืช ื”ื’ื•ื“ืœ ืฉืœ ื”ืื™ืžื’':
$ docker images | grep multistage-demo

multistage-demo                      latest    e67684b5f7d1   2 minutes ago   1.24GB
ื›ืŸ ืจืื™ืชื ื ื›ื•ืŸ - ื–ื” 1.24 ื’'ื™ื’ื”. ## ืžืขื‘ืจ ืœ Multistage Builds ืื‘ืœ ืื– ืื ื™ ื ื–ื›ืจ ืฉืื ื™ ืœื ื‘ืืžืช ืฆืจื™ืš ืœื”ื’ื™ืฉ ืืช ื”ืืคืœื™ืงืฆื™ื” ืžืฉืจืช ืฉืœ next - ื›ื™ ื”ืคืขืœืชื™ export ื•ื›ืœ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื™ ื–ืžื™ื ื” ื‘ืชื•ืจ ืงื‘ืฆื™ html ืกื˜ื˜ื™ื™ื. ืœื›ืŸ ืžืกืคื™ืง ืœื™ ืœื”ื’ื™ืฉ ืื•ืชื” ืžืฉืจืช ื•ื•ื‘ ืจื’ื™ืœ ื•ืคืฉื•ื˜, ืœืžืฉืœ nginx. ื ื•, ืื ืจืง ื”ื™ื™ืชื™ ื™ื›ื•ืœ ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื”ืงื‘ืฆื™ื ืฉื‘ื ื™ืชื™ ืœืื™ืžื’' nginx ... ื•ืคื” ื ื›ื ืก ื”ืจืขื™ื•ืŸ ืฉืœ multistage builds. ื ืขื“ื›ืŸ ืืช ื” Dockerfile ืœืงื•ื“ ื”ื‘ื:
FROM node:17 AS builder
WORKDIR /app

COPY next-demo-app .

RUN npm install
RUN npm run build
RUN npx next export

FROM nginx:1.21-alpine
COPY --from=builder /app/out /usr/share/nginx/html/
ื”ื•ืกืคืช ืฉื•ืจืช FROM ื ื•ืกืคืช ืœ Dockerfile ืžืืคืฉืจืช ืœืฉื™ื ื‘ืฆื“ ืืช ื›ืœ ืžื” ืฉื™ืฆืจื ื•, ื•ืœื”ืชื—ื™ืœ ืœื‘ื ื•ืช ืืช ื”ืื™ืžื’' ืžื—ื“ืฉ ืžืชื•ืš ืื™ืžื’' ื‘ืกื™ืก ื—ื“ืฉ. ื‘ืคืงื•ื“ื•ืช COPY ืื ื™ ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ --from ื›ื“ื™ ืœื”ืขืชื™ืง ืชื•ืฆืจื™ ื‘ื ื™ื” ืžืื™ืžื’'ื™ื ืฉืฉืžืชื™ ื‘ืฆื“. ืœื›ืŸ ื” Dockerfile ื”ืžืขื•ื“ื›ืŸ ืœื•ืงื— ืืช ืชื™ืงื™ื™ืช out ืฉืžื›ื™ืœื” ืืช ืงื‘ืฆื™ ื” html ื”ืกื˜ื˜ื™ื™ื (ืืœื” ืฉื ื•ืฆืจื• ื‘ export), ื•ืžืขืชื™ืง ืื•ืชื” ืœืชื™ืงื™ื” ืžืžื ื” nginx ื™ื’ื™ืฉ ืืช ื”ืงื‘ืฆื™ื ื”ืกื˜ื˜ื™ื™ื ืฉืœื•. ืืคืฉืจ ืœื‘ื ื•ืช ืžื—ื“ืฉ ื•ืœื”ืจื™ืฅ ื›ืžืขื˜ ืขื ืื•ืชืŸ ืคืงื•ื“ื•ืช (ืฆืจื™ืš ืœืฉื ื•ืช ืืช ืžื™ืคื•ื™ ื”ืคื•ืจื˜ื™ื ื›ื™ nginx ืžืื–ื™ืŸ ืขืœ ืคื•ืจื˜ 80) ื•ืืชื ืชืจืื• ืฉื” Dockerfile ืขื“ื™ื™ืŸ ืขื•ื‘ื“, ืื‘ืœ ื™ื•ืชืจ ืžืขื ื™ื™ืŸ ืœื”ืกืชื›ืœ ืขืœ ื’ื•ื“ืœ ื”ืื™ืžื’' ืขื›ืฉื™ื•:
$ docker image ls| grep multistage

multistage-demo                      latest    76259b691276   About a minute ago   23.8MB
ื•ื›ืŸ ืจืื™ืชื ื ื›ื•ืŸ - ื’ื•ื“ืœ ื”ืื™ืžื’' ื”ื•ื ืขื›ืฉื™ื• 23 ืžื’ื” ื‘ืœื‘ื“, ืœืžืจื•ืช ืฉื”ื•ื ืขื•ืฉื” ื‘ื“ื™ื•ืง ืืช ืื•ืชื• ื“ื‘ืจ ืฉืขืฉื” ื”ืื™ืžื’' ืฉืœ ื”ื’'ื™ื’ื”. ื”ืกื•ื“ ื”ื•ื ืคืฉื•ื˜ ืœื”ืฉืชืžืฉ ื‘ื“ื™ื•ืง ื‘ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื.

ToCode
1 419
1. ืื ื—ื ื• ื™ื•ืฆืจื™ื ืื™ืžื’'ื™ื ืขืœ ืžื›ื•ื ืช ื”ืคื™ืชื•ื— ืฉืœื ื• ื›ืฉืื ื—ื ื• ืจื•ืฆื™ื ืœืกื’ื•ืจ ืงื•ื“ ืžืกื•ื™ื ื•ืœื”ื›ื™ืŸ ืื•ืชื• ืœืžืฉืœื•ื—. ืกื’ื™ืจืช ืชื•ื›ื ื” ืฉื›ืชื‘ืชื™ ื‘ืื™ืžื’' ืžืืคืฉืจืช ืœื™ ืœื”ืขื‘ื™ืจ ืืช ื”ืชื•ื›ื ื” ื”ื–ืืช ื‘ืฆื•ืจื” ืืžื™ื ื” ืœื›ืœ ืžื›ื•ื ื” ืฉืžืจื™ืฆื” ืืช Docker Engine. 2. ืื ื—ื ื• ืžืจื™ืฆื™ื ืงื•ื ื˜ื™ื™ื ืจื™ื ืžืชื•ืš ืื™ืžื’'ื™ื ื›ืฉืื ื—ื ื• ืจื•ืฆื™ื ืœื”ืฉืชืžืฉ ื‘ื”ื. ืื– ืื ืื ื™ ืฆืจื™ืš ืขื›ืฉื™ื• ื‘ืกื™ืก ื ืชื•ื ื™ื ืื ื™ ืžืจื™ืฅ ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ PostgreSQL; ืื ืื ื™ ืฆืจื™ืš ืœื ืกื•ืช ืžืฉื”ื• ื‘ Elixir ืื ื™ ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ ืืœื™ืงืกื™ืจ; ื•ืื ืื ื™ ืจื•ืฆื” ืœื›ืชื•ื‘ ืžืขืจื›ืช ื‘ Rails ืื ื™ ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ ืจื™ื™ืœืก. ื›ืœ ืขื•ื“ ื™ืฉ ืœื™ ืืช ื”ืื™ืžื’' ืฉืœ ืžืฉื”ื•, ืื ื™ ื™ื›ื•ืœ ื‘ืจื’ืข ืœื”ืจื™ืฅ ืžืžื ื• ืงื•ื ื˜ื™ื™ื ืจ ืื• ืžืกืคืจ ืงื•ื ื˜ื™ื™ื ืจื™ื. ื”ื—ืœ ืž 2015, ื“ื•ืงืจ ื•ื—ื‘ืจื•ืช ืžื•ื‘ื™ืœื•ืช ื ื•ืกืคื•ืช ื‘ืชืขืฉื™ื”, ืžืชื—ื–ืงื™ื ืžื‘ื ื” ืงื•ื“ ืคืชื•ื— ืฉื ืงืจื OCI (ืงื™ืฆื•ืจ ืœ Open Container Initiative) ืฉืื—ืจืื™ ืขืœ ื™ืฆื™ืจืช ืกื˜ื ื“ืจื˜ ืคืชื•ื— ืœืคื•ืจืžื˜ื™ื ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ื•ืื™ืžื’'ื™ื. ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ื“ื•ืงืจ ื•ืื™ืš ื”ืžื ื’ื ื•ืŸ ื”ื–ื” ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ืขื•ื‘ื“ ืžืชื—ืช ืœืคื ื™ ื”ืฉื˜ื— ืฉื•ื•ื” ืœืงืจื•ื ืืช ื”ืžืืžืจ ื‘ืงื™ืฉื•ืจ: https://accenture.github.io/blog/2021/03/10/docker-behind-the-scenes.html

ToCode
1 419
# ืžื•ืฉื’ื™ื ื‘ืกื™ืกื™ื™ื ื‘ Docker: ืงื•ื ื˜ื™ื™ื ืจื™ื ื•ืื™ืžื’'ื™ื ื“ื•ืงืจ ืคื•ืชื— ื‘ื—ื‘ืจืช ืื™ื—ืกื•ืŸ ืขื ืŸ ื‘ืฉื dotCloud (ื›ื™ื•ื ื›ื‘ืจ ืฉื™ื ืชื” ืืช ืฉืžื” ืœ Docker Inc) ื‘ืฉื ืช 2013. ื‘ืื•ืชื” ืชืงื•ืคื” ื“ื•ื˜ืงืœืื•ื“ ื”ืฆื™ืขื” ืžื•ืฆืจ ืฉื™ื•ื“ืข ืœืงื—ืช ืงื•ื“ ืžื”ืžื—ืฉื‘ ืฉืœื›ื ื•ืœื”ืขืœื•ืช ืื•ืชื• ืœื”ืจืฆื” ื‘ืขื ืŸ ืฉืœื”ื - ื•ื”ื‘ืขื™ื” ื”ืžืจื›ื–ื™ืช ืฉื”ื™ืชื” ืœื”ื ื”ื™ืชื” ืื™ืš ืœื”ืขื‘ื™ืจ ืืช ื”ืงื•ื“ ืžืžื›ื•ื ื” ืื—ืช ืœืฉื ื™ื” ื‘ืœื™ ืœืฉื‘ื•ืจ ืื•ืชื•. ืขื“ ืœืคื™ืชื•ื— ืฉืœ ื“ื•ืงืจ ื‘ืฉื‘ื™ืœ ืœื”ืขื‘ื™ืจ ืงื•ื“ ืžืžืงื•ื ืœืžืงื•ื ื”ื™ื™ืช ืฆืจื™ืš ืœืฉื›ืคืœ ืืช "ื”ื“ื‘ืจื™ื ื”ื—ืฉื•ื‘ื™ื ื‘ืกื‘ื™ื‘ืช ื”ืจื™ืฆื”" ืœืžื›ื•ื ื” ื”ื—ื“ืฉื”. ืื– ืื ื™ืฉ ืœื™ ืชื•ื›ื ื™ืช ืคื™ื™ืชื•ืŸ ืฉืฆืจื™ื›ื” ืœืจื•ืฅ ืขืœ ืฉืจืช, ืื ื™ ืฆืจื™ืš ืœื”ืชืงื™ืŸ ืขืœ ื”ืฉืจืช ืืช ืื•ืชื” ื’ื™ืจืกืช ืคื™ื™ืชื•ืŸ ืฉืขืœื™ื” ืขื‘ื“ืชื™ ื‘ืคื™ืชื•ื—, ืืช ืื•ืชืŸ ืกืคืจื™ื•ืช ืคื™ื™ืชื•ืŸ ืฉื”ืชื•ื›ื ื™ืช ืฉืœื™ ืฆืจื™ื›ื” (ืขื pip install), ื•ื”ื—ืœืง ื”ืงืฉื” - ืืช ื”ื—ืœืงื™ื ืžืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืจืœื•ื•ื ื˜ื™ื™ื ืœืชื•ื›ื ื™ืช ืฉืœื™. ืื ื”ืชื•ื›ื ื™ืช ืฉืœื™ ืžืฉืชืžืฉืช ื‘ Shared Library ืžืกื•ื™ืžืช ืื– ืื ื™ ืฆืจื™ืš ืœื•ื•ื“ื ืฉื”ืกืคืจื™ื” ืชื•ืชืงืŸ ื’ื ืขืœ ื”ืฉืจืช. ืื ื”ืชื•ื›ื ื™ืช ืฉืœื™ ืžืฉืชืžืฉืช ื‘ืชื•ื›ื ื™ืช ื—ื™ืฆื•ื ื™ืช ืžืกื•ื™ืžืช, ืื•ืชื” ืชื•ื›ื ื™ืช ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืžื•ืชืงื ืช ื’ื ืขืœ ื”ืฉืจืช. ื”ืจื‘ื” ืคืขืžื™ื ืื™ ืชืื™ืžื•ื™ื•ืช ืงื˜ื ื•ืช ื‘ื™ืŸ ื”ื›ืœื™ื ืื• ื”ืกืคืจื™ื•ืช ื™ื•ืฆืจื™ื ื‘ืื’ื™ื ืฉืงืฉื” ืœื–ื”ื•ืช ืื•ืชื, ื•ืœื›ืŸ ื”ืžืขื‘ืจ ืœืคืจื•ื“ืงืฉืŸ ื“ืจืฉ ืชืžื™ื“ ืชืฉื•ืžืช ืœื‘ ืžื™ื•ื—ื“ืช ืœืคืจื˜ื™ื. ื“ื•ืงืจ ื”ื™ื” ืืžื•ืจ ืœื”ื™ื•ืช ืขื‘ื•ืจ ืชืขืฉื™ื™ืช ื”ืชื•ื›ื ื” ืžื” ืฉืงื•ื ื˜ื™ื™ื ืจื™ื ื”ื™ื• ืœืชืขืฉื™ื™ืช ื”ืกืคื ื•ืช: ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉื›ืœ ื”ืชืขืฉื™ื™ื” ืชืชื™ื™ืฉืจ ืกื‘ื™ื‘ื”, ืฉืชืืคืฉืจ ืœื”ืขื‘ื™ืจ ืงื•ื“ ืžืžื›ื•ื ื” ืื—ืช ืœืžื›ื•ื ื” ืฉื ื™ื” ื‘ืฆื•ืจื” ืืžื™ื ื” ื•ื‘ืœื™ ืœื”ืชืขืกืง ื‘ืคืจื˜ื™ื. ื”ื—ืœื•ื ื”ื™ื” ืฉืžืชื›ื ืชืช ืชื‘ื ื” ืงื•ืคืกื”, ืชืชืŸ ืืช ื”ืงื•ืคืกื” ื”ื–ืืช ืœืฆื•ื•ืช Devops ื•ืื•ืชื• ืฆื•ื•ืช Devops ื™ื•ื›ืœ ืœื”ืคืขื™ืœ ืืช ื”ืงื•ื“ ืฉื‘ืงื•ืคืกื” ืขืœ ื›ืœ ืžื›ื•ื ื” ื‘ืขื•ืœื. ื”ื“ืจืš ืฉืœ ื“ื•ืงืจ ืœื”ื’ืฉื™ื ืืช ื”ื—ืœื•ื ื”ื–ื” ื”ื™ืชื” ืฉื™ืžื•ืฉ ื‘ืคื™ืฆ'ืจื™ื ืฉืœ Linux Kernel ืฉืžืืคืฉืจื™ื ืœื”ืจื™ืฅ ืžืขื™ืŸ ืžืขืจื›ืช ื”ืคืขืœื” ื‘ืชื•ืš ืžืขืจื›ืช ื”ืคืขืœื”. ืกื•ื’ ืฉืœ ืงื•ืคืกื” ืกื’ื•ืจื” ื‘ืชื•ืš ื”ืžื—ืฉื‘ ืฉื™ื›ื•ืœื”, ื‘ืชื•ืš ื”ืขื•ืœื ืฉืœื”, ืœืชืช ืœื™ื™ืฉื•ืžื™ื ืกื‘ื™ื‘ืช ืจื™ืฆื” ืžืœืื” ืฉื›ื•ืœืœืช ืืช ื›ืœ ื”ืกืคืจื™ื•ืช ืืคื™ืœื• ื”ื‘ืกื™ืกื™ื•ืช ื‘ื™ื•ืชืจ ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื”. ื“ื•ืงืจ, ื›ื˜ื›ื ื•ืœื•ื’ื™ื”, ืžืืคืฉืจ ื‘ื ื™ื” ืฉืœ ืงื•ืคืกืื•ืช ื›ืืœื” ื•ื”ืคืขืœื” ืฉืœื”ืŸ ื‘ื›ืœ ืžืงื•ื. ื•ื–ื” ืžื‘ื™ื ืื•ืชื ื• ืœืฉื ื™ ื”ืžื•ืฉื’ื™ื ืฉืจืฆื™ืชื™ ืœื“ื‘ืจ ืขืœื™ื”ื ื‘ืคื•ืกื˜ ื–ื”: ืงื•ื ื˜ื™ื™ื ืจื™ื ื•ืื™ืžื’'ื™ื. ื”ืงื•ื ื˜ื™ื™ื ืจ ื”ื•ื ืื•ืชื” ืงื•ืคืกื” ืกื’ื•ืจื” ืฉืจืฆื” ืขืœ ืžื›ื•ื ื” ืžืกื•ื™ืžืช. ืงื•ื ื˜ื™ื™ื ืจ ื”ื•ื ืกื‘ื™ื‘ืช ืจื™ืฆื” ืฉื”ื™ื™ืฉื•ื ืื• ื”ื™ื™ืฉื•ืžื™ื ืฉืจืฆื™ื ื‘ืชื•ื›ื” ืจื•ืื™ื ืืช ืขืฆืžื ื›ืื™ืœื• ื”ื ืจืฆื™ื ื‘ืชื•ืš ืžืขืจื›ืช ื”ืคืขืœื” ืžืกื•ื™ืžืช, ืขื ืกืคืจื™ื•ืช ืžืกื•ื™ืžื•ืช ื•ื›ืœื™ ืขื‘ื•ื“ื” ืžืกื•ื™ืžื™ื. ืœื“ื•ื’ืžื” ืงื•ื ื˜ื™ื™ื ืจ ืฉืœ ืชื•ื›ื ื™ืช ืคื™ื™ืชื•ืŸ ื™ื›ืœื•ืœ ื’ื ืืช ืงื•ื“ ื”ืชื•ื›ื ื™ืช, ื’ื ืืช ืคื™ื™ืชื•ืŸ ืขืฆืžื”, ื’ื ืืช ื›ืœ ื”ืกืคืจื™ื•ืช ืฉื”ืชื•ื›ื ื™ืช ืฆืจื™ื›ื”, ื•ื’ื ืืช ื›ืœ ื”ืกืคืจื™ื•ืช ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื•ื”ืงื‘ืฆื™ื ืžืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉื”ืชื•ื›ื ื™ืช ืžืฉืชืžืฉืช ื‘ื”ื. ืœืžืขืฉื” ื–ื” ื›ืื™ืœื• ืœืงื—ื ื• ืืช ื›ืœ ื”ืžื—ืฉื‘ ืžื”ืชื•ื›ื ื™ืช ืœืžื˜ื” ืขื“ ืžืขืจื›ืช ื”ื”ืคืขืœื”, ืืจื–ื ื• ืืช ื”ื›ืœ ื™ื—ื“ ื•ื”ืจืฆื ื• ืืช ื–ื” ืขืœ ืžื›ื•ื ื” ืื—ืจืช. ืขืœ ืžื—ืฉื‘ ืคื™ื–ื™ ืื—ื“ ืืคืฉืจ ืœื”ืจื™ืฅ ื›ืžื” ืงื•ื ื˜ื™ื™ื ืจื™ื ืฉืื ื—ื ื• ืจื•ืฆื™ื, ื‘ื“ื™ื•ืง ื›ืžื• ืฉืžืจื™ืฆื™ื ืชื•ื›ื ื™ื•ืช ืจื’ื™ืœื•ืช. ืงื•ื ื˜ื™ื™ื ืจ ืžื–ื›ื™ืจ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช, ื‘ื’ืœืœ ืฉื‘ืชื•ื›ื• ืจืฆื” ืžืขืจื›ืช ื”ืคืขืœื” ืžืœืื” ืขื ื›ืœ ื”ื›ืœื™ื ื•ื”ืกืคืจื™ื•ืช ืฉืœื” - ืื‘ืœ ื–ื• ืืฉืœื™ื”. ื”ืงื•ื ื˜ื™ื™ื ืจ ื‘ื“ื•ืงืจ ื”ื•ื ืชื•ื›ื ื™ืช ืจื’ื™ืœื”, ืฉืจืฆื” ื‘ืชื•ืš ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืœ ื”ืžื—ืฉื‘ ื”ืžืืจื—. ืžืกื™ื‘ื” ื–ืืช ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ืงื•ื ื˜ื™ื™ื ืจื™ื ื”ื ืžืื•ื“ ื˜ื•ื‘ื™ื ื•ื‘ืชื•ืจ ืžืชื›ื ืชื™ื ืงืœ ืœื ื• ืœื”ืจื™ืฅ ืงื•ื ื˜ื™ื™ื ืจ ื ืคืจื“ ืœื›ืœ ืืคืœื™ืงืฆื™ื” ืฉืื ื—ื ื• ืขื•ื‘ื“ื™ื ืื™ืชื”. ื•ืื ืงื•ื ื˜ื™ื™ื ืจ ื”ื•ื ืชื•ื›ื ื™ืช ืฉื›ืจื’ืข ืจืฆื” ืขืœ ื”ืžื›ื•ื ื” ื‘ืชื•ืš ืงื•ืคืกื” ื ืคืจื“ืช, ืื– Container Image ื”ื•ื ื”ืชื‘ื ื™ืช ืฉืžืžื ื” ืื ื—ื ื• ืžื™ื™ืฆืจื™ื ืงื•ื ื˜ื™ื™ื ืจื™ื. ื” Image ื”ื•ื ื”ื“ื‘ืจ ืฉืืคืฉืจ ื‘ืงืœื•ืช ืœืฉืœื•ื— ืžืžื›ื•ื ื” ืœืžื›ื•ื ื”. ื”ื™ื—ืก ื‘ื™ืŸ ืงื•ื ื˜ื™ื™ื ืจื™ื ืœืื™ืžื’'ื™ื ืžื–ื›ื™ืจ ืืช ื”ื™ื—ืก ื‘ื™ืŸ ืงื•ื‘ืฅ ืชื•ื›ื ื™ืช ืœืชื”ืœื™ืš ืขืœ ื”ืžื—ืฉื‘ - ื”ืื™ืžื’' ื”ื•ื ื”ืงื•ื‘ืฅ, ื•ื›ืฉืžืคืขื™ืœื™ื ืื•ืชื• ืžืงื‘ืœื™ื ืงื•ื ื˜ื™ื™ื ืจ. ื”ืžื ื•ืข ืฉืœ ื“ื•ืงืจ (Docker Engine) ื”ื•ื ืจื›ื™ื‘ ืชื•ื›ื ื” ืฉื™ื•ื“ืข ืœื‘ื ื•ืช ืงื•ื ื˜ื™ื™ื ืจ ืžืชื•ืš ืื™ืžื’'. ืœื›ืŸ ืขืœ ื›ืœ ืžื›ื•ื ื” ืฉืžืจื™ืฆื” Docker Engine ืื ื™ ื™ื›ื•ืœ ืœืงื—ืช ื›ืœ ืื™ืžื’' ืฉืชื•ืื ืœื• ื•ืœื™ืฆื•ืจ ืžืžื ื• ืงื•ื ื˜ื™ื™ื ืจ. ืื™ืžื’' ื‘ื“ื•ืงืจ ืžื•ืจื›ื‘ ืžืงื‘ืฆื™ื, ื•ื›ืœ ืงื•ื‘ืฅ ืžื™ื™ืฆื’ "ืฉื›ื‘ื”" ืฉืœ ื ืชื•ื ื™ื. ื›ืฉื”ืžื ื•ืข ืฆืจื™ืš ืœื”ืจื™ืฅ ืงื•ื ื˜ื™ื™ื ืจ ืžื”ืื™ืžื’', ื”ื•ื ืžืžื–ื’ ืืช ื›ืœ ื”ืฉื›ื‘ื•ืช ืœืžืขืจื›ืช ืงื‘ืฆื™ื ืื—ืช ืฉื›ื•ืœืœืช ืืช ื›ืœ ื”ืงื‘ืฆื™ื ืžื›ืœ ื”ืฉื›ื‘ื•ืช. ื›ืชื™ื‘ื” ืœืงื•ื‘ืฅ ื‘ืื™ืžื’' ืคืฉื•ื˜ ื™ื•ืฆืจืช ืฉื›ื‘ื” ื—ื“ืฉื”. ืžื‘ื ื” ื”ืฉื›ื‘ื•ืช ืฉืœ ื”ืื™ืžื’' ืžืืคืฉืจ ืžืื•ื“ ื‘ืงืœื•ืช ืœื™ืฆื•ืจ ืื™ืžื’' ืžืชื•ืš ืื™ืžื’', ื•ื’ื ืžื”ื•ื•ื” ืืช ื”ื‘ืกื™ืก ืœื‘ื ื™ื™ืช ื”ืงื•ื ื˜ื™ื™ื ืจื™ื. ื‘ืฉื‘ื™ืœ "ืœื”ืจื™ืฅ" ืื™ืžื’', ื›ืœื•ืžืจ ื‘ืฉื‘ื™ืœ ืœื‘ื ื•ืช ืงื•ื ื˜ื™ื™ื ืจ ืžืชื•ืš ืื™ืžื’', ื”ืžื ื•ืข ืฉืœ ื“ื•ืงืจ ืœื•ืงื— ืืช ื”ืื™ืžื’' ื•ืžื•ืกื™ืฃ ืขืœื™ื• ืฉื›ื‘ื” ื—ื“ืฉื” ืฉืœ ืžืขืจื›ืช ืงื‘ืฆื™ื ืื™ื ื˜ืจืงื˜ื™ื‘ื™ืช. ื”ื•ืกืคืช ื”ืฉื›ื‘ื” ื”ื—ื“ืฉื” ื”ื™ื ืชื”ืœื™ืš ื›ืžืขื˜ ืžื™ื™ื“ื™ ื•ืœื›ืŸ ื”ืจืฆื” ืฉืœ ืงื•ื ื˜ื™ื™ื ืจ ืžืชื•ืš ืื™ืžื’' ื”ื™ื ืžืื•ื“ ืžื”ื™ืจื”. ื”ืฆื“ ื”ืžืคืชื™ืข ื‘ืฉื™ื˜ืช ื”ืขื‘ื•ื“ื” ื”ื–ืืช ื”ื•ื ืฉืงื•ื ื˜ื™ื™ื ืจื™ื ื”ื ื™ืฉื•ื™ื•ืช ื–ืžื ื™ื•ืช. ืื ื”ืงื•ื ื˜ื™ื™ื ืจ ื›ื•ืชื‘ ืงื•ื‘ืฅ ืœืžืขืจื›ืช ื”ืงื‘ืฆื™ื ืฉืœื•, ื‘ืจื’ืข ืฉื”ืงื•ื ื˜ื™ื™ื ืจ ื™ื™ืกื’ืจ ื”ืงื•ื‘ืฅ ื™ื™ืขืœื ื™ื—ื“ ืื™ืชื•. ื”ืขื‘ื•ื“ื” ืฉืœื ื• ืขื ื“ื•ืงืจ ื›ื•ืœืœืช ืฉื ื™ ืžื ื’ื ื•ื ื™ื ืฉื›ืœ ืื—ื“ ืžื”ื ืžืชืจื—ืฉ ื‘ื–ืžืŸ ืฉื•ื ื”:

ToCode
1 419
# ืชื•ื›ื ื™ืช ื•ื•ื‘ื™ื ืจื™ื ืœื—ื•ื“ืฉื™ื ื”ืงืจื•ื‘ื™ื ืงื•ืจืื™ื ื•ื•ืชื™ืงื™ื ื›ื‘ืจ ื™ื•ื“ืขื™ื ืฉื‘ื›ืœ ื™ื•ื ื—ืžื™ืฉื™ ื”ืจืืฉื•ืŸ ืฉืœ ื”ื—ื•ื“ืฉ ืื ื™ ืžืขื‘ื™ืจ ื‘ื–ื•ื ื•ื•ื‘ื™ื ืจ ืขืœ ื ื•ืฉื ื˜ื›ื ื•ืœื•ื’ื™ ืžืขื ื™ื™ืŸ. ื”ื‘ื•ืงืจ ืกื’ืจืชื™ ืืช ื”ืชื•ื›ื ื™ืช ืœืฉืœื•ืฉืช ื”ื—ื•ื“ืฉื™ื ื”ืงืจื•ื‘ื™ื ื•ื”ื ื” ืžื” ืฉืฆืคื•ื™ ืœื ื•: ## ืืคืจื™ืœ - ื”ื™ื›ืจื•ืช ืขื Solid.JS ืœืคื ื™ ื›ืžื” ื™ืžื™ื ื›ืชื‘ืชื™ ืคื” ืขืœ ืกื•ืœื™ื“, ืฉื”ื™ืชื” ื‘ืฉื‘ื™ืœื™ ืื”ื‘ื” ืžืžื‘ื˜ ืจืืฉื•ืŸ. ื”ืื’'ื ื“ื” ืฉืœ ืกื•ืœื™ื“ ืžื–ื›ื™ืจื” ืœื™ ืืช ื”ื“ื‘ืจื™ื ืฉืื”ื‘ืชื™ ื‘ืจื™ืืงื˜ - ื•ื”ื™ื ืœืชืช ืœืžืคืชื—ื™ื ื›ืœื™ ืขื‘ื•ื“ื” ื˜ื•ื‘ื™ื ื•ืœื ืœื”ื’ื™ื“ ืœืš ื™ื•ืชืจ ืžื“ื™ ืื™ืš ืฆืจื™ืš ืœืงื•ื“ื“. ืกื•ืœื™ื“ ื”ื™ื ืคืจื™ื™ืžื•ื•ืจืง ืจื™ืืงื˜ื™ื‘ื™ืช ื‘ื“ื•ืžื” ืœ Vue, ืื‘ืœ ื™ืฉ ื‘ื” ื”ืจื‘ื” ืคื—ื•ืช ืชื—ื‘ื™ืจ ื—ื“ืฉ. ืžืคืชื—ื™ ืจื™ืืงื˜ ื™ืฆืœื™ื—ื• ืœื”ื™ื•ืช ื™ืขื™ืœื™ื ื‘ืกื•ืœื™ื“ ืชื•ืš ื–ืžืŸ ืžืื•ื“ ืงืฆืจ. ื‘ื•ื•ื‘ื™ื ืจ ื ืจืื” ืžื” ืžื™ื•ื—ื“ ื‘ Solid.JS ืœืขื•ืžืช ืจื™ืืงื˜ (ื•ืœืขื•ืžืช Vue), ื•ื›ืžื•ื‘ืŸ ื ื‘ื ื” ืคืจื•ื™ืงื˜ ื•ื“ื•ื’ืžืื•ืช ืงื•ื“ ื›ื“ื™ ืœื”ืžื—ื™ืฉ ื›ืœ ืื—ืช ืžื”ื ืงื•ื“ื•ืช. ื‘ืคืจื˜ ืื ื™ ืžืชื›ื ืŸ: 1. ืœื”ืฆื™ื’ ืกื˜ืืจื˜ืจ ืœืชื•ื›ื ื™ืช Solid.JS 2. ืœื”ื‘ื™ืŸ ืืช ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ื”ืจื™ืืงื˜ื™ื‘ื™ื•ืช ืฉืœ ืกื•ืœื™ื“ ืœ Virtual DOM ืฉืœ ืจื™ืืงื˜. 3. ืœื‘ื ื•ืช ืงื•ืžืคื•ื ื ื˜ื•ืช ื•ืœื—ื‘ืจ ื‘ื™ื ื™ื”ืŸ. ืœืคืจื˜ื™ื ื ื•ืกืคื™ื ื•ื”ืจืฉืžื” ืœื•ื•ื‘ื™ื ืจ ื–ื” ืžื•ื–ืžื ื™ื ืœื‘ืงืจ ื‘ื“ืฃ ื”ื•ื•ื‘ื™ื ืจ ื‘ืงื™ืฉื•ืจ https://www.tocode.co.il/workshops/116. ## ืžืื™ - ืชื›ื ื•ืช ืžื‘ื•ื–ืจ ืขื Rabbit MQ ื™ื•ื ื—ืžื™ืฉื™ ื”ืจืืฉื•ืŸ ืฉืœ ืžืื™ ื”ื•ื ื™ื•ื ื”ืขืฆืžืื•ืช ื•ืœื›ืŸ ื”ื–ื–ืชื™ ืืช ื”ื•ื•ื‘ื™ื ืจ ืœืฉื‘ื•ืข ื”ืฉื ื™ ืฉืœ ื”ื—ื•ื“ืฉ. ืœื’ื‘ื™ ื”ื ื•ืฉื - ืฉืœื•ืฉืช ืชื•ืจื™ ื”ื”ื•ื“ืขื•ืช ืฉื™ืฆื ืœื™ ืœืขื‘ื•ื“ ืื™ืชื ื”ื ZeroMQ ื• Kafka. ืžืชื•ื›ื ืงืคืงื ื”ื•ื ื›ื ืจืื” ื”ืžืคื•ืจืกื ื•ื”ืžืชื•ื—ื›ื ืžื›ื•ืœื, ื–ื™ืจื• ืขื“ื™ื™ืŸ ืžืฆืœื™ื— ืœื‘ืœื‘ืœ ืื•ืชื™ ื•ืจื‘ื™ื˜ ื ืฉืืจ ื”ื‘ื—ื™ืจื” ืฉืœื™ ื‘ืคืจื•ื™ืงื˜ื™ื ื‘ื”ื ื™ืฉ ืœื™ ื‘ื—ื™ืจื”. ื‘ื•ื•ื‘ื™ื ืจ ืืจืฆื” ืœื”ืจืื•ืช ืžืกืคืจ ืชื‘ื ื™ื•ืช ืœืชื›ื ื•ืช ืžื‘ื•ื–ืจ ื‘ืืžืฆืขื•ืช ืชื•ืจ ื”ื•ื“ืขื•ืช, ื•ืชื•ืจ ื”ื”ื•ื“ืขื•ืช ืœื”ื“ื’ืžืช ื”ืžื•ืฉื’ื™ื ื™ื”ื™ื” ืจื‘ื™ื˜. ืจืฉืžืชื™ ื‘ืชื•ื›ื ื™ืช ืฉืื ื™ ืจื•ืฆื” ืœื“ื‘ืจ ืขืœ ืฉืœื•ืฉืช ื”ืชื‘ื ื™ื•ืช: 1. ืชื”ืœื™ืš ืžืจื›ื–ื™ ืฉืžื•ืฆื™ื ืžืฉื™ืžื•ืช ืœืชื”ืœื™ืš ืจืงืข. 2. ืงื‘ื•ืฆื” ืฉืœ ืกืจื‘ื™ืกื™ื ืฉื›ืœ ืื—ื“ ืžื”ื ืฆืจื™ืš ืœื”ื’ื™ื‘ ืื—ืจืช ืœืื™ืจื•ืข. 3. ื˜ื™ืคื•ืœ ื‘ืื™ืจื•ืข ื‘ืชื•ืš ืžืกืคืจ ืกืจื‘ื™ืกื™ื ืœืคื™ ืกื“ืจ ืงื‘ื•ืข. ืื ืืชื ืžื›ื™ืจื™ื Node.JS ื•ืขื•ืฉื™ื ืืช ื”ืฆืขื“ื™ื ื”ืจืืฉื•ื ื™ื (ืื• ื”ืฉื ื™ื™ื) ื‘ืขื•ืœื ื”ืชื›ื ื•ืช ื”ืžื‘ื•ื–ืจ, ื•ื•ื‘ื™ื ืจ ื–ื” ืืžื•ืจ ืœื”ื™ื•ืช ืžืื•ื“ ืžืขื ื™ื™ืŸ ืขื‘ื•ืจื›ื. ืœืคืจื˜ื™ื ื ื•ืกืคื™ื ื•ื”ืจืฉืžื” ื‘ืงืจื• ื‘ื“ืฃ ื”ื•ื•ื‘ื™ื ืจ ื‘ืงื™ืฉื•ืจ https://www.tocode.co.il/workshops/115. ## ื™ื•ื ื™ - ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื ื‘ Auth0 ื•ื‘ื—ื•ื“ืฉ ื™ื•ื ื™ ืจืฆื™ืชื™ ืœื”ืžืฉื™ืš ืขื ื”ื ื•ืฉื ืฉืœ ืชื›ื ื•ืช ืžื‘ื•ื–ืจ ื•ื”ืคืขื ืœืขื‘ื•ืจ ืขืœ ื ื•ืฉื ืฉืœ ื”ื–ื“ื”ื•ืช ื•ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื. ื”ืคืจื•ื˜ื•ืงื•ืœื™ื OAuth ื• Open ID Connect ื”ื ื”ื“ืจืš ื”ืžืงื•ื‘ืœืช ืœื ื”ืœ ืžืฉืชืžืฉื™ื ื‘ืžืขืจื›ืช ืžื‘ื•ื–ืจืช. ื”ื ืงืฆืช ืงืฉื™ื ืœืœืžื™ื“ื” ื›ื™ ื™ืฉ ื‘ื”ื ื”ืžื•ืŸ ืžื•ืฉื’ื™ื ื•ื˜ื™ืคื•ืœ ื‘ืžืงืจื™ื ื•ืชื”ืœื™ื›ื™ ืขื‘ื•ื“ื” ืžื’ื•ื•ื ื™ื. ื‘ื•ื•ื‘ื™ื ืจ ืืกื‘ื™ืจ ืืช ื”ืชื”ืœื™ื›ื™ื ื”ืžืจื›ื–ื™ื™ื ืฉ OAuth ืžื˜ืคืœ ื‘ื”ื, ืืจืื” ืกืคืฆื™ืคื™ืช ืื™ืš ืขื•ื‘ื“ Single Sign On, ืื™ืš ืžื ื”ืœื™ื ื”ืจืฉืื•ืช ื•ืื™ืš ืฆืจื™ื›ื™ื ืœื”ืชื ื”ื’ ืงื•ื“ ืฆื“ ืœืงื•ื— ื•ืงื•ื“ ืฆื“ ืฉืจืช ื‘ืžืขืจื›ืช ืžื‘ื•ื–ืจืช ื”ื›ื•ืœืœืช ื”ื’ื“ืจืช ืžืฉืชืžืฉื™ื. ืืช ื›ืœ ื”ื”ื“ื’ืžื•ืช ืื ื™ ืืจืื” ืขื ืฉื™ืจื•ืช Auth0 ืฉื”ื•ื ืฉื™ืจื•ืช ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื ื™ื“ื™ื“ื•ืชื™ ืœืžืคืชื—ื™ื. ืงื•ื“ ืฆื“ ืฉืจืช ื™ื•ืฆื’ ื‘ Node.JS ื•ืงื•ื“ ืฆื“ ืœืงื•ื— ื‘ React. ืื ืืชื ืžื›ื™ืจื™ื ืืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื•ืขื•ื‘ื“ื™ื ืขืœ ืžืขืจื›ืช ืžื‘ื•ื–ืจืช (ืื• ืจื•ืฆื™ื ืœืขื‘ื•ื“ ืขืœ ืื—ืช) ืฉื•ื•ื” ืœื”ืฆื˜ืจืฃ. ืคืจื˜ื™ื ื•ื”ืจืฉืžื” ื‘ืงื™ืฉื•ืจ https://www.tocode.co.il/workshops/114. ื”ืงืœื˜ื•ืช ืฉืœ ื•ื•ื‘ื™ื ืจื™ื ืขื•ืœื•ืช ืœืืชืจ ื›ืžื” ื™ืžื™ื ืื—ืจื™ ื”ืื™ืจื•ืข ืœื“ืฃ ื”ืงืœื˜ื•ืช ืžื•ื•ื‘ื™ื ืจื™ื ื•ื“ื•ื’ืžืื•ืช ื”ืงื•ื“ ื–ืžื™ื ื•ืช ื‘ื’ื™ื˜ื”ืื‘ ื‘ืงื™ืฉื•ืจ: https://github.com/tocodeil/webinar-live-demos ืžืงื•ื•ื” ืœืจืื•ืชื›ื, ื™ื ื•ืŸ

ToCode
1 419
ื‘ื•ืงืจ ื˜ื•ื‘ ืขื•ื“ ืขืฉืจ ื“ืงื•ืช (ื‘ืฉืขื” 10:00) ืืชื—ื™ืœ ื•ื•ื‘ื™ื ืจ ืขืœ ื”ืขืœืืช ื™ื™ืฉื•ื Node.JS ืœืงืœืืกื˜ืจ ืงื•ื‘ืจื ื˜ื™ืก ืœืคืจื•ื“ืงืฉืŸ ืžื™ ืฉืžืขื•ื ื™ื™ืŸ ืžื•ื–ืžื ื™ื ืœื”ืฆื˜ืจืฃ ื‘ืงื™ืฉื•ืจ: https://us06web.zoom.us/j/86168203144?pwd=b1YvdnVQWnVDd25Vc016WDFURTN1UT09

ToCode
1 419
# ืžืชื™ ืœื‘ื ื•ืช ืœื‘ื“ ื‘ืขื™ื“ืŸ ื” npm ื•ื”ืคื™ืชืจื•ื ื•ืช ื”ืื™ื ืกื•ืคื™ื™ื ื”ื ื˜ื™ื” ืฉืœ ืžืชื›ื ืชื™ื ืจื‘ื™ื ื”ื™ื ืœื”ื’ื™ื“ "ืžื™ืฉื”ื• ื›ื‘ืจ ื‘ื˜ื— ื‘ื ื” ืืช ื–ื”" ืคื—ื•ืช ืื• ื™ื•ืชืจ ืขืœ ื›ืœ ื‘ืขื™ื” ืฉื ืชืงืœื™ื ื‘ื”, ื‘ืžื˜ืจื” ืœื—ืกื•ืš ื–ืžืŸ ื•ืœื‘ื ื•ืช ืขืœ ื”ืฆืœื—ื” ืฉืœ ืื—ืจื™ื. ืื‘ืœ ืžื” ืงื•ืจื” ื›ืฉื”ื ื™ืกื™ื•ืŸ ืœื”ืชื‘ืกืก ืขืœ ืขื‘ื•ื“ื” ืฉืœ ืื—ืจื™ื ื“ื•ื•ืงื ืžื‘ื–ื‘ื– ืœื ื• ื–ืžืŸ? ื•ืžืชื™ ืื ื—ื ื• ืขื•ืฆืจื™ื ืœื”ืชืœื‘ื˜ ืื ื›ื“ืื™ ืœื‘ื ื•ืช ืœื‘ื“? ื™ืฉ ืฉืชื™ ืกื™ื‘ื•ืช ืžืจื›ื–ื™ื•ืช ืœืฉื™ืžื•ืฉ ื‘ืคื™ืชืจื•ืŸ ืงื™ื™ื- 1. ืฉื™ืžื•ืฉ ื‘ืงื•ื“ ืงื™ื™ื ื”ื•ืคืš ืืช ื”ืžืขืจื›ืช ืฉืœื™ ืœืกื˜ื ื“ืจื˜ื™ืช ื™ื•ืชืจ ื•ื›ืš ืงืœ ื™ื•ืชืจ ืœื’ื™ื™ืก ืžืชื›ื ืชื™ื ื ื•ืกืคื™ื ื•ืœื”ื ืงืœ ื™ื•ืชืจ ืœื”ื™ื›ื ืก ืžื”ืจ ืœืขื ื™ื™ื ื™ื. ืื—ื“ ืžืงืœืคื™ ื”ืžื›ื™ืจื” ื”ืžืจื›ื–ื™ื™ื ืฉืœ ืจื™ื™ืœืก ื›ืฉื”ื™ื ืจืง ื™ืฆืื” ื”ื™ื” ื”ื‘ืœืื’ืŸ ืฉืฉืจืจ ื‘ืขื•ืœื ื” PHP ื‘ืื•ืชื” ืชืงื•ืคื”, ื•ื”ื˜ืขื ื” ืฉืืฆืœื ื• ื‘ืจื™ื™ืœืก ื›ืœ ื”ืคืจื•ื™ืงื˜ื™ื ืžื’ื™ืขื™ื ื‘ืื•ืชื• ืžื‘ื ื” ืชื™ืงื™ื•ืช ื•ืžืชื›ื ืชื™ื ื™ื•ื›ืœื• ื‘ืงืœื•ืช ืœืขื‘ื•ืจ ื‘ื™ืŸ ืคืจื•ื™ืงื˜ื™ื. ื”ื™ื•ื ื‘ืจื•ืจ ืœื’ืžืจื™ ืฉื™ื•ืชืจ ืงืœ ืœื™ ืœื’ื™ื™ืก ืžืชื›ื ืชืช ืœืคืจื•ื™ืงื˜ ืจื™ืืงื˜ ืžืืฉืจ ืžืชื›ื ืชืช ืœืคืจื•ื™ืงื˜ ืฉื™ืฉืชืžืฉ ื‘ Framework ืฉืื ื™ ื”ืžืฆืืชื™. ื”ืžื’ื•ื™ืกืช ื”ื˜ืจื™ื” ื™ื•ื“ืขืช ืฉืขื ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉื”ื™ื ืžื›ื™ืจื” ื”ื™ื ืชื•ื›ืœ ืœื”ืชื—ื™ืœ ืœื”ื™ื•ืช ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ืช ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจ, ื•ืฉืขื‘ื•ื“ื” ื‘ืจื™ืืงื˜ ืชืชืŸ ืœื” ื ื™ืกื™ื•ืŸ ื‘ืขืœ ืขืจืš ืœืงืจืืช ื”ืขื‘ื•ื“ื” ื”ื‘ืื”. 2. ืฉื™ืžื•ืฉ ื‘ืงื•ื“ ืงื™ื™ื ืžืืคืฉืจ ืœื™ ืœื—ืกื•ืš ื–ืžืŸ ืคื™ืชื•ื— ื‘ืืžืฆืขื•ืช ื‘ื ื™ื” ืขืœ ืขื‘ื•ื“ื” ืฉืœ ืื—ืจื™ื. ื“ื•ื’ืžื” ื˜ื•ื‘ื” ื”ื™ื ืžื” ืฉื”ื™ื” ืขื•ืœื ืคื™ืชื•ื— ื”ื•ื•ื‘ ื‘ื™ืžื™ื ืฉืœ jQuery, ื›ืฉื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื”ืชืื™ื ืืชืจื™ื ืœืžืกืคืจ ื“ืคื“ืคื ื™ื ื•ื”ื™ื• ืื™ื ืกื•ืฃ ื˜ืจื™ืงื™ื ืฉื”ื™ื™ืช ืฆืจื™ืš ืœื›ืชื•ื‘ ื›ื“ื™ ืฉื“ื‘ืจื™ื ื™ืขื‘ื“ื• ื˜ื•ื‘ ื‘ื›ืœ ืžืงื•ื. ืกืคืจื™ื” ื›ืžื• jQuery ื ืชื ื” ืžืžืฉืง ืื—ื™ื“ ืฉืขื•ื‘ื“ ื‘ื›ืœ ืžืงื•ื, ื•ื›ืš ื—ืกื›ื” ืœืžื›ืชื ืชื™ื ืขื‘ื•ื“ื”. ืื‘ืœ ื’ื ืœื‘ื ื™ื™ืช ืคื™ืชืจื•ืŸ ืœื‘ื“ ื™ืฉ ื™ืชืจื•ื ื•ืช, ืœื“ื•ื’ืžื”: 1. ืžืชื›ื ืชื™ื ืฉื‘ื•ื ื™ื ืคื™ืชืจื•ืŸ ืœื‘ื“ ืžื‘ื™ื ื™ื ื˜ื•ื‘ ื™ื•ืชืจ ืืช ื”ื‘ืขื™ื•ืช, ื•ื‘ืขืชื™ื“ ื”ื™ื“ืข ื”ื–ื” ื™ืขื–ื•ืจ ืœื ื• ืœื‘ื—ื•ืจ ืคื™ืชืจื•ืŸ ืžื•ื›ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืื• ืœื”ืชืื™ื ืคื™ืชืจื•ืŸ ืžื“ืฃ ืœืฆืจื›ื™ื ืฉืœื ื•. 2. ืคื™ืชืจื•ืŸ ืฉื‘ื ื™ื ื• ืœื‘ื“ ื™ื”ื™ื” ืžื“ื•ื™ืง ื•ื—ืกื›ื•ื ื™ ื™ื•ืชืจ ื‘ื”ืฉื•ื•ืื” ืœืคื™ืชืจื•ืŸ ืžื“ืฃ. ื”ืคื™ืชืจื•ืŸ ืฉืœื ื• ืฆืจื™ืš ืœืคืชื•ืจ ืจืง ืืช ื”ื‘ืขื™ื” ืฉืœื ื•, ื‘ืขื•ื“ ืฉืคื™ืชืจื•ืŸ ืžื“ืฃ ืคื•ืชืจ ืขื•ื“ ื”ืžื•ืŸ ื‘ืขื™ื•ืช ืฉืื•ืœื™ ืœื ืจืœื•ื•ื ื˜ื™ื•ืช ืืœื™ื ื•. 3. ืคื™ืชืจื•ืŸ ืฉื‘ื ื™ื ื• ืœื‘ื“ ืžื•ืฉืคืข ืจืง ืžื”ืคื•ืœื™ื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœื ื•, ื•ืœื ืžืื™ื ื˜ืจืกื™ื ืฉืœ ืื—ืจื™ื. 4. ื‘ื“ืจืš ื›ืœืœ ื™ื”ื™ื” ืœื™ ื™ื•ืชืจ ืงืœ ืœืชืงืŸ ื‘ืื’ื™ื ืื• ืœื”ื•ืกื™ืฃ ืคื™ืฆ'ืจื™ื ืœืคื™ืชืจื•ืŸ ืฉืื ื™ ื›ืชื‘ืชื™, ืžืืฉืจ ืœื”ืชืื™ื ื”ืชื ื”ื’ื•ืช ืฉืœ ืคื™ืชืจื•ืŸ ื—ื™ืฆื•ื ื™ ืฉืื™ืŸ ืœื™ ืฉืœื™ื˜ื” ืขืœ ื”ืงื•ื“ ืฉืœื•. ื‘ืกื•ืฃ ื”ืฉื™ืงื•ืœ ื”ืื ืœื‘ื ื•ืช ืœื‘ื“ ืื• ืœืงื—ืช ืคื™ืชืจื•ืŸ ืžื•ื›ืŸ ืฆืจื™ืš ืœื”ื™ื•ืช ืฉื™ืงื•ืœ ืžืงืฆื•ืขื™ ื•ืชืœื•ื™ ืžืฆื‘. ืื ืืชื ืžื•ืฆืื™ื ืืช ืขืฆืžื›ื ืชืžื™ื“ ื‘ื•ื—ืจื™ื ื‘ื’ื™ืฉื” ืื—ืช ืื• ื‘ืฉื ื™ื”, ืฉื•ื•ื” ืœื ืกื•ืช ืœื’ื•ื•ืŸ ื›ื“ื™ ืœืจืื•ืช ืื™ืš ื–ื” ืžืจื’ื™ืฉ, ื•ืœืื˜ ืœืื˜ ืœืžืฆื•ื ืืช ื ืงื•ื“ืช ื”ืื™ื–ื•ืŸ ืฉืชืชืื™ื ืœืžื•ืฆืจ ืฉืœื›ื.

ToCode
1 419
ื‘ื’ืœืœ ืฉืกื•ืœื™ื“ ืžื—ืฉื‘ ืžื—ื“ืฉ ืจืง ืืช ื”ืงื˜ืขื™ื ื‘ืชื•ืš ื” Virtual DOM ืฉื”ืฉืชื ื•, ื”ื•ื ื”ื™ื” ื—ื™ื™ื‘ ืœื‘ื ื•ืช ืžื ื’ื ื•ืŸ ืžืฉืœื• ืขื‘ื•ืจ ืœื•ืœืื•ืช ื•ืชื ืื™ื. ื‘ืชืจื’ื•ื ืœ JavaScript ื”ืœื•ืœืื” ื ืจืื™ืช ื›ืš:
insert(_el$2, createComponent(For, {
  get each() {
    return range(n);
  },

  children: (item, index) => createComponent(Text, {})
}), null);
ืœื ื‘ื“ืงืชื™ ื‘ื™ืฆื•ืขื™ื ื•ืœื ื—ื™ืคืฉืชื™ ื‘ืขื™ื•ืช. ืื ื™ ืœื ื™ื•ื“ืข ืขื“ื™ื™ืŸ ืื™ืš ื–ื” ืขื•ื‘ื“ ืžื‘ื—ื™ื ืช ืžืคืชื—ื•ืช ื•ืœืžื” ื”ื•ื ืœื ืžื‘ืงืฉ ืฉืื ื™ ืื’ื“ื™ืจ key ืœื›ืœ ืคืจื™ื˜. ื–ื” ืžืฉื”ื• ืฉื™ื”ื™ื” ืžืขื ื™ื™ืŸ ืœื‘ื“ื•ืง. ืืคืฉืจ ืœืฉื—ืง ืขื ื”ื“ื•ื’ืžื” ื”ืฉื ื™ื” ื‘ Playground ืฉืœื”ื ื‘ืงื™ืฉื•ืจ https://bit.ly/36IOdlE ## ืžืฉื™ื›ืช ืžื™ื“ืข ืž API ื‘ื“ื•ื’ืžื” ื”ืื—ืจื•ื ื” ืื ื™ ืจื•ืฆื” ืœืžืฉื•ืš ืžื™ื“ืข ืž API ื‘ืืžืฆืขื•ืช fetch. ืื ื™ ืื’ื“ื™ืจ ืงื•ืžืคื•ื ื ื˜ื” ืฉืœ ืคื•ืงื™ืžื•ืŸ ืฉืชื™ืงื— ืคืจืžื˜ืจ id ื•ืชืžืฉื•ืš ืืช ื”ืฉื ืฉืœ ื”ืคื•ืงื™ืžื•ืŸ ืžืฉืจืช pokeapi.co. ื›ืœ ืคืขื ืฉื” id ืžืฉืชื ื” ื ืจืฆื” ืœืžืฉื•ืš ืžื—ื“ืฉ ืืช ื”ืžื™ื“ืข ื•ืœื”ืฆื™ื’ ืืช ื”ืฉื ื”ืžืขื•ื“ื›ืŸ. ื–ื” ื”ืงื•ื“:
import { render } from "solid-js/web";
import { createSignal, For, splitProps, createEffect } from "solid-js";

function Pokemon(props) {
  const [local, others] = splitProps(props, ["id"]);
  const [name, setName] = createSignal("");

  createEffect(async () => {
    let isActive = true;
    const url = `https://pokeapi.co/api/v2/pokemon/${local.id}`;
    console.log(`Fetching url ${url}`)
    setName('');
    const res = await fetch(url);    
    const data = await res.json();

    if (isActive) {
      setName(data.name);
    }

    onCleanup(() => { isActive = false });
  });

  return (
    <p>Pokemon {local.id} is named {name}</p>
  )
}

function App() {
  const [id, setId] = createSignal(1);

  return (
    <>
    <input type="number" value={id()} onInput={(e) => setId(e.target.value)} /> 
    <Pokemon id={id()} />
    </>
  );
}

render(() => <App />, document.getElementById("app"));
ื”ืจื‘ื” ื“ื‘ืจื™ื ืžืขื ื™ื™ื ื™ื ื›ืืŸ: 1. ื”ืคื•ื ืงืฆื™ื” createEffect ื”ื™ื ื”ืžืงื‘ื™ืœื” ื‘ืกื•ืœื™ื“ ืœ useEffect, ืื‘ืœ ื”ื™ื ืœื ืฆืจื™ื›ื” ืœืงื‘ืœ ืžืขืจืš ืฉืœ ื“ื‘ืจื™ื ืฉืžืฉืคื™ืขื™ื ืขืœ ื”ืืคืงื˜. ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ื”ื™ื ืžืกืชื›ืœืช ืขืœ ืงืจื™ืื•ืช ืœ getters ื‘ืชื•ืš ื”ืคื•ื ืงืฆื™ื” ื•ืžื•ืฉืคืขืช ืจืง ืžืฉื™ื ื•ื™ื™ื ื‘ืžืฉืชื ื™ื ืืœื”. 2. ื‘ืžืงื•ื ืฉืคื•ื ืงืฆื™ื™ืช ืืคืงื˜ ืชืฆื˜ืจืš ืœื”ื—ื–ื™ืจ ืคื•ื ืงืฆื™ื™ืช ื‘ื™ื˜ื•ืœ ืœืืคืงื˜, ื™ืฉ ืœื ื• ืคื•ื ืงืฆื™ื” ื‘ืฉื onCleanup ืฉืžืงื‘ืœืช ืืช ืคื•ื ืงืฆื™ื™ืช ื”ื ื™ืงื•ื™. 3. ืคื™ืขื ื•ื— ื” Properties ื“ื•ืจืฉ ื˜ื™ืคื•ืœ ืžื™ื•ื—ื“:
const [local, others] = splitProps(props, ["id"]);
ื‘ื’ืœืœ ืฉื”ื›ืœ ืจื™ืืงื˜ื™ื‘ื™, ืื ื™ ืœื ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ Destructuring ืจื’ื™ืœ ื›ื™ ื–ื” ื™ื’ืจื•ื ืœื”ืขืชืงืช ื”ืื•ื‘ื™ืงื˜ ื•ืœืื™ื‘ื•ื“ ื”ืจื™ืืงื˜ื™ื‘ื™ื•ืช. ืœื›ืŸ ืกื•ืœื™ื“ ื”ื™ื• ืฆืจื™ื›ื™ื ืœืชืช ืœื™ ืคื•ื ืงืฆื™ื” ืžื™ื•ื—ื“ืช ืฉืœื•ืงื—ืช ืขืจื›ื™ื ืž props ื•ื”ื•ืคื›ืช ืื•ืชื ืœืฉื“ื•ืช ืจื™ืืงื˜ื™ื‘ื™ื™ื ืฉืœ ื”ืื•ื‘ื™ืงื˜ local. ื•ื›ืŸ ืื ื™ ืฆืจื™ืš ืœื”ื’ื™ื“ ืื™ื–ื” ืฉื“ื•ืช ืื ื™ ืจื•ืฆื”, ื•ื”ืžืฉืชื ื” others ืžืืคืฉืจ ืœื”ืขื‘ื™ืจ props ื”ืœืื” ืœืงื•ืžืคื•ื ื ื˜ื•ืช ื™ืœื“ื™ื ืฉืื ื™ ื™ื•ืฆืจ. ื™ื›ื•ืœื™ื ืœืฉื—ืง ืขื ื”ืงื•ืžืคื•ื ื ื˜ื” ื”ืื—ืจื•ื ื” ื‘ Playground ืฉืœื”ื ื‘ืงื™ืฉื•ืจ https://bit.ly/3toBdJC. ืกืš ื”ื›ืœ ื™ืฉ ืžืฉื”ื• ื™ืคื” ื‘ื’ื™ืฉื” ื”ืจื™ืืงื˜ื™ื‘ื™ืช ืฉืœ ืกื•ืœื™ื“ ื•ืจื•ื‘ ื”ืงื•ื“ ืฉื›ืชื‘ืชื™ ื‘ื• ืคืฉื•ื˜ ืขื‘ื“. ืื”ื‘ืชื™ ืืช ื”ื’ืžื™ืฉื•ืช ืฉืืคืฉืจ ืœื™ืฆื•ืจ ืžืฉืชื ื™ State ื’ื ืžื—ื•ืฅ ืœืงื•ืžืคื•ื ื ื˜ื•ืช ื•ื‘ืกืš ื”ื›ืœ ืืชืจ ื”ืชื™ืขื•ื“ ืฉืœื”ื ื•ื” Playground ืขื•ื‘ื“ื™ื ืžืžืฉ ื‘ืกื“ืจ. ืœืžื™ื“ืข ื ื•ืกืฃ ื•ืื™ื ืกื•ืฃ ืžืฉืื‘ื™ื ืขืœื™ื• ืžืžืœื™ืฅ ืœื—ื˜ื˜ ื‘ืจืฉื™ืžื” ื”ื–ืืช: https://github.com/one-aalam/awesome-solid-js.

ToCode
1 419
# ืฆืขื“ื™ื ืจืืฉื•ื ื™ื ืขื ืกื•ืœื™ื“ ืกื•ืœื™ื“ ื”ื™ื ืคืจื™ื™ืžื•ื•ืจืง ืจื™ืืงื˜ื™ื‘ื™ ืœืคื™ืชื•ื— ืฆื“ ืœืงื•ื— ืฉืœืงื— ื”ืฉืจืื” ืžืื•ื“ ื’ื“ื•ืœื” ืžืจื™ืืงื˜ ืžื‘ื—ื™ื ืช ื”ืชื—ื‘ื™ืจ, ืื‘ืœ ื”ื˜ืžื™ืข ืืช ื”ืจื™ืืงื˜ื™ื‘ื™ื•ืช ื‘ืฆื•ืจื” ื˜ื•ื‘ื” ื™ื•ืชืจ ืžืืฉืจ ืจื™ืืงื˜. ืืคืฉืจ ืœื—ืฉื•ื‘ ืขืœื™ื• ื›ืžื• ื”ื›ืœืื” ื‘ื™ืŸ ืจื™ืืงื˜ ืœืžื•ื‘ืืงืก, ืจืง ืขื ื”ืจื‘ื” ืคื—ื•ืช ืžื•ืฉื’ื™ื ืฉืฆืจื™ืš ืœื”ื›ื™ืจ. ื•ืžืื—ืจ ื•ืื ื™ ื—ื•ืฉื‘ ืฉื”ื“ืจืš ื”ื›ื™ ื˜ื•ื‘ื” ืœื“ื‘ืจ ืขืœ ืคืจื™ื™ืžื•ื•ืจืง ื”ื™ื ืœืจืื•ืช ืงื•ื“ ืฉื›ืชื•ื‘ ื‘ื• - ื”ื›ื ืชื™ ืœื›ื 3 ืชื•ื›ื ื™ื•ืช ื“ื•ื’ืžื” ืงื˜ื ื•ืช ืขื ืกื•ืœื™ื“ ืฉื™ืขื–ืจื• ืœื ื• ืœื”ื‘ื™ืŸ ืžื” ืžื™ื•ื—ื“ ื‘ื•. ## ืžื•ื ื” ืœื—ื™ืฆื•ืช ืชื•ื›ื ื™ืช ืจืืฉื•ื ื” ืฉื ืจืื” ื‘ืกื•ืœื™ื“ ื”ื™ื ื’ื ื”ืชื•ื›ื ื™ืช ื”ืจืืฉื•ื ื” ืฉืžื•ืคื™ืขื” ื‘ื˜ืžืคืœื™ื™ื˜ ื‘ืืชืจ ื” playground ืฉืœื”ื - ื•ื–ื” ืžื•ื ื” ืœื—ื™ืฆื•ืช:
import { render } from "solid-js/web";
import { createSignal } from "solid-js";

function Counter() {
  const [count, setCount] = createSignal(0);
  const increment = () => setCount(count() + 1);

  return (
    <button type="button" onClick={increment}>
      {count()}
    </button>
  );
}

render(() => <Counter />, document.getElementById("app"));
ืืชื ื™ื›ื•ืœื™ื ืœืคืชื•ื— ืื•ืชื• ื‘ Playground ื‘ืงื™ืฉื•ืจ https://bit.ly/3tlqP5r. ืขื›ืฉื™ื• ืœืงื•ื“: 1. ื”ืคื•ื ืงืฆื™ื” createSignal ืžื—ืœื™ืคื” ืืช useState. ื”ื™ื ืžื—ื–ื™ืจื” ืžืขืจืš ืฉืœ "ืขืจืš" ื•"ืคื•ื ืงืฆื™ื™ืช ืขื“ื›ื•ืŸ". ืขื“ ืคื” ืื™ืŸ ื”ืคืชืขื•ืช. 2. ื”ื‘ื“ืœ ื’ื“ื•ืœ ืจืืฉื•ืŸ ืžืจื™ืืงื˜ ืฉืื ื—ื ื• ื›ื‘ืจ ืจื•ืื™ื ื”ื•ื ืฉื”"ืขืจืš" ื”ื•ื ื‘ืขืฆื ืคื•ื ืงืฆื™ื”. ื‘ืฆื•ืจื” ื›ื–ืืช ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืืช ื”ื—ืชื™ืžื” ื”ื›ืคื•ืœื” ืฉืœ ื” setter ื•ืชืžื™ื“ ืžืฉืชืžืฉื™ื ื‘ืคื•ื ืงืฆื™ื™ืช ื” getter ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ืขืจืš ื”ืขื“ื›ื ื™. ื–ืืช ื”ืฉื•ืจื”:
const increment = () => setCount(count() + 1);
ืžืขื ื™ื™ืŸ ื’ื ืœืจืื•ืช ืื™ืš ืกื•ืœื™ื“ ืžืชืจื’ื ืืช ืงื•ื“ ื”ืงื•ืžืคื•ื ื ื˜ื” ืœืงื•ื“ JavaScript ืจื’ื™ืœ. ื‘ื ื™ื’ื•ื“ ืœ React ืฉืคืฉื•ื˜ ื”ื•ืคืš ื›ืœ ืืœืžื ื˜ jsx ืœืงืจื™ืื” ืœืคื•ื ืงืฆื™ื” createElement, ืกื•ืœื™ื“ ืžืคืฆืœ ืืช ื”ืงื•ื“. ื–ื” ื”ืชื•ื›ืŸ ืฉืžื•ืคื™ืข ื‘ื˜ืื‘ output ืฉืœ ืžื’ืจืฉ ื”ืžืฉื—ืงื™ื:
import { template, render, createComponent, delegateEvents, insert } from 'solid-js/web';
import { createSignal } from 'solid-js';

const _tmpl$ = template(`<button type="button"></button>`, 2);

function Counter() {
  const [count, setCount] = createSignal(0);

  const increment = () => setCount(count() + 1);

  return (() => {
    const _el$ = _tmpl$.cloneNode(true);

    _el$.$$click = increment;

    insert(_el$, count);

    return _el$;
  })();
}

render(() => createComponent(Counter, {}), document.getElementById("app"));

delegateEvents(["click"]);
ืื ื—ื ื• ืจื•ืื™ื ืฉืกื•ืœื™ื“ ื”ืคืจื™ื“ ื‘ื™ืŸ ื”ื—ืœืง "ื”ืงื‘ื•ืข" ื‘ DOM - ื–ื” ืžื” ืฉืขื•ื‘ืจ ืœืคื•ื ืงืฆื™ื” template ืฉืœื”ื, ืœื‘ื™ืŸ ื”ื—ืœืง ื”ืžืฉืชื ื” ืฉื–ื” ืžื” ืฉืขื•ื‘ืจ ืœืคื•ื ืงืฆื™ื” insert. ื”ืคื™ืฆื•ืœ ื”ื–ื” ื”ื•ื ืฉืžืืคืฉืจ ืœืกื•ืœื™ื“ ืœืขื“ื›ืŸ ืจืง ืืช ื”ื—ืœืงื™ื ื‘ DOM ืฉื”ืฉืชื ื• ื‘ืœื™ ืฉื™ืฆื˜ืจืš ืœื”ืฉื•ื•ืช ื‘ื™ืŸ ืขืฆื™ DOM ื•ื™ืจื˜ื•ืืœื™ื™ื. ## ื—ืžืฉ ืชื™ื‘ื•ืช ื˜ืงืกื˜ ืžืกื•ื ื›ืจื ื•ืช ื”ื“ื•ื’ืžื” ื”ืฉื ื™ื” ืฉืœ ืกื•ืœื™ื“ ื›ื‘ืจ ืžืชื—ื™ืœื” ืœื”ืคืชื™ืข. ื”ืงื•ื“ ื”ื‘ื ืžืฆื™ื’ 5 ืชื™ื‘ื•ืช ื˜ืงืกื˜ ืžืกื•ื ื›ืจื ื•ืช, ื›ืœื•ืžืจ ืฉื™ื ื•ื™ ื”ื˜ืงืกื˜ ื‘ืื—ืช ื”ืชื™ื‘ื•ืช ื™ืขื“ื›ืŸ ืืช ื›ืœ ื”-5:
import { render } from "solid-js/web";
import { createSignal, For } from "solid-js";
const range = (n: number) => (new Array(n)).fill(null).map((_, i) => i);

const [text, setText] = createSignal("");

function Text() {
  function handleInput(e: InputEvent) {
    const input = e.target as HTMLInputElement;
    setText(input.value)
  }

  return (
    <input type="text" value={text()} onInput={handleInput} />
  );
}

function App() {
  const n = 5;

  return (
    <div>
    <p>n={n}</p>
    <For each={range(n)}>
      {(item, index) => <Text />}
    </For>
    </div>
  )
}

render(() => <App />, document.getElementById("app"));
ื”ืคืชืขื” ืจืืฉื•ื ื” ืฉืื ื—ื ื• ืจื•ืื™ื ื‘ืงื•ื“ ื”ื™ื ืฉื”ื•ืฆืืชื™ ืืช createSignal ื”ื—ื•ืฆื” ืžื”ืงื•ืžืคื•ื ื ื˜ื•ืช ื•ื”ืคื›ืชื™ ืืช ื”ืชื•ืฆืื” ืฉืœื• ืœืžืฉืชื ื” ื’ืœื•ื‘ืืœื™. ืืช ื–ื” ืื™ ืืคืฉืจ ื”ื™ื” ืœืขืฉื•ืช ื‘ืจื™ืืงื˜ - ื›ื™ useState ืฉืœ ืจื™ืืงื˜ ื—ื™ื™ื‘ ืœื”ื™ื›ืชื‘ ื‘ืชื•ืš ืงื•ืžืคื•ื ื ื˜ื”. ื”ื“ื‘ืจ ื”ื›ื™ ืงืจื•ื‘ ื‘ืจื™ืืงื˜ ืœืžื” ืฉื›ืชื‘ืชื™ ื›ืืŸ ื™ื”ื™ื” ืงื•ื ื˜ืงืกื˜, ืื‘ืœ ืจื•ื‘ ืžืชื›ื ืชื™ ืจื™ืืงื˜ ืคืฉื•ื˜ ื™ื’ื“ื™ืจื• ืืช ื” State ื‘ืงื•ืžืคื•ื ื ื˜ื” App ื•ื™ืขื‘ื™ืจื• ืื•ืชื• ื‘ืชื•ืจ Property ืœื™ืœื“ื™ื. ื—ื“ื™ ื”ืขื™ืŸ ื‘ื™ื ื™ื›ื ื™ื›ื•ืœื™ื ืœืจืื•ืช ื’ื ืฉืฉื ื”ืื™ืจื•ืข ืฉืœ ื”ืฉื™ื ื•ื™ ื”ืฉืชื ื” ืž change ืœ input ื›ื“ื™ ืœื™ื™ืฉืจ ืงื• ืขื ืงื•ื“ DOM ืกื˜ื ื“ืจื˜ื™:
<input type="text" value={text()} onInput={handleInput} />
ื•ืื•ืœื™ ื”ืฉื™ื ื•ื™ ื”ื›ื™ ื’ื“ื•ืœ ืžืจื™ืืงื˜ ื–ื” ื”ืœื•ืœืื”:
<For each={range(n)}>
  {(item, index) => <Text />}
</For>

ToCode
1 419
# ื˜ื™ืค ื“ื•ืงืจ - ื ื™ืงื•ื™ volumes ืฉืื™ื ื ื‘ืฉื™ืžื•ืฉ ืืช ื”ืคืงื•ื“ื” ื”ืžื•ืคืœืื” ื”ื‘ืื” ื’ื™ืœื™ืชื™ ืจืง ืœื ืžื–ืžืŸ, ื•ื”ื™ื ื›ื‘ืจ ื”ืฆืœื™ื—ื” ืœืคื ื•ืช ืœื™ 30 ื’'ื™ื’ื” ื‘ื“ื™ืกืง ื‘ืœื™ ืœื”ืชืืžืฅ. ื”ื™ื ื ืงืจืืช:
$ docker volume prune
ื‘ืขื‘ื•ื“ื” ืขื ื“ื•ืงืจ ื• docker compose ื ื•ืฆืจื™ื ื›ืœ ื”ื–ืžืŸ Volumes, ืื‘ืœ ืื•ืชื Volumes ืœื ื ืžื—ืงื™ื ื‘ืขื‘ื•ื“ื” ื”ืฉื•ื˜ืคืช (ืืœื ืื ื›ืŸ ืžื—ืงืชื ืื•ืชื ื‘ืฆื•ืจื” ื™ื–ื•ืžื”). ื‘ืžื™ื•ื—ื“ ืžืขืฆื‘ื ื™ื ื” Anonymous Volumes, ื›ืœื•ืžืจ Volumes ืขื ืฉื ืืงืจืื™ ืฉื ื•ืฆืจื™ื ืžื”ื•ืจืืช Volume ื‘ Dockerfile ืฉืœ ืื™ืžื’'ื™ื ืžืกื•ื™ืžื™ื, ื•ืืชื ืืคื™ืœื• ืœื ื™ื•ื“ืขื™ื ืฉื™ืฆืจืชื ืื•ืชื. ื”ืคืงื•ื“ื” prune ืžื•ื—ืงืช ื‘ืžื›ื” ืื—ืช ืืช ื›ืœ ื” Volumes ืฉืื™ื ื ื‘ืฉื™ืžื•ืฉ, ื›ืœื•ืžืจ Volumes ืฉืืฃ ืงื•ื ื˜ื™ื™ื ืจ ืœื ืžืฉืชืžืฉ ื‘ื”ื. ื”ื ื” ื”ืคืœื˜ ืฉื”ื•ืคื™ืข ืืฆืœื™ ื‘ืื—ืช ื”ื”ืคืขืœื•ืช:
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
af3aae34cdad2d27ce238052ad76066f5007a994afd8e43e630ed1e065e1adc2
1bd5b35c4b045efcedab000946b4b0cc47a31c6ab9797aa7c15abe68a187dd24
215e9ed82a1248713a37856d91bef06322a0aeba29983bb3bda73c6d3474975f
81800e9125a43c536733d540776576c459857fa161aad9a022089ce9f29f4b39
b86e5619f32e50c1750d06463f93f1222b0a1cb654961b03eb05f693602036d5
21053b79f98090cef2ed0d2e370aab1c87902712554fe106fcdf7776ad49e432
36da000251fd03a84d7d7aad5d1387b88067993d4db37f93be101ee6b39a8fa0
7f46b0540d958befaaa9eba7f546f58ac345d43aca76d78c82fd6fa0f2310a9d
0503e2f1595109e47fe34520f50d0cae62bf61829b110329b1736dead696a36a
38487902f058dd998a018d694c6a0415df30f1764caccd06aaefed7bcdc7f4f9
9262a4d3d727b2ed8ec6d1eb53f9d12666492a31b7b156bdbf25c2cc4f9e72ba
85acc9837d945b8da346e0a3005a41f25f11bbe6dba3254acf0b050ea760f99b
f84ef10a22b6c39e4b500fff3dd2ab41a47d9c3c16521c72f51accf3ee9ae733
25b3e355acae3df348d705e90b932b2152e42c74a2e522352244b7a461a7854b
c887268872c39fff371c05f59989d35e0ed2662c784fde35c65a31622ef3cb90
3a69d7d9f5e96c566f39aedc8b3fc6c07d8bea3beebd47c3c624cc5e4dae593b
491272fb1d91144b92ad990edb92cf8d15a7ebfbf26d7b8d4bbc2c3a077c2166
b75c33d193925f9cbd059e863eb9e44e0612fd5614716eac7de4cbc5847dfbd8

Total reclaimed space: 2.519GB
ื‘ื’ืœืœ ืฉืื ื™ ืžืฉืชื“ืœ ืœื”ื™ื•ืช ืžืกื•ื“ืจ ื•ืœืžื—ื•ืง Volumes ืื—ืจื™ ืฉืื ื™ ื™ื•ืฆืจ ืื•ืชื, ืืคืฉืจ ืœืจืื•ืช ืฉืจื•ื‘ ื” Volumes ืฉ prune ืžื—ืง ื”ื™ื• ื‘ื›ืœืœ ืื ื•ื ื™ืžื™ื™ื. ื–ื” ืœื ื”ืคืจื™ืข ืœื”ื ืœืชืคื•ืก 2.5 ื’'ื™ื’ื” ืฉืœ ืžืงื•ื ืขืœ ื”ืœืคื˜ื•ืค ืฉืœื™ - ืžืงื•ื ืฉืขื›ืฉื™ื• ืื ื™ ื™ื›ื•ืœ ืœืฉืžื•ืจ ื‘ื• ื“ื‘ืจื™ื ื—ืฉื•ื‘ื™ื ื™ื•ืชืจ ื›ืžื• ืชืžื•ื ื•ืช ืฉืœ ื—ืชื•ืœื™ื.