From e6b9c0f652ff929ab38c3b2ad0fabff6d37740cc Mon Sep 17 00:00:00 2001 From: pro100ton Date: Sat, 2 Nov 2024 15:32:43 +0300 Subject: [PATCH] Docker deep dive book materials --- .gitmodules | 3 + ddd-book/README.md | 7 ++ ddd-book/multi-contianer/.DS_Store | Bin 0 -> 6148 bytes ddd-book/multi-contianer/Dockerfile | 16 +++ ddd-book/multi-contianer/README.md | 7 ++ ddd-book/multi-contianer/app/.DS_Store | Bin 0 -> 6148 bytes ddd-book/multi-contianer/app/app.py | 25 +++++ ddd-book/multi-contianer/app/static/.DS_Store | Bin 0 -> 6148 bytes .../multi-contianer/app/static/css/.DS_Store | Bin 0 -> 6148 bytes .../multi-contianer/app/static/css/main.css | 81 ++++++++++++++ .../app/static/images/.DS_Store | Bin 0 -> 6148 bytes .../app/static/images/image.png | Bin 0 -> 99058 bytes .../multi-contianer/app/templates/error.html | 10 ++ .../multi-contianer/app/templates/index.html | 20 ++++ ddd-book/multi-contianer/compose.yaml | 24 ++++ ddd-book/multi-contianer/requirements.txt | 3 + ddd-book/multi-stage/.DS_Store | Bin 0 -> 6148 bytes ddd-book/multi-stage/Dockerfile | 16 +++ ddd-book/multi-stage/Dockerfile-final | 19 ++++ ddd-book/multi-stage/README.md | 9 ++ ddd-book/multi-stage/cmd/client/main.go | 19 ++++ ddd-book/multi-stage/cmd/client/request.go | 39 +++++++ ddd-book/multi-stage/cmd/client/ui.go | 105 ++++++++++++++++++ ddd-book/multi-stage/cmd/server/main.go | 29 +++++ ddd-book/multi-stage/cmd/server/translate.go | 28 +++++ ddd-book/multi-stage/go.mod | 28 +++++ ddd-book/multi-stage/go.sum | 60 ++++++++++ ddd-book/swarm-app/.DS_Store | Bin 0 -> 6148 bytes ddd-book/swarm-app/Dockerfile | 16 +++ ddd-book/swarm-app/README.md | 21 ++++ ddd-book/swarm-app/app/.DS_Store | Bin 0 -> 6148 bytes ddd-book/swarm-app/app/app.py | 27 +++++ ddd-book/swarm-app/app/static/.DS_Store | Bin 0 -> 6148 bytes ddd-book/swarm-app/app/static/css/.DS_Store | Bin 0 -> 6148 bytes ddd-book/swarm-app/app/static/css/main.css | 81 ++++++++++++++ .../swarm-app/app/static/images/.DS_Store | Bin 0 -> 6148 bytes .../swarm-app/app/static/images/bkp image.png | Bin 0 -> 30301 bytes .../swarm-app/app/static/images/image.png | Bin 0 -> 49300 bytes ddd-book/swarm-app/app/templates/error.html | 10 ++ ddd-book/swarm-app/app/templates/index.html | 20 ++++ ddd-book/swarm-app/compose.yaml | 42 +++++++ ddd-book/swarm-app/requirements.txt | 3 + ddd-book/web-app-0.2/.DS_Store | Bin 0 -> 6148 bytes ddd-book/web-app-0.2/Dockerfile | 19 ++++ ddd-book/web-app-0.2/README.md | 15 +++ ddd-book/web-app-0.2/app.js | 17 +++ ddd-book/web-app-0.2/package.json | 15 +++ ddd-book/web-app-0.2/views/home.pug | 18 +++ ddd-book/web-app/.DS_Store | Bin 0 -> 6148 bytes ddd-book/web-app/Dockerfile | 19 ++++ ddd-book/web-app/README.md | 13 +++ ddd-book/web-app/app.js | 17 +++ ddd-book/web-app/package.json | 15 +++ ddd-book/web-app/views/home.pug | 17 +++ useful_commands.md | 36 ++++++ web_server/notes.md | 0 56 files changed, 969 insertions(+) create mode 100644 .gitmodules create mode 100644 ddd-book/README.md create mode 100644 ddd-book/multi-contianer/.DS_Store create mode 100644 ddd-book/multi-contianer/Dockerfile create mode 100644 ddd-book/multi-contianer/README.md create mode 100644 ddd-book/multi-contianer/app/.DS_Store create mode 100644 ddd-book/multi-contianer/app/app.py create mode 100644 ddd-book/multi-contianer/app/static/.DS_Store create mode 100644 ddd-book/multi-contianer/app/static/css/.DS_Store create mode 100644 ddd-book/multi-contianer/app/static/css/main.css create mode 100644 ddd-book/multi-contianer/app/static/images/.DS_Store create mode 100644 ddd-book/multi-contianer/app/static/images/image.png create mode 100644 ddd-book/multi-contianer/app/templates/error.html create mode 100644 ddd-book/multi-contianer/app/templates/index.html create mode 100644 ddd-book/multi-contianer/compose.yaml create mode 100644 ddd-book/multi-contianer/requirements.txt create mode 100644 ddd-book/multi-stage/.DS_Store create mode 100644 ddd-book/multi-stage/Dockerfile create mode 100644 ddd-book/multi-stage/Dockerfile-final create mode 100644 ddd-book/multi-stage/README.md create mode 100644 ddd-book/multi-stage/cmd/client/main.go create mode 100644 ddd-book/multi-stage/cmd/client/request.go create mode 100644 ddd-book/multi-stage/cmd/client/ui.go create mode 100644 ddd-book/multi-stage/cmd/server/main.go create mode 100644 ddd-book/multi-stage/cmd/server/translate.go create mode 100644 ddd-book/multi-stage/go.mod create mode 100644 ddd-book/multi-stage/go.sum create mode 100644 ddd-book/swarm-app/.DS_Store create mode 100644 ddd-book/swarm-app/Dockerfile create mode 100644 ddd-book/swarm-app/README.md create mode 100644 ddd-book/swarm-app/app/.DS_Store create mode 100644 ddd-book/swarm-app/app/app.py create mode 100644 ddd-book/swarm-app/app/static/.DS_Store create mode 100644 ddd-book/swarm-app/app/static/css/.DS_Store create mode 100644 ddd-book/swarm-app/app/static/css/main.css create mode 100644 ddd-book/swarm-app/app/static/images/.DS_Store create mode 100644 ddd-book/swarm-app/app/static/images/bkp image.png create mode 100644 ddd-book/swarm-app/app/static/images/image.png create mode 100644 ddd-book/swarm-app/app/templates/error.html create mode 100644 ddd-book/swarm-app/app/templates/index.html create mode 100644 ddd-book/swarm-app/compose.yaml create mode 100644 ddd-book/swarm-app/requirements.txt create mode 100644 ddd-book/web-app-0.2/.DS_Store create mode 100644 ddd-book/web-app-0.2/Dockerfile create mode 100644 ddd-book/web-app-0.2/README.md create mode 100644 ddd-book/web-app-0.2/app.js create mode 100644 ddd-book/web-app-0.2/package.json create mode 100644 ddd-book/web-app-0.2/views/home.pug create mode 100644 ddd-book/web-app/.DS_Store create mode 100644 ddd-book/web-app/Dockerfile create mode 100644 ddd-book/web-app/README.md create mode 100644 ddd-book/web-app/app.js create mode 100644 ddd-book/web-app/package.json create mode 100644 ddd-book/web-app/views/home.pug create mode 100644 useful_commands.md create mode 100644 web_server/notes.md diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4d92b67 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ddd-book"] + path = ddd-book + url = https://github.com/nigelpoulton/ddd-book.git diff --git a/ddd-book/README.md b/ddd-book/README.md new file mode 100644 index 0000000..51a9856 --- /dev/null +++ b/ddd-book/README.md @@ -0,0 +1,7 @@ +# Docker Deep Dive + +This repos contains the apps and config files for the 2023 edition of Docker Deep Dive. + +### Folders and container images + +**multi-container:** Compose app and app code. Used to build `` diff --git a/ddd-book/multi-contianer/.DS_Store b/ddd-book/multi-contianer/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..99e9a789e58b19b3983c7d8eefa34ec219265caa GIT binary patch literal 6148 zcmeHK-AcnS6i(dKlp*v&(aV6h1NS2;cvI?p0V{f;GFv*dSevqL_F@crt1sl6_&lDI zq~O@DMcg@%eCIc5K4^XzW89y{UB+C-n1F`JQCT7AUK!f3$%q`sDDo&(5m=v5ZexEP z@Y@?KWI4;D^5^%bNipekzW7F?xw*A1glLI};8~TyB%DkOKOEnob*)qy)p{7+B%^ZZ z?p~;D5+>PbtP7HO1S$8oNfxWpSJNymbZuY)!f~9TyFZ)t&)Txr>&)A7cG~N=<#G39 zK6k|4;nDfk@FjiC)VpDm1KC=3EY|P=ie1cGFwRnyJ%OjruCoY<0b+m{AO_Z)0edir z)|&G`%O?hifn^48e~{1+J&Tn=y>&o`*Jq435m7+Lw*;cJ=vk}`LIi}HQb1G6?GuBW za_~!==UJ=_nsUbV%rK6fxqiHGJv;cNPG{URNIfw?3@kFxFs6&=|0Vn~DcGq&fGY-a#~b%$XapaB3Jm9V~o%>zPq(m7c$ zBV=T1ju=jZQIQ9U4CcJ;fMvik@YWchv%3TZl;ESzp5L1wPvW9%wf?Y$T77Y8nRC9% zkG*p_@=CuP7F~bvoxTpGOoD0O502t!)NibRm09V>Su{`qaTuY?k8g1n%28Jiv#?OH zo;GmDar%u9a_X(f%$pc1+UD~;;vz($n- zh;}Du&j#5q%YbFzzhZ#ZdtR@LDVeu*E;)K@1?mYZ3HenT mRR}ibIaVEdia(+%L7SisqHD0yh$ATWM?leF8_U3pGH?gPoU5e( literal 0 HcmV?d00001 diff --git a/ddd-book/multi-contianer/app/app.py b/ddd-book/multi-contianer/app/app.py new file mode 100644 index 0000000..b932428 --- /dev/null +++ b/ddd-book/multi-contianer/app/app.py @@ -0,0 +1,25 @@ +import time +import redis +from flask import Flask, render_template + +app = Flask(__name__) +cache = redis.Redis(host='redis', port=6379) + +def get_hit_count(): + retries = 5 + while True: + try: + return cache.incr('hits') + except redis.exceptions.ConnectionError as exc: + if retries == 0: + raise exc + retries -= 1 + time.sleep(0.5) + +@app.route("/") +def index(): + count = get_hit_count() + return render_template('index.html', count=count) + +if __name__ == "__main__": + app.run(host="0.0.0.0", port=8080, debug=True) diff --git a/ddd-book/multi-contianer/app/static/.DS_Store b/ddd-book/multi-contianer/app/static/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5ccf80dd127eb0f5fb40c7d62d00759233098179 GIT binary patch literal 6148 zcmeHK!EO^V5FIz6cv~Um04hgITqBXB2#~mJ({Sa$A~*mFyWLf~Vs{;7H;GUbX|Eu0 zs8oIhet>W22lPvrv8SR@+8!aQJkrdwJsz*;Nw#+YK=h|^7oY_I5|yyIgXRh$Kk1rm z@rZ{gXpM3lWjey%uV}nB+YLAd90Qxi0G-_i96=EZb`Fthe7*Pr6T+OHV#{^!UZ=;pZ$b^jFKCz{|$SJ;n?8 zh7C?88+C&tonO9&*putQfUha}eEifBUxml(o^KSU90QJlTg8BA4uU}+Q{uOEEjfB?73wEc q5}H?AG$CmCIW`S?iXWmHL7$=qqR&`c#1RztBVcH7#xd|u8TbPn(5aIE literal 0 HcmV?d00001 diff --git a/ddd-book/multi-contianer/app/static/css/.DS_Store b/ddd-book/multi-contianer/app/static/css/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 + + + + Error page + + + Throwing an error + + diff --git a/ddd-book/multi-contianer/app/templates/index.html b/ddd-book/multi-contianer/app/templates/index.html new file mode 100644 index 0000000..199fc90 --- /dev/null +++ b/ddd-book/multi-contianer/app/templates/index.html @@ -0,0 +1,20 @@ + + + + + Suck my pipa + + + + NP logo +
+
+

