
ãã®æ¥ã®ç°å¢æ§ç¯å°çã«ãµãšãã©ã ã Docker åå¿è ã®åãã ãã£ã 1 ã€ã®ãã¡ã€ã«ã§æªæ¥ã®èªåãæã£ãç©èªã
ãåã®ç°å¢ã§ã¯åããã®ã«âŠã
ãã®åªãã®èšèããããªãã¯äœåºŠãèãããããããã¯å£ã«ãããããããšãããã§ããããïŒ
ã¯ã©ã€ã¢ã³ãã«çŽåããææç©ãåããªããæ°ããããŒã ã«åå ããã¡ã³ããŒã®ããœã³ã³ã§ããªããã¢ããªãèµ·åããªããå幎åã®èªåã®ãããžã§ã¯ããè§Šãããšããããã©ã€ãã©ãªã®ããŒãžã§ã³ãå€ãã£ãŠããŠãããåãããªãââã
éçºè ãªã誰ããäžåºŠã¯çµéšããã§ãããããã®æªå€¢ã®ãããªãç°å¢æ§ç¯å°çããåããŸãããã®å°çã®æ¥ç«ã«ãé·å¹ŽçŒããç¶ããŠããäžäººã§ããã
æ°ãããããžã§ã¯ããå§ãŸããã³ã«ç¹°ãè¿ããããOS ããšã®æé æžãšã®ã«ããã£ããã©ã€ãã©ãªã®äŸåé¢ä¿ã«é ãæ©ãŸãããšã©ãŒã¡ãã»ãŒãžã®è§£èªã«äœæéãè²»ããæ¥ã ãããã¯ãåµé çã§ããã¹ãéçºã®æéãšã¯ããé¢ãããæ¶èããã ãã®äžæ¯ãªäœæ¥ã§ããã
ãããããããªæãã¯ããããªãã
ãã®äžå¿ã§åãæã䌞ã°ããã®ãããDockerãã§ãããåœæã¯ãŸã ã³ã³ããæè¡ã®é»ææããäœããé£ãããã ããèªåã«ã¯ãŸã æ©ãããšæ¬é ããŠããããã®ã¯ãžã©ã®ã¢ã€ã³ã³ã®ããŒã«ã§ãã
æ£çŽã«åçœããŸããåãæåã¯æ«æããããŸãããèãæ £ããªãå°éçšèªãçã£é»ãªã¿ãŒããã«ç»é¢ãããŸããªãã®ããã«èŠããã³ãã³ãã®æ°ã âŠâŠã
ããããããäžã€ã®ãéæ³ã®ãã¡ã€ã«ãã®ååšãç¥ã£ããšããåã®éçºè 人çã¯åçã«å€ãã£ãã®ã§ãã
ããã¯ãDocker åå¿è ã®åãããã£ãäžã€ã®ãã¡ã€ã«ã§ãç°å¢æ§ç¯å°çãããçéããæªæ¥ã®èªåãããããŠããŒã ãæãåãæã«å ¥ããç©èªã§ãã
ããããªããä»ãåãå°çã®å ¥ãå£ã§ç«ã¡å°œãããŠããã®ãªãããã®è©±ããããããæãåºãããã®å°ããªå°å³ã«ãªãããšãé¡ã£ãŠããŸãã

