ã€ã¡ãŒãžãã«ãã®ãã¹ããã©ã¯ãã£ã¹
ã€ã¡ãŒãžã®ã¬ã€ã€ãŒå
docker image history
ã³ãã³ãã䜿ããšãåã¬ã€ã€ãŒãã©ã®ããã«äœæããããã確èªã§ããŸãã
-
docker image history
ã³ãã³ãã䜿çšããŠãäœæããgetting-started
ã€ã¡ãŒãžå ã®ã¬ã€ã€ãŒã確èªããŸãã$ docker image history getting-started
以äžã®ãããªåºåãåŸãããã¯ãã§ãã
IMAGE CREATED CREATED BY SIZE COMMENT a78a40cbf866 18 seconds ago /bin/sh -c #(nop) CMD ["node" "src/index.j⊠0B f1d1808565d6 19 seconds ago /bin/sh -c yarn install --production 85.4MB a2c054d14948 36 seconds ago /bin/sh -c #(nop) COPY dir:5dc710ad87c789593⊠198kB 9577ae713121 37 seconds ago /bin/sh -c #(nop) WORKDIR /app 0B b95baba1cfdb 13 days ago /bin/sh -c #(nop) CMD ["node"] 0B <missing> 13 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry⊠0B <missing> 13 days ago /bin/sh -c #(nop) COPY file:238737301d473041⊠116B <missing> 13 days ago /bin/sh -c apk add --no-cache --virtual .bui⊠5.35MB <missing> 13 days ago /bin/sh -c #(nop) ENV YARN_VERSION=1.21.1 0B <missing> 13 days ago /bin/sh -c addgroup -g 1000 node && addu⊠74.3MB <missing> 13 days ago /bin/sh -c #(nop) ENV NODE_VERSION=12.14.1 0B <missing> 13 days ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 13 days ago /bin/sh -c #(nop) ADD file:e69d441d729412d24⊠5.59MB
åè¡ãã€ã¡ãŒãžå ã®ã¬ã€ã€ãŒãè¡šããŠããŸãã衚瀺ã¯ãããŒã¹ã€ã¡ãŒãžãäžã«ãããææ°ã®ã¬ã€ã€ãŒãäžã«ãããŸããããã䜿ãã°ãåã¬ã€ã€ãŒã®ãµã€ãºãç°¡åã«ç¢ºèªã§ãã倧ããªã€ã¡ãŒãžã®èšºæã«åœ¹ç«ã¡ãŸãã
-
ããã€ãã®è¡ãçç¥ãããŠããããšã«æ°ã¥ãã§ãããã
--no-trunc
ãã©ã°ãè¿œå ãããšãå®å šãªåºåãåŸãããŸãã$ docker image history --no-trunc getting-started
ã¬ã€ã€ãŒãã£ãã·ã³ã°
ã¬ã€ã€ãŒãã©ã®ããã«æ©èœãããã確èªãããšããã§ãã³ã³ããã€ã¡ãŒãžã®ãã«ãæéãççž®ããããã®éèŠãªæèšããããŸããã¬ã€ã€ãŒã1ã€ã§ãå€æŽããããšããã¹ãŠã®äžæµã®ã¬ã€ã€ãŒãåäœæãããå¿ èŠããããŸãã
次ã«ãgetting-startedã¢ããªçšã«äœæããDockerfileãèŠãŠã¿ãŸãããã
# syntax=docker/dockerfile:1
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
ã€ã¡ãŒãžå±¥æŽã®åºåã«æ»ããšãDockerfileã®åã³ãã³ããã€ã¡ãŒãžå ã®æ°ããã¬ã€ã€ãŒã«ãªãããšãããããŸããã€ã¡ãŒãžã«å€æŽãå ãããšããyarnäŸåé¢ä¿ãåã€ã³ã¹ããŒã«ãããªããã°ãªããªãã£ãããšãæãåºããããããŸãããåãäŸåé¢ä¿ãæ¯åãã«ãããã®ã¯å¹ççã§ã¯ãããŸããã
ããã解決ããã«ã¯ãDockerfileã®æ§é ãå€æŽããŠäŸåé¢ä¿ã®ãã£ãã·ã¥ããµããŒãããããã«ããå¿
èŠããããŸããNodeããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã®å ŽåãäŸåé¢ä¿ã¯ package.json
ãã¡ã€ã«ã§å®çŸ©ãããŠããŸããæåã«ãã®ãã¡ã€ã«ã ããã³ããŒããŠäŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããã®åŸã«ãã¹ãŠã®ãã¡ã€ã«ãã³ããŒããŸããããã«ãããpackage.json
ã«å€æŽããã£ãå Žåã«ã®ã¿ãyarnã®äŸåé¢ä¿ãåäœæãããããã«ãªããŸãã
-
ãŸãã
package.json
ãæåã«ã³ããŒããäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŠãããä»ã®ãã¹ãŠãã³ããŒããããã«DockerfileãæŽæ°ããŸãã# syntax=docker/dockerfile:1 FROM node:18-alpine WORKDIR /app COPY package.json yarn.lock ./ RUN yarn install --production COPY . . CMD ["node", "src/index.js"]
-
docker build
ã³ãã³ãã䜿ã£ãŠæ°ããã€ã¡ãŒãžããã«ãããŸãã$ docker build -t getting-started .
以äžã®ãããªåºåã衚瀺ãããã¯ãã§ãã
[+] Building 16.1s (10/10) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 175B => [internal] load .dockerignore => => transferring context: 2B => [internal] load metadata for docker.io/library/node:18-alpine => [internal] load build context => => transferring context: 53.37MB => [1/5] FROM docker.io/library/node:18-alpine => CACHED [2/5] WORKDIR /app => [3/5] COPY package.json yarn.lock ./ => [4/5] RUN yarn install --production => [5/5] COPY . . => exporting to image => => exporting layers => => writing image sha256:d6f819013566c54c50124ed94d5e66c452325327217f4f04399b45f94e37d25 => => naming to docker.io/library/getting-started
-
次ã«ã
src/static/index.html
ãã¡ã€ã«ãå€æŽããŸããäŸãã°ã<title>
ããThe Awesome Todo Appãã«å€æŽããŠã¿ãŠãã ããã -
å床
docker build -t getting-started .
ã䜿ã£ãŠDockerã€ã¡ãŒãžããã«ãããŸããä»åã¯ãåºåãå°ãç°ãªãã¯ãã§ãã[+] Building 1.2s (10/10) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 37B => [internal] load .dockerignore => => transferring context: 2B => [internal] load metadata for docker.io/library/node:18-alpine => [internal] load build context => => transferring context: 450.43kB => [1/5] FROM docker.io/library/node:18-alpine => CACHED [2/5] WORKDIR /app => CACHED [3/5] COPY package.json yarn.lock ./ => CACHED [4/5] RUN yarn install --production => [5/5] COPY . . => exporting to image => => exporting layers => => writing image sha256:91790c87bcb096a83c2bd4eb512bc8b134c757cda0bdee4038187f98148e2eda => => naming to docker.io/library/getting-started
ãŸãããã«ããã¯ããã«éããªã£ãŠããããšã«æ°ã¥ãã¯ãã§ãããŸããããã€ãã®ã¹ãããã以åã«ãã£ãã·ã¥ãããã¬ã€ã€ãŒã䜿çšããŠããããšãããããŸããããã«ãããã€ã¡ãŒãžã®ããã·ã¥ããã«ãããã³ãããã®æŽæ°ãããè¿ éã«ãªããŸãã
ãã«ãã¹ããŒãžãã«ã
ãã«ãã¹ããŒãžãã«ãã¯ãè€æ°ã®ã¹ããŒãžã䜿çšããŠã€ã¡ãŒãžãäœæããããã®éåžžã«åŒ·åãªããŒã«ã§ãã以äžã®ãããªå©ç¹ããããŸãã
- ãã«ãæã®äŸåé¢ä¿ãšå®è¡æã®äŸåé¢ä¿ãåé¢ãã
- å®è¡ã«å¿ èŠãªãã®ã ããå«ããŠã€ã¡ãŒãžã®ãµã€ãºãåæžãã
Maven/Tomcatã®äŸ
JavaããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ããã«ãããå ŽåããœãŒã¹ã³ãŒããJavaãã€ãã³ãŒãã«ã³ã³ãã€ã«ããããã«JDKãå¿ èŠã§ããããããJDKã¯æ¬çªç°å¢ã§ã¯å¿ èŠãããŸããããŸããMavenãGradleãªã©ã®ãã«ãããŒã«ã䜿çšãããããããŸãããããããæçµçãªã€ã¡ãŒãžã«ã¯å¿ èŠãããŸãããããã§ãã«ãã¹ããŒãžãã«ãã圹ç«ã¡ãŸãã
# syntax=docker/dockerfile:1
FROM maven AS build
WORKDIR /app
COPY . .
RUN mvn package
FROM tomcat
COPY --from=build /app/target/file.war /usr/local/tomcat/webapps
ãã®äŸã§ã¯ãæåã®ã¹ããŒãžïŒbuild
ãšåŒã°ããïŒã§Mavenã䜿çšããŠJavaãã«ããè¡ããŸãã2çªç®ã®ã¹ããŒãžïŒFROM tomcat
ããå§ãŸããŸãïŒã§ã¯ãbuild
ã¹ããŒãžãããã¡ã€ã«ãã³ããŒããŸããæçµã€ã¡ãŒãžã¯æåŸã®ã¹ããŒãžã®ã¿ã§äœæããã--target
ãã©ã°ã䜿ã£ãŠäžæžãããããšãã§ããŸãã
Reactã®äŸ
Reactã¢ããªã±ãŒã·ã§ã³ããã«ãããå ŽåãNodeç°å¢ã䜿çšããŠJSã³ãŒãïŒéåžžã¯JSXïŒãSASSã¹ã¿ã€ã«ã·ãŒããªã©ãéçHTMLãJSãCSSã«ã³ã³ãã€ã«ããå¿ èŠããããŸãããµãŒããŒãµã€ãã¬ã³ããªã³ã°ãè¡ããªãå Žåãæ¬çªç°å¢ã«ã¯Nodeç°å¢ã¯äžèŠã§ããéçãªãœãŒã¹ãnginxã³ã³ããã«é ä¿¡ããããšãã§ããŸãã
# syntax=docker/dockerfile:1
FROM node:18 AS build
WORKDIR /app
COPY package* yarn.lock ./
RUN yarn install
COPY public ./public
COPY src ./src
RUN yarn run build
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
ãã®Dockerfileã®äŸã§ã¯ãnode:18
ã€ã¡ãŒãžã䜿ã£ãŠãã«ããå®è¡ãïŒã¬ã€ã€ãŒãã£ãã·ã³ã°ãæ倧éã«æŽ»çšïŒããã®åŸãåºåãnginxã³ã³ããã«ã³ããŒããŠããŸãã
ãŸãšã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã€ã¡ãŒãžãã«ãã«é¢ãããã¹ããã©ã¯ãã£ã¹ïŒã¬ã€ã€ãŒãã£ãã·ã³ã°ãšãã«ãã¹ããŒãžãã«ãïŒã«ã€ããŠåŠã³ãŸããã
é¢é£æ å ±:
次ã®ã¹ããã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ãã³ã³ããã«é¢ããåŠç¿ãç¶ããããã«åœ¹ç«ã€è¿œå ãªãœãŒã¹ã«ã€ããŠåŠã³ãŸãã