Docker CLI
˝ ⛼䡗յ䐂גْؕ٭ة澬鏀
$ docker images
˝ ⛼䡗גؤ٤طػ澬鏀
$ docker container ls -a
$ docker ps -a
˝ ؤ٤طػ⫂סنٌٜؒؕتعמؤم٭
$ docker cp
Slide 30
Slide 30 text
Docker
Slide 31
Slide 31 text
Docker
Docker le
DockerHub
Slide 32
Slide 32 text
Docker le
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
FROM alpine
COPY !"from=builder /services/blog/bin/server \
/services/blog/bin/server
RUN adduser -D -u 1000 app
USER 1000
ENTRYPOINT ["/services/blog/bin/server"]
ⶡ硾םط؞تعي٭تס
تؠٛوعنٜؒؕ
Docker
docker build
ךْؕ٭ةلٜغ
Slide 33
Slide 33 text
Docker le - FROM
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
FROM alpine
COPY !"from=builder /services/blog/bin/server \
/services/blog/bin/server
RUN adduser -D -u 1000 app
USER 1000
ENTRYPOINT ["/services/blog/bin/server"]
Docker le
FROM
AS
Slide 34
Slide 34 text
Docker le - RUN
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
FROM alpine
COPY !"from=builder /services/blog/bin/server \
/services/blog/bin/server
RUN adduser -D -u 1000 app
USER 1000
ENTRYPOINT ["/services/blog/bin/server"]
!"mount
Slide 35
Slide 35 text
Docker le - COPY
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
FROM alpine
COPY !"from=builder /services/blog/bin/server \
/services/blog/bin/server
RUN adduser -D -u 1000 app
USER 1000
ENTRYPOINT ["/services/blog/bin/server"]
!"from
Slide 36
Slide 36 text
Docker le - USER
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
FROM alpine
COPY !"from=builder /services/blog/bin/server \
/services/blog/bin/server
RUN adduser -D -u 1000 app
USER 1000
ENTRYPOINT ["/services/blog/bin/server"]
root
Slide 37
Slide 37 text
Docker le - ENTRYPOINT
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
FROM alpine
COPY !"from=builder /services/blog/bin/server \
/services/blog/bin/server
RUN adduser -D -u 1000 app
USER 1000
ENTRYPOINT ["/services/blog/bin/server"]
CMD
Slide 38
Slide 38 text
Multi-stage builds
# syntax = docker/dockerfile:experimental
# Ϗϧυ͢ΔΠϝʔδ
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
# ՌΛ࣋ͭΠϝʔδ
FROM alpine
COPY !"from=builder /services/blog/bin/server \
/services/blog/bin/server
RUN adduser -D -u 1000 app
USER 1000
ENTRYPOINT ["/services/blog/bin/server"]
docker build !"target
stage
Slide 39
Slide 39 text
Docker
Dockerfile
FROM ubuntu
RUN echo "hoge" > hoge.txt
RUN rm hoge.txt
⛼䡗גْؕ٭ة⭳ⱱי鉮⬲
$ docker save $CID > image.tar
$ tar xf image.tar
layer.tar
b3ea71bd7712c8534c4e3!!" layer.tar
% tar xf layer.tar
% ls
VERSION hoge.txt json layer.tar
% cat hoge.txt
hoge
הםײמ
RUN rm hoge.txt
.wh.hoge.txt
Slide 42
Slide 42 text
history
docker history
❆
$ docker history aa8c0471e587
IMAGE CREATED CREATED BY SIZE COMMENT
aa8c0471e587 16 seconds ago /bin/sh -c rm hoge.txt 0B
ec48e0efeb2e 16 seconds ago /bin/sh -c echo "hoge" > hoge.txt 5B
bad148f8963f 30 hours ago /bin/sh -c !"nop) CMD ["bash"] 0B
30 hours ago /bin/sh -c !"nop) ADD file:3db67543ea64bf672… 69.2MB
Slide 43
Slide 43 text
!
1.
RUN !!" !!"
2.
RUN !!" > secret.txt
!!"
RUN rm secret.txt
Slide 44
Slide 44 text
嚀㳡䗯㕔䣽ֹ亠嫎
multi-stage build
RUN !"mount=type=secret
RUN !!# > secret.txt !$ !!# !$ rm secret.txt
Slide 45
Slide 45 text
نٜؒؕמ傴׀鱮׳כ׀לֹ
Copy On Write (COW)
OverlayFS
Docker COW
Slide 46
Slide 46 text
ٕٝؕ؞ٔشبٖ
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
<͕͜͜มߋ͞Εͨ߹↓ͷ෦Λ࠶࣮ߦ>
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
˝ 㚺催ֵֿזג车♓ס
⽜♐ֿ⫋㲔车
˝ 㚺催ַ鼧⮆ע儕㶾
מ
Slide 47
Slide 47 text
؞ٔشبٖס✳亠ֿ樟ם❆
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY . .
RUN go mod download
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
Slide 48
Slide 48 text
؞ٔشبٖס✳亠ֿ樟ם❆
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
# syntax = docker/dockerfile:experimental
FROM golang:1.18-alpine AS builder
RUN apk !"update add make
WORKDIR /services/blog
COPY . .
RUN go mod download
RUN !"mount=type=cache,target=/root/.cache/go-build \
make build
Trivy
https://github.com/aquasecurity/trivy
Docker git
$ trivy image !"severity HIGH hatena/apply-for-internship-2020:latest
2020-08-05T08:44:37.496+0900 WARN You should avoid using the :latest tag as it is cached. You need to specify '!"clear-cache' option when :latest image is changed
2020-08-05T08:44:40.616+0900 INFO Detecting Debian vulnerabilities!!#
hatena/apply-for-internship-2020:latest (debian 10.4)
=====================================================
Total: 1 (HIGH: 1)
+-----------+------------------+----------+-------------------+------------------+--------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+-----------+------------------+----------+-------------------+------------------+--------------------------------+
| perl-base | CVE-2020-10878 | HIGH | 5.28.1-6 | 5.28.1-6+deb10u1 | perl: corruption of |
| | | | | | intermediate language state |
| | | | | | of compiled regular expression |
| | | | | | due to!!# |
+-----------+------------------+----------+-------------------+------------------+--------------------------------+
Slide 58
Slide 58 text
ױכ״
1
Namespace secomp
Docker
1 1
Slide 59
Slide 59 text
ֽױַ
Slide 60
Slide 60 text
Docker Quiz
$ docker run !"rm -i hatena/intern-2020-docker-quiz
!
"
docker run !"rm -i hatena/intern-2020-
docker-quiz -hint
Slide 61
Slide 61 text
ENTRYPOINT CMD
❆
CMD ["8.8.8.8"]
ENTRYPOINT ["ping"]
docker run ping 8.8.8.8
docker run 127.0.0.1 ping 127.0.0.1
docker run !"entrypoint date date
Docker le CMD ENTRYPOINT ( / ) - CMD ENTRYPOINT