ãªãã éçºè ã¯ç°å¢æ§ç¯ã§ç²åŒããã®ãïŒ
ç©èªãå§ããåã«ãåãã¡ããªãããã»ã©ãŸã§ã«ãç°å¢ãã«èŠãããããŠããã®ããå°ãã ãæ¯ãè¿ã£ãŠã¿ãããšæããŸãã
åãã¡ã®ä»äºã¯ãå®ã«å€ãã®ãåå°ãã®äžã«æãç«ã£ãŠããŸãã
ð OS ïŒãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒ:
WindowsãmacOSãLinuxâŠ
ð ããã°ã©ãã³ã°èšèª:
Node.jsãPHPãPythonãRubyâŠ
ð ããŒã¿ããŒã¹:
MySQLãPostgreSQLâŠ
ð åçš®ã©ã€ãã©ãªãããŒã«:
ããããã«ç¡æ°ã®ããŒãžã§ã³âŠ
ãããã®çµã¿åããã¯ããŸãã«å€©æåŠçãªæ°ã«ãªããŸãããããŠããã£ãäžã€ã§ãæ¯è»ãåã¿åããªããã°ãã¢ããªã±ãŒã·ã§ã³ã¯æ£ããåããŠãããŸããã
ãã€ãŠã®åãã¡ã¯ããã®è€éæªå¥ãªçµã¿åããããå人ã®ããœã³ã³äžå°äžå°ã®äžã§ãæäœæ¥ã§åçŸããããšããŠããŸãããããã¯ãŸãã§ã粟å¯ãªèšèšå³ããèšæ¶ãšåã ããé Œãã«ãæ¯åãŒãããçµã¿ç«ãŠçŽããããªãã®ã§ãã
ãA ããã® Mac ã§ã¯åããã©ãB ããã® Windows ã§ã¯åããªãã
ãæ¬çªãµãŒããŒãšéçºç°å¢ã® PHP ã®ããŒãžã§ã³ãéã£ãŠãåããªãã
ãå幎åã®ãããžã§ã¯ããåããããã®ã«ãNode.js ã®ããŒãžã§ã³ãå€ãããŠåããªãã
ãããªæ²åãèµ·ããã®ã¯ããã¯ãå¿ ç¶ã ã£ãã®ã§ãããã®æ ¹æ¬çãªåé¡ã解決ããªãéããåãã¡ã¯æ°žé ã«ç°å¢æ§ç¯ã®äº¡éã«è¿œãããããç¶ããéåœã§ããã

Docker ãšã®åºäŒãã ãããŠæ«æ
åã Docker ã®ååšãç¥ã£ãã®ã¯ãããªãŒã©ã³ã¹ãšããŠæŽ»åãå§ããŠæ°å¹Žãçµã£ãé ã§ããã
æ§ããšæåã®å£
ãã©ããªç°å¢ã§ããå
šãåãããã«ã¢ããªãåããããããã
ããã³ã³ããããšãããã®ã§ãéçºç°å¢ãäžžããšããã±ãŒãžåã§ãããããã
ãã®ã³ã³ã»ããã¯ããŸãã«åãé·å¹Žæ±ããŠããåé¡ã解決ããŠãããéæ³ã®ããã«èãããŸãããããããææ°æã ãšå ¥éæžãæã«åã£ãåãåŸ ã£ãŠããã®ã¯ãååãå£ã§ããã
ð ã€ã¡ãŒãžïŒ ã³ã³ããïŒ ã¬ãžã¹ããªïŒ:
èãæ £ããªãåèªã®ãªã³ãã¬ãŒãã
ð DockerfileïŒ:
äœããèšå®ãã¡ã€ã«ãæžãããããã©ããäœæ³ãå šãããããªãã
ð ã³ãã³ãå€ããåé¡:
docker run, docker build, docker ps ⊠èŠããããšãå€ãããã
ããŸããªãã®ãããªã³ãã³ããæã¡èŸŒã¿ããšã©ãŒãåºãŠã¯ Google ã§æ€çŽ¢ããããããªããšãç¹°ãè¿ããŠãããã¡ã«ãåã¯ãã£ããç²åŒããŠããŸããŸããã
ããã£ã±ããåã«ã¯ãŸã æ©ãã£ããã âŠã
ãä»ã®ããæ¹ã§ãããªããšãã¯ãªã£ãŠãããâŠã
ããèªåã«èšãèš³ãããŠãåã¯äžåºŠãã¯ãžã©ã®ã¢ã€ã³ã³ããéãã«ç®ãããããã®ã§ãã
転æ©ãšãªã£ã ããã£ã 1 ã€ã®ãã¡ã€ã«ã
æ°ã¶æåŸãããã¯ã©ã€ã¢ã³ããšã®ãããžã§ã¯ãã§ãåã¯åã³ Docker ãšåãåãããšã«ãªããŸãããã®ãããžã§ã¯ãã§ã¯ãããŒã éçºã®æšæºãšã㊠Docker ã®å©çšã矩åä»ããããŠããŸããã
ããŸãããã®å°çãå§ãŸãã®ãâŠã
æé¬±ãªæ°åã§ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒããããŠã³ããŒãããåãèŠã€ããã®ã¯ãdocker-compose.yml ãšããããã£ãäžã€ã®ãã¡ã€ã«ã§ããã
ãªãŒããŒããèšãããã®ã¯ããã£ãäžèšã
ãã¿ãŒããã«ã§ãdocker-compose up ã£ãŠæã£ãŠãã ããã
åä¿¡åçã§ã³ãã³ããå®è¡ãããšãäœãèµ·ãã£ããšæããŸããïŒ
ã¿ãŒããã«ã«ãã°ãæµãå§ããWeb ãµãŒããŒãèµ·åããããŒã¿ããŒã¹ãæ§ç¯ãããå¿ èŠãªã©ã€ãã©ãªãå šãŠã€ã³ã¹ããŒã«ããããå®ç§ãªéçºç°å¢ããåã®ç®ã®åã«çŸããã®ã§ãã
æ°æéããããæã«ã¯æ°æ¥ããã£ãŠããç°å¢æ§ç¯ãããã£ãäžã€ã®ã³ãã³ãã§ããããæ°åã§å®äºããŠããŸã£ãã
åã¯ãé·ã«æããããããªè¡æãåããŸããã
ãããã âŠïŒããããããåãæ±ããŠãããã®ã ïŒã
ãã® docker-compose.yml ããããåãç°å¢æ§ç¯å°çããæãåºããŠããããéæ³ã®ãã¡ã€ã«ãã ã£ãã®ã§ãã

