{"id":23923965,"url":"https://github.com/gotoren/docker-hands-on","last_synced_at":"2025-02-23T23:15:45.870Z","repository":{"id":128786025,"uuid":"320064452","full_name":"GotoRen/docker-hands-on","owner":"GotoRen","description":"Dockerハンズオン Builder pattern (single-stage build), Multi-stage builds","archived":false,"fork":false,"pushed_at":"2020-12-28T14:35:17.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-05T18:52:23.785Z","etag":null,"topics":["docker","dockerfile","go","shell"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GotoRen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-09T19:55:02.000Z","updated_at":"2021-01-06T12:46:11.000Z","dependencies_parsed_at":"2023-03-31T03:36:40.425Z","dependency_job_id":null,"html_url":"https://github.com/GotoRen/docker-hands-on","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GotoRen%2Fdocker-hands-on","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GotoRen%2Fdocker-hands-on/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GotoRen%2Fdocker-hands-on/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GotoRen%2Fdocker-hands-on/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GotoRen","download_url":"https://codeload.github.com/GotoRen/docker-hands-on/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240390713,"owners_count":19793782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","dockerfile","go","shell"],"created_at":"2025-01-05T18:51:55.718Z","updated_at":"2025-02-23T23:15:45.851Z","avatar_url":"https://github.com/GotoRen.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# docker-hands-on\n- イメージサイズの軽量化\n  - ビルダーパターン（シングルステージビルド）\n  - マルチステージビルド\n\n## __『Builder pattern (Single Stage Build)』__\n## 🚀 Usage\n```\n### Dockerfileのビルド（ShellScriptを実行）\n$ sh build.sh\n  \n### Dockerfileの実行\n$ docker run -d -p 8081:8081 --name test01 ren1007/single\n\n### 確認\n=== * 起動するDockerコンテナ * ===\n$ docker ps\nCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES\n90536aac534f        ren1007/single      \"./app\"             9 seconds ago       Up 8 seconds        0.0.0.0:8081-\u003e8081/tcp   test01\n\n=== * 作成されるDockerイメージ * ===\n$ docker images\nren1007/single              latest              c524533c2160        About a minute ago   11.7MB\nren1007/single              build               3c842df2a673        About a minute ago   693MB\n      \n### コンテナに入る \u0026 ディレクトリの確認\n$ docker exec -it test01 sh\n~ # pwd\n/root\n~ # ls\napp\n\n### ローカルホスト8081番ポートにcurlを投げる\n$ curl localhost:8081 -i\nHTTP/1.1 200 OK\nDate: Wed, 09 Dec 2020 19:27:07 GMT\nContent-Length: 13\nContent-Type: text/plain; charset=utf-8\n    \nHello, World!    \n```\n\n## ✨ Description\n- `Dockerfile.build`\n  - `FROM`：goのイメージを取得\n  - `WORKDIR`：コンテナ内作業ディレクトリを設定\n  - `COPY`：`Dockerfile.build`と同階層に存在する`app.go`を`WORKDIR`に配置\n  - `RUN`：コマンドを実行（`app.go`の実行ファイルを作成）\n- `Dockerfile`\n  - `FROM`：alpineのイメージを取得\n  - `RUN`：alpineに証明書を付与\n  - `WORKDIR`：コンテナ内作業ディレクトリを設定\n  - `COPY`：`Dockerfile`と同階層に存在するapp.goを`WORKDIR`に配置\n  - `CMD`：コマンドを実行（`app.go`を実行）\n- `build.sh` \n  - スクリプトを実行すると`Dockerfile.build`イメージがビルドされる\n  - そこからコンテナを生成してイメージ内容をコピーし、`Dockerfile`イメージがビルドされる\n  - 良くないところ\n    - 2つのイメージはそれなりの容量をとる\n      - `build`（`Dockerfile.build`）：693MB\n      - `latest`（`Dockerfile`）：11.7MB\n    - 実行形式ファイル`app`も残ったまま\n\n##  __『Multi Stage Builds』__\n## 🚀 Usage\n```\n### Dockerfileのビルド\ndocker build -t ren1007/multi:latest .\n\n### Dockerfileの実行\ndocker run -d -p 8081:8081 --name test02 ren1007/multi\n\n### 確認\n=== * 起動するDockerコンテナ * ===\nCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES\n53a1b1670e95        ren1007/multi       \"./main\"            2 minutes ago       Up 2 minutes        0.0.0.0:8081-\u003e8081/tcp   test02\n\n=== * 作成されるDockerイメージ * ===\nREPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE\nren1007/multi               latest              4a4897be940a        7 minutes ago       13.1MB\n\n### ローカルホスト8081番ポートにcurlを投げる\nHTTP/1.1 200 OK\nDate: Wed, 09 Dec 2020 20:27:23 GMT\nContent-Length: 13\nContent-Type: text/plain; charset=utf-8\n\nHello, World!\n```     \n\n## ✨ Description\n- `Dockerfile`\n  - `FROM`：基となるDockerイメージの指定\n  - `ENV`：go modulesの設定\n  - `WORKDIR`：デフォルトで`/go`が`WORKDIR`になっているため`/go/src/app`に変更\n  - `COPY`：docker-hands-onのfileを`WORKDIR`に追加\n  - `RUN`：go modulesのダウンロード\n  - `RUN`：goの実行ファイルを作成\n  - \u003cu\u003e`FROM`：マルチステージビルド\u003c/u\u003e\u003cbr\u003e\n  → `alpine:latest`をベースイメージとして新たなビルドステージを開始\n  - \u003cu\u003e`COPY`：上のイメージ内に生成された内容をコピーして使用\u003c/u\u003e\n  - `CMD`：goを実行\n- ビルダーパターンに比べて生成されるイメージは1つで済む\n  - イメージに含めたくない内容は生成しないようにする\n- イメージサイズを小さくできる\n  - `latest`（`Dockerfile`）：13.1MB\n\n## 📝 Reference\n- [Docker Document for Multi Stage Build](https://matsuand.github.io/docs.docker.jp.onthefly/develop/develop-images/multistage-build/)  \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgotoren%2Fdocker-hands-on","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgotoren%2Fdocker-hands-on","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgotoren%2Fdocker-hands-on/lists"}