ã¯ããã«
ããã«ã¡ã¯ïŒITã¹ã¯ãŒã«RareTECHã«ãŠCSïŒCustomer SupportïŒãæ åœããŠããæ± æã§ããä»åã®èšäºã¯ãDockeräžçŽç·šâ¡ãšããããšã§ãDockerfileã«ã€ããŠãã£ãšçè§£ããŠãããŸãããããšãã£ãå 容ã§ããåå¿è åãã®èšäºã§ãè»œãæŠèŠãæžããŠããã®ã§ããŸãã¯ãã¡ããèªãã§ãããã¡ãã®èšäºãèªãã§ããã ããŸããšå¹žãã§ãã
Dockerfileã£ãŠããããäœïŒ
Dockerfileã£ãŠäžæè°ã§ããããæ¡åŒµåã€ããŠãªããã©ããã¡ã€ã«ã§ã¯ãããã
çµè«ããèšããšãDockerfileã¯ããã¹ããã¡ã€ã«ã«è©²åœããŸãã
æ¡åŒµåã«ã€ããŠæ¹ããŠ
æ¬æ¥ãããã¹ããã¡ã€ã«ã«ã¯.txt
ãã€ããããã§ãããåå¿è
ã®é ã¯ãã®æ¡åŒµåã倧äºãªãã®ãšèª€è§£ããããã§ããæ¡åŒµåã¯ãããŸã§ã人éããã¡ã€ã«ãèå¥ãããããããã®ããã€ãšãã£ã¿ãªã©ããã¡ã€ã«ãèå¥ããããã«ã€ããŠããããŸãã
> python3 test.html
test
Javaãªã©ã¯ãJVMãæ¡åŒµåãèŠãŠããã®ã§å®è¡ã§ããªãã£ããããŸãã
Dockerfileã¯ã©ãèªã¿èŸŒãŸããŠããã®ãïŒ
ããŒã¹ïŒè§£æïŒ
Dockerfileã®å ŽåãDocker Engineãäžèº«ãè§£æããŠã1è¡1è¡èŠãŠããäœæ¥ãããŸãã
ãã®æ®µéã§ã¯ããŸã æžãããŠããã³ãã³ããªã©ãå®è¡ããŠããããã§ã¯ãããŸããã
ãã¡ãããããã§æ§æãééã£ãŠããããšã©ãŒãåºãŸãã
> docker build .
[+] Building 0.1s (1/1) FINISHED docker:orbstack
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 76B 0.0s
Dockerfile:1
--------------------
1 | >>> FROOM python:3.9
2 | RUN pip install flask
3 |
--------------------
ERROR: failed to solve: dockerfile parse error on line 1: unknown instruction: FROOM (did you mean FROM?)
å®è¡
ããŒã¹ãçµãã£ãããä»åºŠã¯1è¡1è¡å®è¡ãããŠãããŸãã
ããã§ãã£ãŠãããã现ããèŠãŠãããŸãããã
ä»åã¯ä»¥äžã®ãããªã·ã³ãã«ãªDockerfileãæºåããŸãã
FROM python:3.9
COPY app.py /app.py
RUN pip install flask
1ã€ç®ã®ã³ãã³ãã®å®è¡
ããã¯FROM
ã§æžãããããŒã¹ã€ã¡ãŒãžãæºåããã®ãç®çãªã®ã§ãDockerHubããPython3.9ã®ã€ã¡ãŒãžããšã£ãŠããŸããããŒã«ã«ã«ãã®ã€ã¡ãŒãžããã§ã«ããå Žåã¯ãããã䜿ããŸããåºæ¬ã³ãã³ãã§ãããšããã®pull
ã䜿ãããŠããŸãã
ã¹ãããã·ã§ãããåãâ
ããã§ã¬ã€ã€ãŒãšããæŠå¿µãç»å ŽããŸããïŒåŸã»ã©è©³ããïŒ
ãããŸã§ã®ã³ã³ããã®ç¶æ
ãä¿åããŠãããããªãã®ã§ããPython3.9ã®ã€ã¡ãŒãžãæã£ãŠããããŸã§ãä¿åããŠããŸãã
2ã€ç®ã®ã³ãã³ãã®å®è¡
COPY
ãªã®ã§ãããŒã«ã«ã«ããapp.py
ãã³ã³ããã®äžã®/
ãã£ã¬ã¯ããªã«ã³ããŒããŠããŸããããã¯Flaskã§ã¢ããªãå®è¡ããéã®èµ·ç¹ãšãªããã¡ã€ã«ã§ããã
ã¹ãããã·ã§ãããåãâ¡
å床ããã§ã¬ã€ã€ãŒãäœããŸãã
Dockerfileã§ã¯ãã³ãã³ããå®è¡ãããã³ã«ãã¹ãããã·ã§ãããåã£ãŠãããŸãã
3ã€ç®ã®ã³ãã³ãã®å®è¡
æåŸã«pip
ã³ãã³ãã§å¿
èŠãªã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«ã§ããã
ã¹ãããã·ã§ãããåãâ¢
ããã§æåŸã®ã¹ãããã·ã§ãããåã£ãŠçµäºã§ãã
ãŸãšãŸã£ãã€ã¡ãŒãžãäœããã
å®è¡ãå®äºãããšãå ã»ã©ãŸã§ã®ã¬ã€ã€ãŒãç©ã¿éãªã£ãŠã€ã¡ãŒãžã宿ã«ãªããŸãã
ãããŸã§ãã€ã¡ãŒãžãã§ãããŸã§ã®æµãã«ãªããŸãã现ããªãšããã¯ãã®åŸã«èª¬æããŠãããŸãã®ã§ããã£ããèŠããŠãããŸãããã
ã¬ã€ã€ãŒã«ã€ããŠãã£ãšè©³ãã
ããŠãã¬ã€ã€ãŒãã¹ãããã·ã§ãããªã©ããšã³ãžãã¢ãªãèŽãæ £ããŠããèšèã§ããããŸã åŠç¿ãå§ãã人ã¯ããããªãèšèã ãšæããŸãã
ã¹ãããã·ã§ãã
ãŸãã¯ã¹ãããã·ã§ããã§ãããããã¯ãšã³ãžãã¢ãããŠãããšè²ã ãªãšããã§åºãŠããŸããåºçŸ©ã®æå³ã§ãç¹å®ã®ç¬éã®ç¶æ ããŸãããšä¿åããããšãã«ãªããŸãã
ã«ã¡ã©ã§ãã·ã£ã£ãšåçããšãæãã§ããã
äŸãã°ããŒã¿ããŒã¹ã§ã¯ãäžèº«ã®ç¶æ ãç¹å®ã®ç¬éã§åçµããŠä¿åããŠããããã§ããŸãããµãŒããŒãªã©ãåæ§ã§ããã£ã¹ã¯äžã®ãã¡ã€ã«ã®ç¶æ ãç¹å®æç¹ã§ä¿åããããšãã§ããŸãã
äœè«ïŒã¹ãããã·ã§ãããšããã¯ã¢ããã®éã
ã¹ãããã·ã§ãããšããã¯ã¢ããã¯éããŸãã
ã¹ãããã·ã§ãããåã£ãŠããããå®å¿ãšããããã§ã¯ãªããå
ã®ãµãŒããŒçãå¹ã£é£ã¹ã°ãã¹ãããã·ã§ãããå¹ã£é£ã³ãŸãã
éã«ããã¯ã¢ããã¯ãç°ãªããµãŒããŒçã«ã³ããŒããŠããç¶æ
ã®ããšã§ãã
çšæããæéãæéã¯ããããŸãããæ¬åœã«å®å¿ãªã®ã¯ããã¯ã¢ããã®æ¹ã§ãã
çµå±ãã¹ãããã·ã§ãããåã£ãŠãããã¯ã¢ãããæºåããããåã§ãã
ã¬ã€ã€ãŒ
Dockerfileã®å Žåã¯ãåã³ãã³ããå®è¡ããããã³ã«ããã®ç¶æ ãä¿åããŠããŸããããã¯ãã³ã³ãããäœåºŠããã«ãããããšåæã®ä»æ§ã§ãäœåºŠããã«ãããŠåãã³ãã³ããæ¯åå®è¡ããã®ã¯å¹çãæªããªããŸããã§ãã®ã§ãã€ã¡ãŒãžãé«éã«äœæããããã«å¿ èŠãªåäœã§ãã
ã¬ã€ã€ãŒã¯ãITã®ä»ã®åéã ãšæŠå¿µçã«è©±ãããããšãå€ãå°è±¡ã§ãã
äŸãã°OSIåç
§ã¢ãã«ã®7ã€ã®ã¬ã€ã€ãŒãªã©ã§ããããããã®èãæ¹ãšè¿ããã®ã§ã¯ãããŸãããDockerã®å Žåã¯ãã¬ã€ã€ãŒã«ãã£ãã宿
ããããŸãã
ã¬ã€ã€ãŒãç°¡åã«èšããšã
ãã¡ã€ã«ã·ã¹ãã ã®ããæç¹ã§ã®å€åã»å·®åãä¿åããå®äœ
ã«ãªããŸãã
å®äœãªã®ã§ãèŠã¯ãã¡ã€ã«ã§ãããã¡ã€ã«ã·ã¹ãã ã®å·®åãèšé²ãããã®ããã¡ã€ã«ãšããŠæ®ããDockerfileå
ã®åã³ãã³ãããšã«ä¿åãããã¬ã€ã€ãŒãç©ã¿éãªã£ãŠãã€ã¡ãŒãžã«ãªããŸããã€ã¡ãŒãžã«ã¯ãã¬ã€ã€ãŒãã©ãç©ã¿äžãã£ãŠã§ããŠãããã®æ
å ±ãå«ãŸããŠããŸãã
ãªã®ã§ãã³ã³ããã®ã€ã¡ãŒãžãšããã®ã¯ãããã±ãŒãžïŒå°å ïŒã®ãããªãã®ã§ãäžã«åã¬ã€ã€ãŒãšé çªæ å ±ãå ¥ã£ãŠããŠãDocker Engineããã®ç®±ãéããŠé çªéãã«å®è¡ããŠããããšã«ãªããŸããã
ã¬ã€ã€ãŒãå®éã«èŠãŠã¿ãã
ä»åã¯ä»¥äžã®ãã¡ã€ã«ããã£ã¬ã¯ããªã«äœã£ãŠãã©ããªã¬ã€ã€ãŒã«ãªã£ãŠããã確èªããŠãããŸãã
FROM python:3.9
COPY app.py /app.py
RUN pip install flask
åããã£ã¬ã¯ããªã«app.pyãäœããŸãã
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
if __name__ == "__main__":
app.run(debug=True)
åããã£ã¬ã¯ããªã«Dockerfileãšapp.pyãããç¶æ ã«ããŠãã ããã
ã§ã¯ãã®ç¶æ ã§ããã«ããè¡ããŸãã
docker build -t flask_test_docker .
ããã§ãã«ãã¯å®äºã§ãã
docker image ls
flask_test_docker
ãšããã€ã¡ãŒãžãã§ããŠããã°OKã§ãã
ã§ã¯ä»åºŠã¯ããã®äžèº«ã確èªããŠãããŸãããã
docker history flask_test_docker
ããŠãè²ã
åºãŠããŸãããã
ããã§èŠãŠã»ããã®ã¯äžã®2è¡ã§ããããã¯å
ã»ã©Dockerfileã§äœæããã¬ã€ã€ãŒãæžãããŠããŸãããã®åã®ãã®ã¯ããã®ããŒã¹ã€ã¡ãŒãžãäœã£ã人ãã¡ãç©ã¿éããã¬ã€ã€ãŒã§ãã
æã ã³ã³ããã䜿ããŠãŒã¶ãŒã¯ãããŒã¹ã€ã¡ãŒãžè£œäœè ã®éããã¬ã€ã€ãŒã«ã远å ã§ã¬ã€ã€ãŒãä¹ããŠãããšããããšã«ãªããŸãã
ããŠãããããã®ã¬ã€ã€ãŒã«ã¯ããã€ãæ°ãæžãããŠããŸãã
ãããç©ã¿éãªã£ãŠãæçµçãªã€ã¡ãŒãžã®éããæ±ºãŸããã§ããã
ã¬ã€ã€ãŒããããšäœãå¬ããã®ïŒ
ã¬ã€ã€ãŒãããããããããšã§ã次åã®ãã«ããé«éã«ãªããŸãã
ããã¯ãã£ãã·ã¥ãšåŒã°ããæ©èœãåããŠããŠãã¬ã€ã€ãŒãäœããããã³ã«ãã£ãã·ã¥ãæã€ããã«ãªããŸãããã£ãã·ã¥ã¯è²ã
ãªãšããã«äœ¿ãããŠããã®ã§ãä»åã¯Dockerãã«ããã£ãã·ã¥ã«ã€ããŠè§£èª¬ããŠãããŸãã
ãã«ããã£ãã·ã¥ã£ãŠïŒ
ç°¡åã«ãããŸããšã
ååãã«ããããšãã«äœã£ãã€ã¡ãŒãžã»ã¬ã€ã€ãŒãããŸã䜿ãããªã䜿ã£ã¡ãããïŒ
ã§ãããªã®ã§ã2åç®ä»¥éã®ãã«ããé«éã«ãªãä»çµã¿ãåãã£ãŠããŸãã
äŸãã°ãapp.pyã®äžèº«ã
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
@app.route('/test') â3è¡å远èš
def test():
return 'Hello Test'
if __name__ == "__main__":
app.run(debug=True)
ãã®ç¶æ ã§ãåãã«ãããŠã¿ããšãDockerfileã®ããŒã¹ã€ã¡ãŒãžãæžãããFROMæã¯ãã£ãã·ã¥ãåããŠãåã«ãã«ãããæã®çµæããã®ãŸãŸäœ¿ã£ãŠãããŸãã
FROM python:3.9 âããã¯ãã£ãã·ã¥ãåã
COPY app.py /app.py âããããäžã¯åãã«ã
RUN pip install flask
ãã ãapp.pyã倿Žãã圱é¿ã§ã2è¡ç®ä»¥éã¯å床ãã«ããããŸããããã«ã¯å°ã工倫ãå¿ èŠã§ãã
Dockerfileã§ã¯ãæ°ãããã«ããå¿ èŠãªè¡ããäžã¯ãå床ãã«ããããããªä»çµã¿ãåãã£ãŠããŸããå€ããã£ãã·ã¥ã«ãã£ãŠãã°ãåºãªããããªå®å šèšèšã§ãã
ã§ãã3è¡ç®ã®RUN
ã¯åãããšãã£ãŠããããã§ããã°ãã£ãã·ã¥åããŠã»ããããšãªã£ãå Žåã§ãã
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py .
ãã®å Žåã¯ãã€ã³ããŒãããFlask
ãrequirements.txt
ã«æžããŠãããŠãå
ã«ãã«ãããŠããŸãããã®ãããã§ãapp.py
ã ããæžãæãããªãã5è¡ç®ä»¥åã¯å
šãŠãã£ãã·ã¥ãåããŠã次å以éã®ãã«ããé«éã«ãªã£ãŠãããŸãã
ãã軜éãªã€ã¡ãŒãžãäœæãã
ããŠãã€ã¡ãŒãžã¯ãã軜éã§ããã°è¯ããšãããŠããŸããããã¯ãªããïŒ
- ã€ã¡ãŒãžã軜éã ãš
build
ãéã - ãã£ã¹ã¯ãå§è¿«ããªã
- CI/CDãªã©ã®ã¯ãªãŒã³ãã«ãæã®é床ã«åœ±é¿
CI/CDãªã©ã§ã¯ãã£ãã·ã¥æ©èœã¯ããã«ã¯ãããŸãããåºæ¬çã«ã¯ã¯ãªãŒã³ãã«ããæšå¥šã ãšæããŸãã
軜éã«ãããã¯ããã¯
â ãã倿Žãããããã¡ã€ã«çã¯æåŸã®æ¹ã«æžã
ããã¯å ã»ã©ç޹ä»ããäŸã§ããã
COPY . .
RUN pip install -r requirements.txt
ããã
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
ã®æ¹ããã³ãŒãã倿ŽããŠããã®éšåã ããåãã«ããããã®ã§éããªããŸãã
â¡ RUN
åœä»€ããŸãšãã
ãã¡ãã¯RUN
ã§å®è¡ããã³ãã³ãã1è¡ã«ãŸãšããŠããŸã圢ã«ãªããŸãã
RUN apt-get update
RUN apt-get install -y git
RUN apt-get install -y curl
ããã
RUN apt-get update && \
apt-get install -y git curl && \
rm -rf /var/lib/apt/lists/*
ãã®æåŸã®rm -rf /var/lib/apt/lists/*
ã¯ãã€ã³ã¹ããŒã«ããããã±ãŒãžã®ãªã¹ããåé€ããŠããŸããäžåºŠã€ã³ã¹ããŒã«ããããããããäœ¿ãæ©äŒã¯ãããªãã®ã§ã綺éºã«ããŠå®¹éãåæžããŠããŸãã
⢠ãã«ãã¹ããŒãžãã«ãã䜿ã
Dockerfileã«ã¯ãã«ãã¹ããŒãžãã«ããšããæ©èœããããŸãã
# éçºæ
FROM golang:1.20 as builder
WORKDIR /app
COPY . .
RUN go build -o app
# æ¬çª
FROM alpine:latest
COPY --from=builder /app/app /app
ENTRYPOINT ["/app"]
éçºæã¯éãç°å¢ã䜿ãã€ã€ãæ¬çªã§ã¯è»œéãªç¶æ
ã§ãããã€ããæ¹æ³ã§ãã
ãã ãäžèšã¯äŸã§ããããã«ãã¹ããŒãžãã«ãã«é¢ããŠã¯ãã£ããå¥èšäºã§ç޹ä»ããäºå®ã§ãã
ãããã«
ä»åã®èšäºã¯Dockerfileã®ã¬ã€ã€ãŒã«ã€ããŠç޹ä»ããŸããã
ãããç¥ã£ãŠãããããªããã§ãDockerfileã®ãã¹ããªæžãæ¹ã«èŸ¿ãçãé床ãå€ãã£ãŠããŸãã軜éã§æªãããšã¯ãªãã§ãããããç¹ã«éãã¢ããªã¯ãã軜éã«ããŠãããªããšãèµ·åã«1æéããããšãç¬ããªãã§ãã
äœè«
ã¡ãã£ãšä¹ ãã¶ãã®èšäºã«ãªã£ãŠããŸããŸãããããã¯ãæžããŠããæã¯æ¥œããã§ããã