åã®ãããã Docker å ¥é
ãã®è¡æçãªäœéšãããå㯠Dockerãç¹ã« docker-compose ã«å€¢äžã«ãªããŸããããããŠã詊è¡é¯èª€ã®æ«ã«ãã©ãçããã®ãããããªãŒã©ã³ã¹ã®ããã®ãããã Docker 掻çšè¡ãã§ãã
ããã§ã¯ãé£ãã話ã¯äžåããŸããããã€ãŠã®åã®ãã㪠Docker åå¿è ã§ããããã«ç䌌ã§ãããæå°éã®ã¹ãããã ããã玹ä»ããŸãã
ããŽãŒã«ã ç°¡å㪠Web ã¢ããªã Docker ã§åãã
ä»åã¯ãNode.js ã䜿ã£ãç°¡å㪠Web ãµãŒããŒããDocker äžã§åãããŠã¿ãŸãããã
æçµçã«ã¯ãdocker-compose up ãšããã³ãã³ãäžçºã§ã誰ã§ããã©ããªããœã³ã³ã§ãããã® Web ãµãŒããŒãèµ·åã§ããç¶æ ãç®æããŸãã
ãã¹ããã 1ã ãããžã§ã¯ãã®æºå
ãŸããäœæ¥çšã®ãã©ã«ãïŒäŸãã° my-docker-appïŒãäœãããã®äžã« 2 ã€ã®ãã¡ã€ã«ãçšæããŸãã
app.js (Web ãµãŒããŒæ¬äœ)
package.json (ãããžã§ã¯ãæ å ±ãšã䜿ãã©ã€ãã©ãªã®å®çŸ©)
app.js
const http = require('http');
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, Docker!\n');
});
server.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});ããã¯ããHello, Docker!ããšè¡šç€ºããã ãã®ãããã·ã³ãã«ãª Web ãµãŒããŒã§ãã
package.json
{
"name": "my-docker-app",
"version": "1.0.0",
"description": "A simple Node.js app for Docker.",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC"
}npm init -y ã³ãã³ãã§äœããããããªãåºæ¬çãªãã¡ã€ã«ã§ãã
ãã¹ããã 2ã Dockerfile ãšããåã®èšèšå³ãæžã
次ã«ãåãã¡ã® Web ãµãŒããŒïŒã³ã³ããïŒã®ãèšèšå³ããšãªããDockerfile ãšããååã®ãã¡ã€ã«ãäœããŸããããã¯ããã©ã㪠OS ãåå°ã«ããŠãã©ããªèšèªãã€ã³ã¹ããŒã«ããŠãã©ããã£ãŠã¢ããªãåãããããæç€ºãããéæ³ã®ã¬ã·ãã®ãããªãã®ã§ãã
Dockerfile
# 1. åå°ãšãªãOSãèšèªãéžã¶
FROM node:18-alpine
# 2. äœæ¥ããå Žæãäœã
WORKDIR /app
# 3. å¿
èŠãªãã¡ã€ã«ãã³ããŒãã
COPY package*.json ./
# 4. å¿
èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãã
RUN npm install
# 5. ã¢ããªã®ãœãŒã¹ã³ãŒããå
šéšã³ããŒãã
COPY . .
# 6. ãã®ã³ã³ãããå€éšã«å
¬éããããŒããæå®ãã
EXPOSE 3000
# 7. æåŸã«ããã®ã³ã³ãããèµ·åãããšãã«å®è¡ããã³ãã³ã
CMD [ "npm", "start" ]äžè¡ãã€èŠãŠãããŸãããã
1ïžâ£ FROM node:18-alpine:
ãNode.js ã®ããŒãžã§ã³ 18 ãå ¥ã£ãããšã£ãŠã軜ã OSïŒAlpine LinuxïŒãåå°ã«ããŸãããšããæå³ã§ãã
2ïžâ£ WORKDIR /app:
ã³ã³ããã®äžã« /app ãšããäœæ¥ãã©ã«ããäœããŸãã
3ïžâ£ COPY package*.json ./:
ãŸã package.json ã ããã³ããŒããŸãã
4ïžâ£ RUN npm install:
npm install ãå®è¡ããŠãã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã
5ïžâ£ COPY . .:
æ®ãã®ãã¡ã€ã«ïŒapp.js ãªã©ïŒãå šéšã³ããŒããŸãã
6ïžâ£ EXPOSE 3000:
ããã®ã³ã³ãã㯠3000 çªããŒãã䜿ããŸããããšãã宣èšã§ãã
7ïžâ£ CMD [ "npm", "start" ]:
ãã®ã³ã³ãããèµ·åãããšãã«ãnpm startïŒã€ãŸã node app.jsïŒãå®è¡ããŸãã
ããã ãã§ãããã£ãããã ãã§ãåãã¡ã®ã¢ããªãåããããã®ç°å¢ã®èšèšå³ã宿ããŸããã
ãã¹ããã 3ã éæ³ã®ãã¡ã€ã« docker-compose.yml ãæžã
ãããããããçæã¡ã®ç»å Žã§ããè€æ°ã®ã³ã³ããïŒäŸãã° Web ãµãŒããŒãšããŒã¿ããŒã¹ïŒããŸãšããŠç®¡çããã³ãã³ãäžçºã§èµ·åãããããã®éæ³ã®ãã¡ã€ã«ãdocker-compose.yml ãæžããŸãã
docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modulesãããã·ã³ãã«ã§ããã
1ïžâ£ version: '3.8':
docker-compose ã®ããŒãžã§ã³æå®ã§ãã
ããŸããªãã ãšæã£ãŠãã ããã
2ïžâ£ services: :
ããã«ãåãããããµãŒãã¹ïŒã³ã³ããïŒãå®çŸ©ããŠãããŸãã
3ïžâ£ app: :
ãappããšããååã®ãµãŒãã¹ãå®çŸ©ããŸãã
ååã¯äœã§ã OK ã§ãã
4ïžâ£ build: .:
ãã«ã¬ã³ããã£ã¬ã¯ããªã«ãã Dockerfile ã䜿ã£ãŠãã³ã³ããã®èšèšå³ïŒã€ã¡ãŒãžïŒãäœã£ãŠãããšããæå³ã§ãã
5ïžâ£ ports: - "3000:3000":
ãåã®ããœã³ã³ã® 3000 çªããŒããšãã³ã³ããã® 3000 çªããŒããç¹ãã§ãããšããæå³ã§ãã
ããã«ããããã©ãŠã¶ãã http://localhost:3000 ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
6ïžâ£ volumes: ...:
ãããå°ãéèŠã§ãããåã®ããœã³ã³ã®ãã¡ã€ã«ãšãã³ã³ããã®äžã®ãã¡ã€ã«ãåæããŠãããšããæå³ã§ãã
ããããããšã§ãapp.js ãç·šéãããšãã«ããã¡ãã¡ã³ã³ãããäœãçŽããªããŠããããã«å€æŽãåæ ãããããã«ãªããŸãã
ãã¹ããã 4ã éæ³ã®åªæãå±ãã
ããã§ãå
šãŠã®æºåãæŽããŸããã
ãããžã§ã¯ããã©ã«ãïŒmy-docker-appïŒã«ã¯ãä»ã4 ã€ã®ãã¡ã€ã«ãããã¯ãã§ãã
ð app.js
ð package.json
ð Dockerfile
ð docker-compose.yml
ãããã¿ãŒããã«ã§ããã®éæ³ã®åªæãå±ããŸãããã
docker-compose upååã¯å°ãæéãããããŸãããDocker ã奿°ã«åããŠãèšèšå³éãã«ã³ã³ãããçµã¿ç«ãŠãŠãããŠãã蚌æ ã§ãã
Server running at http://localhost:3000/ãã®ã¡ãã»ãŒãžã衚瀺ãããããæåã§ãïŒ
ãã©ãŠã¶ã§ http://localhost:3000 ãéããŠã¿ãŠãã ããã
ãHello, Docker!ããšè¡šç€ºãããŠããã¯ãã§ãã
ããã§ãšãããããŸãïŒ
ããªãã¯ä»ãç°å¢æ§ç¯å°çããæãåºãããã®ã倧ããªäžæ©ãèžã¿åºããŸããã

