Skip to content

Commit 5c20c7c

Browse files
committed
update
1 parent 652cd18 commit 5c20c7c

File tree

7 files changed

+153
-1
lines changed

7 files changed

+153
-1
lines changed

Diff for: SUMMARY.md

+11-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
- [Repository](docker/000-intro/repository/README.md)
2121
- [Registry](docker/000-intro/registry/README.md)
2222

23+
- [command reference](docker/basic/command_ref/README.md)
24+
2325
- [Lab 101: Docker Image](docker/basic/101-image/README.md)
2426

2527
- [help](docker/basic/101-image/help/README.md)
@@ -38,11 +40,15 @@
3840
- [exec, attach](docker/basic/102-container/exec/README.md)
3941
- [rm](docker/basic/102-container/rm/README.md)
4042

41-
- [Lab 104: Registry](docker/basic/103-registry/README.md)
43+
- [Lab 103: Registry](docker/basic/103-registry/README.md)
4244

4345
- [distribution private](docker/basic/103-registry/distribution-private/README.md)
4446
- [distribution public](docker/basic/103-registry/distribution-public/README.md)
4547

48+
- Lab 104: dockerfile
49+
50+
- [CMD vs entrypoint](docker/basic/104-dockerfile/entrypoint/README.md)
51+
4652
- [Lab 201: Docker volume](docker/basic/201-volume/README.md)
4753

4854
- [create, inspect](docker/basic/201-volume/create/README.md)
@@ -94,6 +100,10 @@
94100
- [運行](docker/project/java/mvn-run/README.md)
95101
- [打包](docker/project/java/mvn-package/README.md)
96102

103+
- Lab 702: docker-compose
104+
- [run and up](docker/compose/run_up/README.md)
105+
- [其他指令](docker/compose/other_command/README.md)
106+
97107
- Lab 703: java 範例專案使用 docker-compose 進行建置 (1 hour)
98108

99109
- [練習:製作 dev mode service](docker/pratice/compose-dev-mode.md)

Diff for: docker/basic/104-dockerfile/entrypoint/README.md

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
CMD 與 ENTRYPOINT 的差別
2+
========================
3+
4+
下列內容來源:[論docker中 CMD 與 ENTRYPOINT 的區別](http://www.programfish.com/blog/?p=151)
5+
6+
Dockerfile裏有 CMD 與 ENTRYPOINT 兩個功能咋看起來很相似的指令,開始的時候覺得兩個互用沒什麽所謂,但其實並非如此。
7+
8+
CMD
9+
---
10+
11+
> The main purpose of a CMD is to provide defaults for an executing container.
12+
13+
CMD在容器運行的時候提供一些命令及參數,用法如下:
14+
15+
### type 1
16+
17+
`CMD ["executable","param1","param2"](exec form, this is the preferred form)`
18+
19+
運行一個可執行的文件並提供參數。
20+
21+
### type 2
22+
23+
`CMD ["param1","param2"](as default parameters to ENTRYPOINT)`
24+
25+
為ENTRYPOINT指定參數。
26+
27+
### type 3
28+
29+
`CMD command param1 param2 (shell form)`
30+
31+
(shell form):是以”/bin/sh -c”的方法執行的命令。
32+
33+
ENTRYPOINT  
34+
-------------
35+
36+
字面意思是進入點,而它的功能也恰如其意。
37+
38+
> An ENTRYPOINT allows you to configure a container that will run as an executable.
39+
40+
它可以讓你的容器功能表現得像一個可執行程序一樣。
41+
42+
容器功能表現得像一個可執行程序一樣,這是什麽意思呢?
43+
44+
使用下面的 ENTRYPOINT 建置 image:
45+
46+
`ENTRYPOINT ["/bin/echo"]`
47+
48+
docker build 出來的鏡像以後的容器功能就像一個 /bin/echo
49+
50+
比如我 build 出來的鏡像名稱叫 imageecho,那麽我可以這樣用它:
51+
52+
docker run -it imageecho “this is a test”
53+
54+
`ENTRYPOINT ["/bin/cat"]`
55+
56+
build 出來的鏡像你可以這樣運行 (假設名為 st):
57+
58+
`docker run -it st /etc/fstab`
59+
60+
這樣相當: /bin/cat /etc/fstab 這個命令的作用。運行之後就輸出 `/etc/fstab` 裏的內容。
61+
62+
ENTRYPOINT有兩種寫法:
63+
64+
### type 1
65+
66+
ENTRYPOINT ["executable", "param1", "param2"](the preferred exec form)
67+
68+
### type 2
69+
70+
ENTRYPOINT command param1 param2 (shell form)
71+
72+
你也可以在 docker run 命令時使用 --entrypoint 指定(但是只能用 type 1)。
73+
74+
CMD 可以為 ENTRYPOINT 提供參數,ENTRYPOINT 本身也可以包含參數, 但是你可以把那些可能需要變動的參數寫到 CMD 裏而把那些不需要變動的參數寫到 ENTRYPOINT 裏面例如:
75+
76+
```
77+
FROM ubuntu:14.10
78+
ENTRYPOINT ["top", "-b"]
79+
CMD ["-c"]
80+
```
81+
82+
把可能需要變動的參數寫到 CMD 裏面。然後你可以在 docker run 裏指定參數,這樣 CMD 裏的參數(這裏是 -c) 就會被覆蓋掉而 ENTRYPOINT 裏的不被覆蓋。

Diff for: docker/basic/command_ref/README.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# 指令圖解
2+
3+
![](docker-hub.png)
4+
5+
![](docker-stages.png)

Diff for: docker/basic/command_ref/docker-hub.png

74.5 KB
Loading

Diff for: docker/basic/command_ref/docker-stages.png

87.1 KB
Loading

Diff for: docker/compose/other_command/README.md

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
其他有用指令
2+
------
3+
4+
### extends
5+
6+
可以繼承於某一個特定的 docker-compose-yml
7+
8+
ex:
9+
10+
```
11+
extends:
12+
file: common.yml
13+
service: webapp
14+
```
15+
16+
### Variable substitution
17+
18+
與 extends 類似,不過可以透過 env 變數進行相關參數替換
19+
20+
ex:
21+
22+
```
23+
db:
24+
image: "postgres:${POSTGRES_VERSION}"
25+
```

Diff for: docker/compose/run_up/README.md

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
run and up
2+
==========
3+
4+
run
5+
---
6+
7+
使用 run 時,預設將沒辦法讓共享的 port 可以被 expose 出去
8+
9+
也就是說假若妳用 run 啟動了一個 web 將沒有辦法讓啟動完成的 docker 可以被外部連結
10+
11+
但使用 docker compose 用於在 jenkins 自動化測試時,在 docker 內運行的錯誤將可以被正確回傳 exit code
12+
13+
如此一來,就可以正確反應 test 狀態。
14+
15+
不過運行 run 不能 expose 的問題已被解決,目前可以使用:
16+
17+
1. 希望開啟特定 service 的 port 但不想被掛到 host: service-ports
18+
19+
EX: docker-compose run --service-ports mysql web
20+
21+
2. 要將特定 port 掛到 host 可以使用: --publish or -p
22+
23+
docker-compose run --publish 1337:1337 web
24+
25+
up
26+
--
27+
28+
基本上就會將在 docker compose 中有開啟的 port 還有掛載到 host 的 port,
29+
30+
以及對應 links 相關的 Containers 一次啟動完成。

0 commit comments

Comments
 (0)