ใครที่ใช้ Docker กันอยู่น่าจะรู้ว่าถ้าเราไม่ได้ระบุชื่อ container (--name container_name) ตอนที่เรารัน มันจะสร้างชื่อสุ่มๆมาให้ เช่น
$ docker run -d --hostname my-rabbit rabbitmq:3-management
bbf6843f716bb17ba91527b2181a5b363a35004954b0dd19f05c8fb442260bc0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbf6843f716b rabbitmq:3-management "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp dreamy_booth
ได้ชื่อ dreamy_booth
มา ทีนี้อยากรู้มั้ยว่า ชื่อนี้มันมาได้ยังไง
ผมลองไปค้นดูแล้วก็เจอโค้ดที่ทำหน้าที่สุ่มชื่อนี้อยู่ที่นี่ https://github.com/moby/moby/blob/master/pkg/namesgenerator/names-generator.go
จะเห็นว่ามี array สอง array คือ left กับ right ที่รวมรายชื่อจากไหนก็ไม่รู้มา แต่ว่าตัว array ฝั่ง right เองมี comment บอกไว้ว่า
// Docker, starting from 0.7.x, generates names from notable scientists and hackers.
// Please, for any amazing man that you add to the list, consider adding an equally amazing woman to it, and vice versa.
จะเป็นชื่อของ scientists หรือ hackers ที่มีชื่อเสียงนั่นเอง
เช่น booth
ที่ผมได้ คนนี้คือ
// Kathleen Booth, she's credited with writing the first assembly language. https://en.wikipedia.org/wiki/Kathleen_Booth
"booth",
คนเริ่มต้นสร้างภาษา Assembly นั่นเอง 😲
ทีนี้มาดูโค้ดที่ใช้สุ่มชื่อจากในลิสต์นี้กัน
// GetRandomName generates a random name from the list of adjectives and surnames in this package
// formatted as "adjective_surname". For example 'focused_turing'. If retry is non-zero, a random
// integer between 0 and 10 will be added to the end of the name, e.g `focused_turing3`
func GetRandomName(retry int) string {
begin:
name := fmt.Sprintf("%s_%s", left[rand.Intn(len(left))], right[rand.Intn(len(right))])
if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
goto begin
}
if retry > 0 {
name = fmt.Sprintf("%s%d", name, rand.Intn(10))
}
return name
}
จะเห็นว่าจะเอาชื่อจากด้านซ้าย ซึ่งเขาบอกว่าเป็นคำ adjectives และนามสกุลของคนที่มีชื่อเสียงที่อยู่ในลิสต์ด้านขวา เอามาต่อกันโดยคั่นด้วย _
ก็มีเรื่อง retry ด้วยนิดหน่อยคงเพราะถ้าสุ่มแล้วชื่อไปชนกับที่รันไว้อยู่แล้วก็เอาเลขไปต่อท้ายเพื่อกันชื่อซ้ำนั่นเอง
ที่ตลกคือถ้าสุ่มได้ "boring_wozniak"
จะกลับไปซุ่มใหม่อีกรอบ 😂
นี่ละก็เป็นที่มาของชื่อที่เราเห็นเวลาเราไม่ได้ระบุชื่อให้กับตอนรัน docker container
Top comments (0)