Docker ãåã«ãããããŠãããæ¬åœã®äŸ¡å€
docker-compose up ã®æåãç¥ã£ãŠãããåã®éçºã¹ã¿ã€ã«ã¯äžå€ããŸãããããã¯åã«ãç°å¢æ§ç¯ã楜ã«ãªã£ãããšããã¬ãã«ã®è©±ã§ã¯ãããŸããã
ãäŸ¡å€ 1ã æªæ¥ã®èªåãžã®æé«ã®èŽãç©
äžçªå€§ããªå€åã¯ããæªæ¥ã®èªåãã«å¯Ÿããèãæ¹ã§ãã
å幎åŸãäžå¹ŽåŸãåã¯ãã®ãããžã§ã¯ãã®ããšãã»ãšãã©å¿ããŠããã§ãããããããããã® Dockerfile ãš docker-compose.yml ãããã°ãåã¯ã³ãã³ãäžçºã§å¯žåéãã¬éçºç°å¢ãå®ç§ã«åçŸã§ããã®ã§ãã
ãã¯ããéå»ã®èªåã®ã³ãŒãã«æ©ãŸãããããšã¯ãããŸãããç°å¢æ§ç¯ã¯ãæªæ¥ã®èªåãžã®ãåªãããã§ãããã眮ãæçŽããªã®ã§ãã
ãäŸ¡å€ 2ã åã®ç°å¢ã§ã¯âŠããã®è§£æŸ
ã¯ã©ã€ã¢ã³ããããŒã ã¡ã³ããŒãšã®ããåãããåçã«ã¹ã ãŒãºã«ãªããŸããã
ããã®ãããžã§ã¯ãããé¡ãããŸãã
ãã¯ãã docker-compose up ããã ãã§ãã
ãæ°ããã¡ã³ããŒãå
¥ããŸããã
ã倧äžå€«ã§ãã docker-compose up ããã°ãããã«éçºã«åå ã§ããŸãã
OS ã®éãããã€ã³ã¹ããŒã«ãããŠããã©ã€ãã©ãªã®ããŒãžã§ã³ãããã¯ãé¢ä¿ãããŸãããå šå¡ãåããã³ã³ããããšããè¹ã«ä¹ã£ãŠããã®ã§ãããããåã®ç°å¢ã§ã¯åããã®ã«âŠããšããæ²åã¯ãããäºåºŠãšèµ·ãããªãã®ã§ãã
ãäŸ¡å€ 3ã åµé çãªä»äºãžã®éäž
ãããŠäœãããç°å¢æ§ç¯ãšããäžæ¯ãªäœæ¥ããè§£æŸãããããšã§ãåã¯æ¬æ¥ããã¹ãã ã£ãåµé çãªä»äºã«ãããå€ãã®æéãšãšãã«ã®ãŒã泚ããããã«ãªããŸããã
æ°ããæ©èœãèãããã³ãŒãã®å質ãé«ããããŠãŒã¶ãŒã®äœéšãããè¯ãããã
Docker ã¯ãåããç¡é§ãªã¹ãã¬ã¹ã奪ãå»ããéçºè ãšããŠã®ãæ ç±ããåçãããŠããããæ©äººã®ãããªååšãªã®ã§ãã

