๐Ÿณdocker๐Ÿณ

์ด๋Œ€ํ˜•ยท2023๋…„ 5์›” 18์ผ

docker

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

docker ์™œ์”€๐Ÿค”

  • ์„œ๋ฒ„๋งˆ๋‹ค ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ๊ฐœ๋ฐœํ™˜๊ฒฝ์ด ๋‹ค ๋‹ค๋ฅด๊ธฐ๋•Œ๋ฌธ์— ํ•„์š”ํ•จ

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“ ๊ฒƒ์„ ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅ์‹œ์ผœ๋†“๋Š”๊ฐœ๋…

  • docker file์„ ๋งŒ๋“ค์–ด์•ผํ•˜๊ณ  ์ด๊ฒƒ์„ ์ด์šฉํ•ด image๋ฅผ ๋งŒ๋“ค๊ณ  image๋ฅผ ์ด์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™์‹œํ‚จ๋‹ค

  • docker file = ์–ด๋–ค dependency๋‚˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์–ด๋–ป๊ฒŒ๊ตฌ๋™ํ•˜๋Š”์ง€ script ๋“ฑ๋“ฑ ํฌํ•จ

  • image = ์‹คํ–‰๋˜๊ณ ์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ์Šค๋ƒ…์ƒทํ•ด์„œ ์ €์žฅํ•ด๋‘ 

  • container = ๊ณ ๋ฆฝ๋œํ™˜๊ฒฝ์—์„œ image๋ฅผ์ด์šฉํ•ด์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•จ

ex) simple ์˜ˆ์ œ ( node.js ์‚ฌ์šฉ )

  1. ๋„์ปค์„ค์น˜ https://www.docker.com/
  2. vscode ์‚ฌ์šฉ์‹œ docker extension ์„ค์น˜ํ•ด๋‘๋ฉด ์ข‹์Œ
  3. npm init -y ๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์ ํŠธ์ดˆ๊ธฐํ™”
  4. npm i express ๋กœ ์‹ฌํ”Œํ•œ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ์ƒ์„ฑ
  5. index.js ํŒŒ์ผ ์ƒ์„ฑ
-index.js-
const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('๐Ÿณ Dream Coding in Docker! ๐Ÿณ');
});

app.listen(80, () => console.log('Server is running ๐Ÿค–'));

6.Dockerfile ์ƒ์„ฑ

Dockerfile - ํŒŒ์ผ์ด๋ฆ„์ž„ - 

FROM node:16-alpine

WORKDIR /app

COPY package.json package-lock.json ./

RUN npm ci

COPY index.js .