Suck my pipa

+
+
+
+

Hit refresh if you think Sunderland AFC are the greatest football team in the world ;-)

+

You've refreshed bibas {{ count }} times

+
+ + diff --git a/ddd-book/multi-contianer/compose.yaml b/ddd-book/multi-contianer/compose.yaml new file mode 100644 index 0000000..ea34379 --- /dev/null +++ b/ddd-book/multi-contianer/compose.yaml @@ -0,0 +1,24 @@ +networks: + counter-net: + +volumes: + counter-vol: + +services: + web-fe: + build: . + command: python app.py + ports: + - target: 8080 + published: 5001 + networks: + - counter-net + volumes: + - type: volume + source: counter-vol + target: /app + redis: + image: "redis:alpine" + networks: + counter-net: + diff --git a/ddd-book/multi-contianer/requirements.txt b/ddd-book/multi-contianer/requirements.txt new file mode 100644 index 0000000..770a967 --- /dev/null +++ b/ddd-book/multi-contianer/requirements.txt @@ -0,0 +1,3 @@ +flask +redis +jinja2 \ No newline at end of file diff --git a/ddd-book/multi-stage/.DS_Store b/ddd-book/multi-stage/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..821370678c12ed043a19a1be89c1ba28d557d865 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8CKMqDMUM+!3%1&-;3dTR0!H+pQWH}&m}X0pnnNk%sxRc5_&m<+ zZotx>MeGdhe)GGV{UH0p7~|eF>M-Uo#w=)v9F-MZ z1Acp*J+Tps!s6%mCvldy+h4p^Z)|LCS(eqb9{d+s_<4{|GcTCjp>-`~5>|Q;-o(RV z;Otz;G!No*I8g<0G=!A<+c=G6;mK(lWvbTK0n4`SfwMQ8b$cz*>zvJ7Vs?6T+!Ec+ z$$V~Gy9bBoSA*ANl*)I_CI_;WY#XfL0~E8EH-C~QGJOV5m0e{K5(C5lF+dEgIRoZk zu$pVm11+BzAO@Bh!2Ll$Lv#(68r9YT9bTU?-ateF9p4g&!k}xg)Cds}u1f)RDK}3H zuFJtMOrC47)TqlDS2M#nX6EYg!qx2H7b=}`S0nYr05P!0KwX;-p8uEd%dC9lFP4x+ z3=jkVi~-*0`+W}6<>6T?pglrE!MqX`5YQJc0bt-hvafMR&*I=m;M?t?T Q2c(ODB7{0(;1?M91`qy8C;$Ke literal 0 HcmV?d00001 diff --git a/ddd-book/multi-stage/Dockerfile b/ddd-book/multi-stage/Dockerfile new file mode 100644 index 0000000..35e9cee --- /dev/null +++ b/ddd-book/multi-stage/Dockerfile @@ -0,0 +1,16 @@ +FROM golang:1.20-alpine AS base +WORKDIR /src +COPY go.mod go.sum . +RUN go mod download +COPY . . + +FROM base AS build-client +RUN go build -o /bin/client ./cmd/client + +FROM base AS build-server +RUN go build -o /bin/server ./cmd/server + +FROM scratch AS prod +COPY --from=build-client /bin/client /bin/ +COPY --from=build-server /bin/server /bin/ +ENTRYPOINT [ "/bin/server" ] diff --git a/ddd-book/multi-stage/Dockerfile-final b/ddd-book/multi-stage/Dockerfile-final new file mode 100644 index 0000000..08ff162 --- /dev/null +++ b/ddd-book/multi-stage/Dockerfile-final @@ -0,0 +1,19 @@ +FROM golang:1.20-alpine AS base +WORKDIR /src +COPY go.mod go.sum . +RUN go mod download +COPY . . + +FROM base AS build-client +RUN go build -o /bin/client ./cmd/client + +FROM base AS build-server +RUN go build -o /bin/server ./cmd/server + +FROM scratch AS prod-client +COPY --from=build-client /bin/client /bin/ +ENTRYPOINT [ "/bin/client" ] + +FROM scratch AS prod-server +COPY --from=build-server /bin/server /bin/ +ENTRYPOINT [ "/bin/server" ] diff --git a/ddd-book/multi-stage/README.md b/ddd-book/multi-stage/README.md new file mode 100644 index 0000000..5f6e314 --- /dev/null +++ b/ddd-book/multi-stage/README.md @@ -0,0 +1,9 @@ +# Multi-stage builds + +This example is based on the [Docker sample buildme repo])(https://github.com/dockersamples/buildme) and contains a simple client server app written on Go. + +## App code + +The app code is in the `cmd` directory but you don't need to interact with the app code or be a Go programmer. + + diff --git a/ddd-book/multi-stage/cmd/client/main.go b/ddd-book/multi-stage/cmd/client/main.go new file mode 100644 index 0000000..4c98781 --- /dev/null +++ b/ddd-book/multi-stage/cmd/client/main.go @@ -0,0 +1,19 @@ +package main + +import ( + "fmt" + "os" +) + +func main() { + err := ping() + if err != nil { + fmt.Println(err.Error()) + os.Exit(1) + } + err = start() + if err != nil { + fmt.Println(err.Error()) + os.Exit(1) + } +} diff --git a/ddd-book/multi-stage/cmd/client/request.go b/ddd-book/multi-stage/cmd/client/request.go new file mode 100644 index 0000000..6bf0d59 --- /dev/null +++ b/ddd-book/multi-stage/cmd/client/request.go @@ -0,0 +1,39 @@ +package main + +import ( + "errors" + "fmt" + "io" + "net/http" + "net/url" + "os" +) + +var baseURL string = "http://localhost" +var port string = "3000" +var requestUrl string = fmt.Sprintf("%s:%s?s=", baseURL, port) + +func ping() error { + res, err := http.Get(requestUrl) + if err != nil { + return err + } + if res.StatusCode != http.StatusOK { + return errors.New("failed to establish server connection") + } + return nil +} + +func getTranslation(msg string) string { + translationRequest := requestUrl + url.QueryEscape(msg) + response, err := http.Get(translationRequest) + if err != nil { + fmt.Printf("[error] http request failed: %s", err) + os.Exit(1) + } + body, err := io.ReadAll(response.Body) + if err != nil { + fmt.Printf("[error] failed to parse server response: %s", err) + } + return string(body) +} diff --git a/ddd-book/multi-stage/cmd/client/ui.go b/ddd-book/multi-stage/cmd/client/ui.go new file mode 100644 index 0000000..33bd4d3 --- /dev/null +++ b/ddd-book/multi-stage/cmd/client/ui.go @@ -0,0 +1,105 @@ +package main + +import ( + "fmt" + "strings" + + "github.com/charmbracelet/bubbles/textinput" + "github.com/charmbracelet/bubbles/viewport" + tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" +) + +func start() error { + p := tea.NewProgram(initialModel(), tea.WithAltScreen()) + + _, err := p.Run() + return err +} + +type ( + errMsg error +) + +type model struct { + viewport viewport.Model + messages []string + textinput textinput.Model + exitHint lipgloss.Style + err error +} + +func initialModel() model { + ti := textinput.New() + ti.Placeholder = "Translate a message..." + ti.Focus() + + ti.CharLimit = 42 + + ti.Width = 42 + + vp := viewport.New(42, 2) + vp.SetContent(`Hit Enter to translate.`) + vp.Style = lipgloss.NewStyle(). + BorderStyle(lipgloss.RoundedBorder()). + BorderForeground(lipgloss.Color("69")). + Padding(0, 1). + MarginLeft(1) + + return model{ + textinput: ti, + messages: []string{}, + viewport: vp, + exitHint: lipgloss.NewStyle().Faint(true).MarginLeft(1), + err: nil, + } +} + +func (m model) Init() tea.Cmd { + return textinput.Blink +} + +func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + var ( + tiCmd tea.Cmd + vpCmd tea.Cmd + ) + + m.textinput, tiCmd = m.textinput.Update(msg) + m.viewport, vpCmd = m.viewport.Update(msg) + + switch msg := msg.(type) { + case tea.KeyMsg: + switch msg.Type { + case tea.KeyCtrlC, tea.KeyEsc: + fmt.Println(m.textinput.Value()) + return m, tea.Quit + case tea.KeyEnter: + translated := getTranslation(m.textinput.Value()) + + m.messages = append( + m.messages, + "Input: "+m.textinput.Value(), + "Translation: "+translated, + ) + m.viewport.SetContent(strings.Join(m.messages, "\n")) + m.textinput.Reset() + m.viewport.GotoBottom() + } + + // We handle errors just like any other message + case errMsg: + m.err = msg + return m, nil + } + + return m, tea.Batch(tiCmd, vpCmd) +} + +func (m model) View() string { + return fmt.Sprintf( + "\n%s\n%s\n", + m.textinput.View(), + m.viewport.View(), + ) + m.exitHint.Render("Ctrl+C to exit.") +} diff --git a/ddd-book/multi-stage/cmd/server/main.go b/ddd-book/multi-stage/cmd/server/main.go new file mode 100644 index 0000000..68898d9 --- /dev/null +++ b/ddd-book/multi-stage/cmd/server/main.go @@ -0,0 +1,29 @@ +package main + +import ( + "log" + "net/http" + + "github.com/go-chi/chi/v5" + "github.com/go-chi/chi/v5/middleware" +) + +// version is defined using build args +var version string + +func main() { + if version != "" { + log.Printf("Version: %s", version) + } + r := chi.NewRouter() + r.Use(middleware.Logger) + r.Get("/", func(w http.ResponseWriter, r *http.Request) { + msg := r.URL.Query().Get("s") + translated := translate(msg) + w.Write([]byte(translated)) + }) + + log.Println("Starting server...") + log.Println("Listening on HTTP port 3000") + log.Fatal(http.ListenAndServe(":3000", r)) +} diff --git a/ddd-book/multi-stage/cmd/server/translate.go b/ddd-book/multi-stage/cmd/server/translate.go new file mode 100644 index 0000000..bbcc5d3 --- /dev/null +++ b/ddd-book/multi-stage/cmd/server/translate.go @@ -0,0 +1,28 @@ +package main + +import ( + "strings" + "unicode" +) + +func translate(msg string) string { + msg = strings.ToLower(msg) + var b strings.Builder + for _, char := range msg { + if unicode.IsLetter(char) { + switch char { + case 'a', 'e', 'i', 'o', 'u', 'y', 'å', 'ä', 'ö': + b.WriteRune(char) + default: + b.WriteRune(char) + b.WriteRune('o') + b.WriteRune(char) + } + continue + } + if unicode.IsSpace(char) { + b.WriteRune(' ') + } + } + return b.String() +} diff --git a/ddd-book/multi-stage/go.mod b/ddd-book/multi-stage/go.mod new file mode 100644 index 0000000..cb9f503 --- /dev/null +++ b/ddd-book/multi-stage/go.mod @@ -0,0 +1,28 @@ +module github.com/dvdksn/buildme + +go 1.20 + +require ( + github.com/charmbracelet/bubbles v0.14.0 + github.com/charmbracelet/bubbletea v0.23.1 + github.com/charmbracelet/lipgloss v0.6.0 + github.com/go-chi/chi/v5 v5.0.0 +) + +require ( + github.com/atotto/clipboard v0.1.4 // indirect + github.com/aymanbagabas/go-osc52 v1.0.3 // indirect + github.com/containerd/console v1.0.3 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.13.0 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/text v0.3.7 // indirect +) diff --git a/ddd-book/multi-stage/go.sum b/ddd-book/multi-stage/go.sum new file mode 100644 index 0000000..f1892a3 --- /dev/null +++ b/ddd-book/multi-stage/go.sum @@ -0,0 +1,60 @@ +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aymanbagabas/go-osc52 v1.0.3 h1:DTwqENW7X9arYimJrPeGZcV0ln14sGMt3pHZspWD+Mg= +github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= +github.com/charmbracelet/bubbles v0.14.0 h1:DJfCwnARfWjZLvMglhSQzo76UZ2gucuHPy9jLWX45Og= +github.com/charmbracelet/bubbles v0.14.0/go.mod h1:bbeTiXwPww4M031aGi8UK2HT9RDWoiNibae+1yCMtcc= +github.com/charmbracelet/bubbletea v0.21.0/go.mod h1:GgmJMec61d08zXsOhqRC/AiOx4K4pmz+VIcRIm1FKr4= +github.com/charmbracelet/bubbletea v0.23.1 h1:CYdteX1wCiCzKNUlwm25ZHBIc1GXlYFyUIte8WPvhck= +github.com/charmbracelet/bubbletea v0.23.1/go.mod h1:JAfGK/3/pPKHTnAS8JIE2u9f61BjWTQY57RbT25aMXU= +github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= +github.com/charmbracelet/lipgloss v0.5.0/go.mod h1:EZLha/HbzEt7cYqdFPovlqy5FZPj0xFhg5SaqxScmgs= +github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87inij9N3wJY= +github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= +github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/go-chi/chi/v5 v5.0.0 h1:DBPx88FjZJH3FsICfDAfIfnb7XxKIYVGG6lOPlhENAg= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= +github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34= +github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho= +github.com/muesli/cancelreader v0.2.0/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68/go.mod h1:Xk+z4oIWdQqJzsxyjgl3P22oYZnHdZ8FFTHAQQt5BMQ= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= +github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= +github.com/muesli/termenv v0.13.0 h1:wK20DRpJdDX8b7Ek2QfhvqhRQFZ237RGRO0RQ/Iqdy0= +github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/ddd-book/swarm-app/.DS_Store b/ddd-book/swarm-app/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9a0a61fde440163d9145d8ca2ec245aceb51dafb GIT binary patch literal 6148 zcmeHK%}T>S5Z<*_6N-?7LXQhx3$|5S!Apqs1&ruHr6#0kFlIxOnnNk%tS{t~_&m<+ zZop#BB6bFLzxmzGevtiPjB#%f4H$D6V-_?-j!J`|yD_w7k`XzMk!N8dL$E%=%*6gW z;J3F}z%rJF<@fJT;=JhhKlxUxy}h$*Sysoo_n&0x7eTSeyA-V=DjcV(F4zJG`ZzH0Bj&BJ>VbC>LX@m#}*QJ2El$$38 z*X7_BCeJlkY1HM6tC?XOGjsiT;c9m93zg2etC4zQfEZY3pruU*&;JYfWf~v(>m_6n z1H`~TV}Q3O{=|btnX~oB^6;z`&>o8hZP3)CUcHCSoHQP8i- Q0qG*32%(M`_yq>O0Hst(e*gdg literal 0 HcmV?d00001 diff --git a/ddd-book/swarm-app/Dockerfile b/ddd-book/swarm-app/Dockerfile new file mode 100644 index 0000000..28a19c6 --- /dev/null +++ b/ddd-book/swarm-app/Dockerfile @@ -0,0 +1,16 @@ +# Base image +FROM python:alpine + +# Copy app, templates and views +COPY . /app + +# Set working directory for subsequent commands +WORKDIR /app + +# Install dependencies +RUN pip install -r requirements.txt + +EXPOSE 8080 + +# Command to run when container starts +ENTRYPOINT ["python", "app/app.py"] diff --git a/ddd-book/swarm-app/README.md b/ddd-book/swarm-app/README.md new file mode 100644 index 0000000..4b4673b --- /dev/null +++ b/ddd-book/swarm-app/README.md @@ -0,0 +1,21 @@ +# Simple counter-app for demonstrating Docker Compose +Flask app that counts page refreshes in Redis backend and displays the name of the container that services each request. + +**Used in:** +- Docker Deep Dive book 2023 edition + +**Pre-built image:** [](https://hub.docker.com/repository/docker/nigelpoulton/ddd-book/) **tag:** `swarm-app` + +### v2 app + +The `swarm-appv2` tag was built by making two changes to the app. + +Changing the image referenced in `index.html` from `image.png` to `wasm.ong` and changing the text. + +Changing the CSS to: + +``` +header { + background-color: #5a2d8c; +``` + diff --git a/ddd-book/swarm-app/app/.DS_Store b/ddd-book/swarm-app/app/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7e66bfe64afe676b81fa33ec73ca0a4ce4d41b14 GIT binary patch literal 6148 zcmeHK%}(Pm5FSGT2ZYqaBK2r#ua%(eiX!bLbju5n6&%=ANk{|{NgOpPJyex)Uc}RI z;Q@GnJ?#VVB+S^ZL@7Tv{^XIypY55kGoNHT0|2Zu2wMPk0N|*EwPkD`5werc$efuW zBU5X{a2yPaJV<0P<83D_1D1jJ#sHn&MJS*IA9ectUI%#+7v;vre>OK?TUcD;oUiad z-l-gVrC$z;j^96|(Jv{JVAA)4{Wu!->R*1!tn}k7>Z^b_jL_xxL7ath*pY)QEL5zg z4cu{@UcE6IZM9oXvDw}pH^r#E`K>9wx3{Bg4F~Xp0u+oSY6sAKFbtp3>2Gij?SJ1D1hL#Q>{yy>16nGH>fla`e^;)FV_9@~bqe l5NynItUB}*H&B(JO;88XHCSoH85H{?plGm-W#CmAxC1U;tStZl literal 0 HcmV?d00001 diff --git a/ddd-book/swarm-app/app/app.py b/ddd-book/swarm-app/app/app.py new file mode 100644 index 0000000..1ea2928 --- /dev/null +++ b/ddd-book/swarm-app/app/app.py @@ -0,0 +1,27 @@ +import time +import redis +from flask import Flask, render_template +import socket + +app = Flask(__name__) +cache = redis.Redis(host='redis', port=6379) + +def get_hit_count(): + retries = 5 + while True: + try: + return cache.incr('hits') + except redis.exceptions.ConnectionError as exc: + if retries == 0: + raise exc + retries -= 1 + time.sleep(0.5) + +@app.route("/") +def index(): + count = get_hit_count() + hostname = socket.gethostname() + return render_template('index.html', hostname=hostname, count=count) + +if __name__ == "__main__": + app.run(host="0.0.0.0", port=8080, debug=True) diff --git a/ddd-book/swarm-app/app/static/.DS_Store b/ddd-book/swarm-app/app/static/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1d2574a9d953c02d790490f71210e881e131907c GIT binary patch literal 6148 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%0DJN5yl}u`YD*{lEH{{3p?5AZU7jJgF?e zp&6DX{{wSD{2|6;k-ML%k#F6tDV zzaFU{-&%7Io~)D@W#IzQG${3GE8R-%X&7nf^%V(YH;y~=kniYdm?9$SNWG2BauOha zC3yOWKKFZ6R(A)qy&oyB4i{QWSXx!tB3r#ow=m3`97T`Eb3QcVPaV`ULeXX|*chA$z{{*?3 zWCkveZtLKnkHJF20Dwhs#Pzo?V_0M&K~T^z%Fxnh9{ca(P9|7Q-F2pJRW2=JH;e7*D$4hsb(E2$(= JBW4`(e*mo47TN#+ literal 0 HcmV?d00001 diff --git a/ddd-book/swarm-app/app/static/images/image.png b/ddd-book/swarm-app/app/static/images/image.png new file mode 100644 index 0000000000000000000000000000000000000000..9a39855188ddf98faf5621ce8a95ab28155ded2e GIT binary patch literal 49300 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

{U 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 + + + + Error page + + + Throwing an error + + diff --git a/ddd-book/swarm-app/app/templates/index.html b/ddd-book/swarm-app/app/templates/index.html new file mode 100644 index 0000000..33b7186 --- /dev/null +++ b/ddd-book/swarm-app/app/templates/index.html @@ -0,0 +1,20 @@ + + + + + Docker FTW + + + + NP logo +

+
+

Docker FTW

+
+
+
+

Request served by {{ hostname }}

+

You've refreshed {{ count }} times

+
+ + \ No newline at end of file diff --git a/ddd-book/swarm-app/compose.yaml b/ddd-book/swarm-app/compose.yaml new file mode 100644 index 0000000..09d6ec6 --- /dev/null +++ b/ddd-book/swarm-app/compose.yaml @@ -0,0 +1,42 @@ +# Un-comment the version field if you get an 'unsupported Compose file version: 1.0' ERROR + +#version: '3.8' +networks: + counter-net: + driver: overlay + driver_opts: + encrypted: 'yes' +volumes: + counter-vol: + +services: + web-fe: + image: nigelpoulton/ddd-book:swarm-app + command: python app.py + deploy: + replicas: 4 + update_config: + parallelism: 2 + delay: 10s + failure_action: rollback + placement: + constraints: + - 'node.role == worker' + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + networks: + - counter-net + ports: + - published: 5001 + target: 8080 + volumes: + - type: volume + source: counter-vol + target: /app + redis: + image: "redis:alpine" + networks: + counter-net: diff --git a/ddd-book/swarm-app/requirements.txt b/ddd-book/swarm-app/requirements.txt new file mode 100644 index 0000000..770a967 --- /dev/null +++ b/ddd-book/swarm-app/requirements.txt @@ -0,0 +1,3 @@ +flask +redis +jinja2 \ No newline at end of file diff --git a/ddd-book/web-app-0.2/.DS_Store b/ddd-book/web-app-0.2/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f28aa74d77acd22275fdb767529a2844ce4a109e GIT binary patch literal 6148 zcmeHK%}T>S5Z<+|CKMqDMUM+!3%1&-;3d@h0!H+pQX3L97_+5Gn?ot&sxRc5_&m<+ zZlJ|@6|pn0`_0bJZsvpR4`Yn?r$L7?hcRYBL*%Gb2%0Nh8zvZ$t2t6XPse^N{fcS+ zrU}2j!DcLCAW$4U%d(o*gZC_RFB@gkv_G2M;pke**e~^w ze-nlI(Al|=Nj8d-aH0~TAcT%lWqRiR)tvozy1++(KC>U3u0s{KVB>)DvkL)X__6yV@&NWzQ V#97d;(gEorpa`Lk82AMSz5vkVO5*?k literal 0 HcmV?d00001 diff --git a/ddd-book/web-app-0.2/Dockerfile b/ddd-book/web-app-0.2/Dockerfile new file mode 100644 index 0000000..470c592 --- /dev/null +++ b/ddd-book/web-app-0.2/Dockerfile @@ -0,0 +1,19 @@ +# Test web-app to use with Pluralsight courses and Docker Deep Dive book +FROM alpine + +LABEL maintainer="nigelpoulton@hotmail.com" + +# Install Node and NPM +RUN apk add --update nodejs npm curl + +# Copy app to /src +COPY . /src + +WORKDIR /src + +# Install dependencies +RUN npm install + +EXPOSE 8080 + +ENTRYPOINT ["node", "./app.js"] diff --git a/ddd-book/web-app-0.2/README.md b/ddd-book/web-app-0.2/README.md new file mode 100644 index 0000000..01acf49 --- /dev/null +++ b/ddd-book/web-app-0.2/README.md @@ -0,0 +1,15 @@ +# Readme + +Used to build the `web0.2` tag with three books listed instead of 2. + +Exposes web server on port `8080` as per `./app.js` + +See `Dockerfile` for more details + +Referenced in: +- [Docker Deep Dive book][1] + +**The app is maintained approximately once per year so may contain vulnerbilities.** + + +[1]: https://www.amazon.com/Docker-Deep-Dive-Nigel-Poulton/dp/1521822808/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr= \ No newline at end of file diff --git a/ddd-book/web-app-0.2/app.js b/ddd-book/web-app-0.2/app.js new file mode 100644 index 0000000..cb5b4e8 --- /dev/null +++ b/ddd-book/web-app-0.2/app.js @@ -0,0 +1,17 @@ +// Sample node.js web app for Pluralsight Docker CI course +// For demonstration purposes only +'use strict'; + +var express = require('express'), + app = express(); + +app.set('views', 'views'); +app.set('view engine', 'pug'); + +app.get('/', function(req, res) { + res.render('home', { + }); +}); + +app.listen(8080); +module.exports.getApp = app; diff --git a/ddd-book/web-app-0.2/package.json b/ddd-book/web-app-0.2/package.json new file mode 100644 index 0000000..b2ff584 --- /dev/null +++ b/ddd-book/web-app-0.2/package.json @@ -0,0 +1,15 @@ +{ + "name": "container-web-test", + "private": true, + "version": "0.0.5", + "description": "Demo app for web container demonstrations", + "main": "app.js", + "author": "Nigel Poulton (https://nigelpoulton.com)", + "license": "May contain vulnerabilities!", + "dependencies": { + "express": "4.18.2", + "pug": "3.0.2", + "mocha": "10.2.0", + "supertest": "6.3.3" + } +} diff --git a/ddd-book/web-app-0.2/views/home.pug b/ddd-book/web-app-0.2/views/home.pug new file mode 100644 index 0000000..877f86a --- /dev/null +++ b/ddd-book/web-app-0.2/views/home.pug @@ -0,0 +1,18 @@ +html + head + title='Docker FTW' + link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css') + body + div.container + div.jumbotron + h1 Hello Docker learners!!! + h2 New book: The KCNA Book + p + a.btn.btn-primary(href="https://www.amazon.com/Quick-Start-Kubernetes-Nigel-Poulton-ebook/dp/B08T21NW4Z/ref=sr_1_1?dchild=1&keywords=quick+start+kubernetes&qid=1625132469&sr=8-1" target="_blank") Quick Start Kubernetes + + a.btn.btn-outline-primary(href="https://www.amazon.com/Kubernetes-Book-Version-November-2018-ebook/dp/B072TS9ZQZ/ref=sr_1_1?dchild=1&keywords=the+kubernetes+book&qid=1625132902&sr=8-1" target="_blank") The Kubernetes Book + + a.btn.btn-primary(href="https://www.amazon.com/KCNA-Book-Kubernetes-Native-Associate/dp/1916585035/ref=sr_1_1?crid=2DWVNBALQCOZD&keywords=kcna+book&qid=1684705492&sprefix=kcna+bo%2Caps%2C336&sr=8-1" target="_blank") The KCNA Book + + p + p Be careful. The last time I updated the packages in this app was May 2023. \ No newline at end of file diff --git a/ddd-book/web-app/.DS_Store b/ddd-book/web-app/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ff3c3e3445038cb543c9a956885f7291fc2df18b GIT binary patch literal 6148 zcmeHK%}T>S5Z>*NCKMqDg&r5Y7Hq9m#7n641&ruHr8XpJFlI}WnnNk%tS{t~_&m<+ zZlJ~BQN+%`?l(I>yO|HNKa4RxoCiI|9LAUh4UwZ#A!x32)l4uVS97F(o=*K(`W4gs zO%r~5lfANtg)C>Q-~ZuH<0#F#-A`VtH=0}9mSwf9d+$l+UN*_*>2NZ;#nF|Nv0v&F z|2hiuv9o(FlWYtv!aFD{6}@`1B$mk|Sj&tul8_i628aP- zU^5vo=YiGQ%<`#fVt^RkQQO(82Tn0)Cmw zNB(*Wjfeqa;GZ$T8zXNtgrdyZ`mH=XYX!6iXebz0paKH=+9d!6xR11zQ~L$#5a${! VG~z61SLuLs5m1CsM-2P|17A;|OBVnD literal 0 HcmV?d00001 diff --git a/ddd-book/web-app/Dockerfile b/ddd-book/web-app/Dockerfile new file mode 100644 index 0000000..470c592 --- /dev/null +++ b/ddd-book/web-app/Dockerfile @@ -0,0 +1,19 @@ +# Test web-app to use with Pluralsight courses and Docker Deep Dive book +FROM alpine + +LABEL maintainer="nigelpoulton@hotmail.com" + +# Install Node and NPM +RUN apk add --update nodejs npm curl + +# Copy app to /src +COPY . /src + +WORKDIR /src + +# Install dependencies +RUN npm install + +EXPOSE 8080 + +ENTRYPOINT ["node", "./app.js"] diff --git a/ddd-book/web-app/README.md b/ddd-book/web-app/README.md new file mode 100644 index 0000000..6533b8b --- /dev/null +++ b/ddd-book/web-app/README.md @@ -0,0 +1,13 @@ +# Simple web app for Docker Deep Dive book + +Exposes web server on port `8080` as per `./app.js` + +See `Dockerfile` for more details + +Referenced in: +- [Docker Deep Dive][1] + +**The app is maintained approximately once per year so may contain vulnerbilities.** + + +[1]: https://www.amazon.com/Docker-Deep-Dive-Nigel-Poulton/dp/1521822808/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr= \ No newline at end of file diff --git a/ddd-book/web-app/app.js b/ddd-book/web-app/app.js new file mode 100644 index 0000000..cb5b4e8 --- /dev/null +++ b/ddd-book/web-app/app.js @@ -0,0 +1,17 @@ +// Sample node.js web app for Pluralsight Docker CI course +// For demonstration purposes only +'use strict'; + +var express = require('express'), + app = express(); + +app.set('views', 'views'); +app.set('view engine', 'pug'); + +app.get('/', function(req, res) { + res.render('home', { + }); +}); + +app.listen(8080); +module.exports.getApp = app; diff --git a/ddd-book/web-app/package.json b/ddd-book/web-app/package.json new file mode 100644 index 0000000..b2ff584 --- /dev/null +++ b/ddd-book/web-app/package.json @@ -0,0 +1,15 @@ +{ + "name": "container-web-test", + "private": true, + "version": "0.0.5", + "description": "Demo app for web container demonstrations", + "main": "app.js", + "author": "Nigel Poulton (https://nigelpoulton.com)", + "license": "May contain vulnerabilities!", + "dependencies": { + "express": "4.18.2", + "pug": "3.0.2", + "mocha": "10.2.0", + "supertest": "6.3.3" + } +} diff --git a/ddd-book/web-app/views/home.pug b/ddd-book/web-app/views/home.pug new file mode 100644 index 0000000..96ce3b2 --- /dev/null +++ b/ddd-book/web-app/views/home.pug @@ -0,0 +1,17 @@ +html + head + title='Docker FTW' + link(rel='stylesheet', href='https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css') + body + div.container + div.jumbotron + h1 Hello Docker learners!!! + h2 Check out my other books + p + a.btn.btn-primary(href="https://www.amazon.com/Quick-Start-Kubernetes-Nigel-Poulton-ebook/dp/B08T21NW4Z/ref=sr_1_1?dchild=1&keywords=quick+start+kubernetes&qid=1625132469&sr=8-1" target="_blank") Quick Start Kubernetes + + a.btn.btn-outline-primary(href="https://www.amazon.com/Kubernetes-Book-Version-November-2018-ebook/dp/B072TS9ZQZ/ref=sr_1_1?dchild=1&keywords=the+kubernetes+book&qid=1625132902&sr=8-1" target="_blank") The Kubernetes Book + + p + p Be careful. The last time I updated the packages in this app was May 2023. + diff --git a/useful_commands.md b/useful_commands.md new file mode 100644 index 0000000..f278c7a --- /dev/null +++ b/useful_commands.md @@ -0,0 +1,36 @@ +# Get containers list +``` +docker ps -a +``` + +# Remove container by ID +``` +docker rm <> +``` + +# Run container with name +``` +docker run --name some_name -ti ubuntu:latest /bin/bash +``` + +# Stop container +``` +docker stop <> +``` + +# Inspect docker container stats +``` +docker inspect <> +``` + +# Set restart policy to conatiner +``` +docker run -d --restart (always|unless-stoppe|on-failure) +``` + +# Run container detached +``` +docker run -d ... +``` +`-d` flag instructs the container to run in detached mode + diff --git a/web_server/notes.md b/web_server/notes.md new file mode 100644 index 0000000..e69de29