跳到主要內容

發表文章

目前顯示的是有「docker」標籤的文章

Spring boot with docker

Spring boot with docker Spring-boot 官方教學: https://spring.io/guides/gs/spring-boot-docker/ , 做法跟設定跟官方教學有些不太一樣, 不考慮用 maven plugin 維護 docker images, 方便 devOps 統一管理。 Set up Spring-boot 先建立 spring-boot 專案, 專案命名為 demo-docker-spring 建立 controller, 簡單 echo Hello Docker World package com.example.demo; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by jerry on 2018/1/15. * * @author jerry */ @Slf4j @RestController public class Controller { @RequestMapping("/") public String home() { return "Hello Docker World"; } } Dockerfile docker 官方不支援 oracle-java, 所以找了一個 star 較高的 image 來用。 Dockerfile 就直接放在專案底下。 # https://hub.docker.com/_/java/ 不支援 oracle-java # FROM: 指定 base image (https://hub.docker.com/r/cogniteev/oracle-java/) FROM cogniteev/oracle-java # expose 8080 port EXPOSE 8080 # 複製當前路徑所有資料, 到容器裡面 COPY . /usr/app/demo-...

Docker Concept and Best Practice

Docker 參考 GitBook - Docker Practice 鏡像(Image)和容器(Container)的關係,就像是 OOP (Object-oriented Programming) 中的 class 和 instance 一樣, Image 是靜態的定義, Container 是 Image 運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。 基本的運作方式像這樣, 參考 這份PPT Developer Best Practice Keep Images Small 確保 Images 越小越好, 跟 layers 越少越好, 這樣啟動的速度就越快. Layers 指的是在 Dockerfile 的每一行指令, 代表一個 layer, 例如下面這份 Dockfile 就代表 6 Layers. FROM ubuntu:15.04 COPY . /app RUN apt-get -y update RUN apt-get install -y python RUN make /app CMD python /app/app.py 可以修改為 4 layers. FROM ubuntu:15.04 COPY . /app RUN apt-get -y update && apt-get install -y python && make /app CMD python /app/app.py Layers 的說明: 參考 JDK 的開發者, 可以考慮 Docker 官方建議的 OpenJDK Image , 官方目前不支援 oracle-jdk 呦。 Multiple Build , 在一份 Dockerfile 同時使用不同來源的 image, 可以避免同時維護多個 dockerfiles, 參考: 用 Docker Multi-Stage 編譯出 Go 語言最小 Image 如果有多個 images 擁有相同的 common, 可以考慮建立一個 base image , 類似父層級的 image, docker 會協助做快取來加速其他 image 的啟動. 在建立多個 images 時, 可以透過 tags 的指令做管理, 不要依賴 latest 的 tag. Where and...

用 shell 解析 Json 的好工具 jq

JQ tutorial Sample $docker network inspect bridge [{ "Name": "bridge", "Id": ""fake-id", "Created": "2017-07-05T01:07:55.747497179Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [{ "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" }] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "b59a12af7c87621b43c95a9adbcf047076b8a4b6b6ce0d6c5e6e48e21188ce6a": { "Name": "heuristic_rosalind", "EndpointID": "fake-endpoint-id", "MacAddr...