2023年4月22日 星期六

〈開經偈〉

.


.

無上甚深微妙法,

百千萬劫難遭遇;

我今見聞得受持,

願解如來真實義。

.

2023年1月8日 星期日

docker 之獨孤九劍

...


... ... ...

docker 之獨孤九劍

... ... ...


1. install Docker Desktop:

refer to: https://docs.docker.com/desktop/

$ docker info
$ docker run hello-world

.

2. Docker Images to Containers

// List images
// Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
$ docker images

// docker run: Run a command in a new container
// Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
// docker run -ti: terminal interactive (可互動模式)
$ docker run -ti ubuntu:latest bash

// List containers
// Usage:  docker ps [OPTIONS]
$ docker ps

// List containers -all
$ docker ps -a

// List containers -latest
// Show the latest created container (includes all states): 列出最後 created 的 container, 通常用於看不正常關閉的 container
$ docker ps -l
.

3. Docker Containers to Images (docker commit)

docker run -ti ubuntu:latest bash
# touch AaA_IMAGE_V2
docker ps -l
docker images

// docker commit: Create a new image from a container's changes
// Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit  3597f6ac186f  ubuntu-test:2.0
等同於
// docker tag: Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
// Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
$ docker tag 0eb2c4ef97cd05e22d316195efdeb908289b0bf1aa8adf157da4955c00e8e505 ubuntu-test:2.0

// Verify
docker run -ti  ubuntu-test:2.0 bash
.

4. Docker run

// docker run --rm : Automatically remove the container when it exits (若 exit; 自動移除 container)
docker run --rm -ti ubuntu-test:2.0  sleep 5

docker run -ti ubuntu bash -c "sleep 3; echo all done"

// docker run -d: --detach Run container in background and print container ID
// [AaA]: 就是類似 nohup 的概念, 在背景執行.
docker run -d -ti ubuntu bash

docker ps
// 從 detach 恢復到 attach mode
docker attach lucid_rosalind

// [AaA]:密技 亦可以在 terminal 按 Ctrl+p Ctrl+q 達到 detach 的境界
.

5. Docker exec

// docker exec: Run a command in a running container; 通常用於 debug & DBA administration
// Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

$ docker exec -ti lucid_rosalind bash
// or 

docker exec -ti lucid_rosalind cat test.txt
.

6. Docker logs

// docker logs: Fetch the logs of a container
// Usage:  docker logs [OPTIONS] CONTAINER

// 範例把 cat 打錯成 catt
docker run --name example -d ubuntu bash -c "catt /etc/passwd"

docker logs example
bash: line 1: catt: command not found
.

7. Stopping and Removing Containers

docker run -ti ubuntu bash


// docker kill: Kill one or more running containers
// Usage:  docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker ps
docker kill cranky_lamarr

// docker rm: Remove one or more containers (對正在 running 的 container 無效, 必須先 kill 再 rm)
// Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm cranky_lamarr

.
// 移除 images 的指令:
// docker rmi: Remove one or more images
// Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]
.

8. Exposing ports: docker port

// docker run -p outside-port:inside-port/protocol (tcp/udp)

// docker port: List port mappings or a specific mapping for the container
// Usage:  docker port CONTAINER [PRIVATE_PORT[/PROTO]]
docker run --rm -ti -p 12345:12345 -p 12346:12346 --name echo-server ubuntu:14.04 bash

docker port echo-server
12345/tcp -> 0.0.0.0:12345
12346/tcp -> 0.0.0.0:12346

在第一視窗 listen port 12345 & 12346
nc -lp 12345 | nc -lp 12346

在第二視窗
$ docker run --rm -ti ubuntu:14.04 bash
nc host.docker.internal 12345

在第三視窗
docker run --rm -ti ubuntu:14.04 bash
nc host.docker.internal 12346
.
// [AaA]: 若前面不指定 outside-port, 則會隨機作 port mapping dynamically
.
// UDP example
docker run --rm -ti -p 23456:23456/udp --name echo-server ubuntu:14.04 bash

在第一視窗
nc -ulp 23456

在第二視窗
docker ps
docker port echo-server
docker run --rm -ti ubuntu:14.04 bash
nc -u host.docker.internal 23456
.

9. 無招勝有招 docker --help

.
.
.
// End.

2022年7月11日 星期一

原子習慣 Atomic Habits

.
















.

人們會把你的行為反射回你的身上,
  越常幫助別人, 別人就越願意幫助你,
    在與他人每一次的互動中表現得更良善一些,
      隨著時間過去, 就會形成一張
                                            寬廣而強韌的人際網路.
 
--- 原子習慣 Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones
      詹姆斯‧克利爾 James Clear

.

2022年6月18日 星期六

SRE, DevOps, K8S, MicroServices, MERN, MongoDB, Domain-Driven Design (DDD)

..
.
1. SRE = Site Reliability Engineering = 網站可靠性工程師 (from Google) 
.


2. DevOps = Dev + Ops
.
SRE is a DevOps.
DevOps is NOT a SRE.
DevOps 並不是一個 "工作職稱",SRE 才是。
.


3. K8S = Kubernetes 是一個可以幫助我們管理微服務(microservices)的系統,他可以自動化地部署及管理多台機器上的多個容器(Container)。
.


4. MicroServices (微服務) : 是一種開發軟體的方法, 有別於 單體式架構(monolithic)。
.


5. MERN = MongoDB, Express.js, React and Node.js
用於開發動態網站和網路應用的 JavaScript 套件組合。它是自由及開放原始碼軟體。
MERN Stack 包含 前端 及 後端. 所以我們又稱 全端。
.


6. MongoDB :
是一種文件導向的資料庫管理系統,用C++等語言撰寫而成,以解決應用程式開發社群中的大量現實問題。MongoDB 由 MongoDB Inc. 於2007年10月開發,2009年2月首度推出,現以伺服器端公共授權(SSPL)分發。
.


7. Domain-Driven Design 領域驅動設計(DDD) :
is an approach to software development that centers the development on programming a domain model that has a rich understanding of the processes and rules of a domain. The name comes from a 2003 book by Eric Evans that describes the approach through a catalog of patterns.

Domain-Driven Design 領域驅動設計(DDD) 是一種基於領域知識來解決複雜商業問題的軟體開發方法論。
.


...


// 2022.06.18(六) AaA