ãããã«
ããããã€ãŠã®åã®ããã«ãããªããä»ãç°å¢æ§ç¯ã®è€éãã«å¿ãæããããã«ãªã£ãŠããã®ãªããã©ããæãåºããŠãã ããã
ãã£ã 2 ã€ã®ãã¡ã€ã«ãDockerfile ãš docker-compose.yml ããããªãããã®å°çããæãåºããŠããããããããŸããã
æåã¯é£ããæãããããããŸãããã§ãã仿¥ã玹ä»ãããããã ãªæ§æããã§å€§äžå€«ã§ãããŸãã¯èªåã®å°ããªãããžã§ã¯ãã§ãdocker-compose up ã®æåãå³ãã£ãŠã¿ãŠãã ããã
ç°å¢æ§ç¯ã¯ããã¯ãéçºè ã®ãä»äºãã§ã¯ãããŸãããããã¯ãåãã¡ããã£ãšåµé çã«ãªãããã«ãè³¢ããèªååããã¹ããã®ãªã®ã§ãã
ãããããªããäžç·ã«ããã®æ¥ã®ç°å¢æ§ç¯å°çã«ãµãšãã©ãåããæªæ¥ã®èªåã«æè¬ããããæ°ããäžæ©ãèžã¿åºããŠã¿ãŸãããïŒ
ã²ãšãããš
Dockerããããã§ããã§ããããïŒãé»ãç»é¢ã¢ã¬ã«ã®ãŒãã®æ¹ã«ã¯ãå°ãé£ããèŠãããããããŸããã
ã§ããäžåºŠãã®äŸ¿å©ããç¥ã£ãŠããŸããšããã Docker ãªãã®éçºãªããŠèããããªããªããŸããã
ãã®èšäºã§ã¯ãæ¬åœã«åºæ¬çãªéšåãã玹ä»ã§ããŸããã§ããããDocker ã®äžçã¯ãã£ãšå¥¥æ·±ããããŒã¿ããŒã¹ãšã®é£æºããæ¬çªç°å¢ãžã®ãããã€ãªã©ããããããšã¯ç¡éã«åºãã£ãŠããŸãã
ãããããã£ãšå ·äœçãªäœ¿ãæ¹ãç¥ãããããèªåã®ãããžã§ã¯ãã«ã©ãå°å ¥ããã°ãããåãããªãããšãã£ãæ©ã¿ãããã°ããã²åã®éå¶ããã³ãã¥ããã£ãäœæŠäŒè°å®€ãã§å£°ããããŠãã ããã
ããã§ã¯ããããªé¢šã«åãå®éã«äœ¿ã£ãŠããæè¡çãªããŠããŠããããªãŒã©ã³ã¹ãšããŠçãæãããã®æ³¥èãç¥æµããæãã¿ãªãå ±æããŠããŸãã
ããªããã€ãŸãããŠãããã®åé¡ããåã仲éãšãªãããã£ãšè§£æ±ºã®ç³žå£ãèŠã€ããã¯ãã§ãã
ãããã³ãã³ãäžçºã§ãæ°ããäžçã®æãéããŠã¿ãŸãããïŒ