ENTRYPOINT [ "node", "index.js" ]
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋ณธ์ด๋ฏธ์ง€๋ฅผ fromํ•ด์™€์„œ ์‚ฌ์šฉ node์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” node:16-alpine ๋ฆฌ๋ˆ…์Šค ์ด๋ฏธ์ง€ ์‚ฌ์šฉ

  • WORKDIR /app = ์ปจํ…Œ์ด๋„ˆ ๊ฒฝ๋กœ์•ˆ์—์„œ /app ํด๋”์•ˆ์— ํ”„๋กœ์ ํŠธ๊ด€๋ จํŒŒ์ผ์„ copy ํ•˜๊ฒ ๋‹ค

  • ๋„์ปคํŒŒ์ผ์€ ๋ ˆ์ด์–ด์‹œ์Šคํ…œ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ๋นˆ๋ฒˆํžˆ ๋ณ€ํ•˜๋Š” ํŒŒ์ผ์„ ๋‚˜์ค‘์— copy ํ•˜๋Š”๊ฒƒ์ด ์ข‹์Œ

  • ๋ญ๊ฐ€์ข‹์€๊ฐ€? -> ( ๋‚˜์ค‘์— copyํ•œ ํŒŒ์ผ์ด ๋ ˆ์ด์–ด์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ์œ„์น˜๋˜๋ฉฐ ์ƒˆ๋กœ์šด ๋„์ปค์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผํ• ๋•Œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€๋Š” ์บ์‹œ๋œ๊ฑธ๋กœ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ ๋ฐ ์‹œ๊ฐ„๋‹จ์ถ•์— ์šฉ์ด)

  • npm install ๋Œ€์‹  npm ci๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ๋” ์ข‹๋‹ค npm install์€ ํ•ญ์ƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ตœ์‹ ๋ฒ„์ „์„ ๊ฐ€์ ธ์™€์„œ ๋ถˆ์•ˆ์ •ํ•˜์ง€๋งŒ npm ci๋Š” ์‹ค์ œ๋กœ package-lock.json์— ์ ํ˜€์žˆ๋Š” ๊ฐœ๋ฐœํ• ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ ๋ฒ„์ „ ๊ทธ๋Œ€๋กœ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

  • ENTRYPOINT [ "node", "index.js" ] = node๋กœ ์‹คํ–‰ํ•˜๊ณ  index.js๋ฅผ ์‹คํ–‰ํ•ด์ค˜


  • docker buildํ•˜๊ธฐ
    docker build -f Dockerfile -t eogud-docker . ( ๋งˆ์ง€๋ง‰์— .์€ ํ˜„์žฌ๊ฒฝ๋กœ๋ฅผ ์ง€์ • -t๋Š” ๋„์ปค์— ์ด๋ฆ„์ง€์ •๊ฐ€๋Šฅ -f๋Š” ๋‚ด๋„์ปคํŒŒ์ผ์ด๋ฆ„ ์ ์–ด์ฃผ๊ธฐ)

  • docker images ๋ช…๋ น์–ด ์‚ฌ์šฉ์‹œ ํ™•์ธ๊ฐ€๋Šฅ

  • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰๋ฐฉ๋ฒ• docker run -d -p 8080(ํ˜ธ์ŠคํŠธํฌํŠธ):8080(์ปจํ…Œ์ด๋„ˆํฌํŠธ) eogud-docker

  • ๋„์ปค๊ฐ€ ์‹คํ–‰๋˜๊ณ ์žˆ๋Š”์ง€ ํ™•์ธ = docker ps

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:8080์— ์ ‘์†ํ•˜๋ฉด index.js์— ์ ํžŒ๊ธ€์ด ๋“ฑ์žฅ

  • ์ปจํ…Œ์ด๋„ˆ registory์— imageํŒŒ์ผ ์˜ฌ๋ฆฌ๊ธฐ docker hub์ด์šฉ

  • push ํ• ๋•Œ๋Š” hub์— push์–ด๋–ป๊ฒŒํ•ด์•ผํ•˜๋Š”์ง€ ๋‚˜์˜ด ํ•ด๋‹น๋ช…๋ น์–ด๋กœ ์ž‘์„ฑ

  • ํ„ฐ๋ฏธ๋„์—์„œ docker login ๋ช…๋ น์–ด ์ž‘์„ฑํ›„ ์•„์ด๋””/๋น„๋ฐ€๋ฒˆํ˜ธ ์ž‘์„ฑ ์ดํ›„ push ํ•ด์ฃผ๋ฉด hub repository์— ์˜ฌ๋ผ๊ฐ„๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜์žˆ์Œ

  • push์— ์ ํžŒ ๋ช…๋ น์–ด์™€ ๋‚ดํŒŒ์ผ์ด๋ฆ„์ด ๋‹ค๋ฅผ๋•Œ๋Š” tag ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ๋ณ€๊ฒฝ๊ฐ€๋Šฅ
    ex) docker tag eogud-docker:latest eogud/eogud-example:latest ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ๋ฉด eogud/eogud-example:latest๋กœ ํŒŒ์ผ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ๋‹ค

profile
์—ฐ์Šต์šฉ๊ฐœ๋ฐœ๋…ธํŠธ

0๊ฐœ์˜ ๋Œ“๊ธ€