锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓 Go璇█鍐崇瓥
if 璇彞
if璇彞鍖呭惈涓涓竷?yōu)當琛ㄨ緫旨忓悗璺熶竴涓垨澶氫釜璇彞
璇硶
if璇彞鍦℅o緙栫▼璇█鐨勮娉曟槸錛?/p>
if(boolean_expression)
{
/* statement(s) will execute if the boolean expression is true */
}
濡傛灉甯冨皵琛ㄨ揪寮忕殑鍊間負 true錛岄偅涔坕f璇彞閲岄潰浠g爜鍧楀皢琚墽琛屻傚鏋渋f璇彞鐨勭粨鏉?鍙沖ぇ鎷彿鍚?
甯冨皵琛ㄨ揪寮忕殑鍊間負false錛岄偅涔堣鍙ヤ箣鍚庣涓琛屼唬鐮佷細琚墽琛屻?/p>
渚嬪瓙錛?/p>
package main import "fmt" func main() { /* local variable definition */ var a int = 10 /* check the boolean condition using if statement */ if( a < 20 ) { /* if condition is true then print the following */ fmt.Printf("a is less than 20\n" ) } fmt.Printf("value of a is : %d\n", a) }璁╂垜浠紪璇戝拰榪愯涓婇潰鐨勭▼搴忥紝榪欏皢浜х敓浠ヤ笅緇撴灉錛?/p>
a is less than 20; value of a is : 10
if else 璇彞
if璇彞鍙互璺熺潃涓涓彲閫夌殑else璇彞錛屽竷?yōu)當琛ㄨ緫旨忔槸鍋囨椂瀹冭鎵ц銆?/p>
璇硶
鍦℅o緙栫▼璇█涓殑if ... else璇彞鐨勮娉曟槸錛?/p>
if(boolean_expression) { /* statement(s) will execute if the boolean expression is true */ } else { /* statement(s) will execute if the boolean expression is false */ }濡傛灉甯冨皵琛ㄨ揪寮忕殑鍊間負true錛岄偅涔坕f浠g爜鍧楀皢琚墽琛岋紝鍚﹀垯else浠g爜鍧楀皢琚墽琛?/p>
渚嬪瓙錛?/p>
package main import "fmt" func main() { /* local variable definition */ var a int = 100; /* check the boolean condition */ if( a < 20 ) { /* if condition is true then print the following */ fmt.Printf("a is less than 20\n" ); } else { /* if condition is false then print the following */ fmt.Printf("a is not less than 20\n" ); } fmt.Printf("value of a is : %d\n", a); }褰撲笂榪頒唬鐮佽緙栬瘧鍜屾墽琛屾椂錛屽畠浜х敓浜嗕互涓嬬粨鏋滐細
a is not less than 20; value of a is : 100
if...else if...else 璇彞
if璇彞鍙互璺熺潃涓涓彲閫夌殑else if ... else璇彞錛岃繖鏄潪甯告湁鐢ㄧ殑浣跨敤鍗曚釜 if...else if 璇彞澹版槑嫻嬭瘯鍚勭鏉′歡銆?/p>
褰撲嬌鐢╥f , else if , else璇彞鏈夊嚑鐐硅璁頒綇浣跨敤錛?/p>
if鍙互鏈夐浂鎴栦竴涓猠lse錛屽畠蹇呴』璺熶粠else if鍚庨潰銆?/p>
涓涓猧f鍙互鏈夐浂鍒頒釜澶歟lse if騫朵笖瀹冧滑蹇呴』鍦╡lse涔嬪墠銆?/p>
涓鏃︿竴涓猠lse if嫻嬭瘯鎴愬姛錛屽叾瀹冧換浣曞墿浣檈lse if灝嗕笉浼氳嫻嬭瘯銆?/p>
璇硶
if...else if...else鍦℅o緙栫▼璇█涓鍙ョ殑璇硶鏄細
if(boolean_expression 1) { /* Executes when the boolean expression 1 is true */ } else if( boolean_expression 2) { /* Executes when the boolean expression 2 is true */ } else if( boolean_expression 3) { /* Executes when the boolean expression 3 is true */ } else { /* executes when the none of the above condition is true */ }渚嬪瓙錛?/p>
package main import "fmt" func main() { /* local variable definition */ var a int = 100 /* check the boolean condition */ if( a == 10 ) { /* if condition is true then print the following */ fmt.Printf("Value of a is 10\n" ) } else if( a == 20 ) { /* if else if condition is true */ fmt.Printf("Value of a is 20\n" ) } else if( a == 30 ) { /* if else if condition is true */ fmt.Printf("Value of a is 30\n" ) } else { /* if none of the conditions is true */ fmt.Printf("None of the values is matching\n" ) } fmt.Printf("Exact value of a is: %d\n", a ) }璁╂垜浠紪璇戝拰榪愯涓婇潰鐨勭▼搴忥紝榪欏皢浜х敓浠ヤ笅緇撴灉
None of the values is matching Exact value of a is: 100
switch 璇彞
switch璇彞鍙互璁╀竴涓彉閲忓鍙嶅鍊肩殑鍒楄〃騫崇瓑榪涜嫻嬭瘯銆傛瘡涓艱縐頒負涓涓殑鎯呭喌(case)錛?/p>
鍙橀噺琚帴閫氭鏌ユ瘡涓紑鍏崇洅(switch case)銆?/p>
鍦℅o緙栫▼錛宻witch鏈変袱縐嶇被鍨嬨?/p>
琛ㄨ揪寮廠witch - 鍦ㄨ〃杈懼紡switch錛宑ase鍖呭惈鐩告瘮杈冿紝switch琛ㄨ揪寮忕殑鍊箋?/span>
綾誨瀷Switch - 鍦ㄨ繖綾誨瀷switch錛屾鏃跺惈鏈夎繘琛屾瘮杈冪壒孌婃敞鏄庡紑鍏寵〃杈懼紡鐨勭被鍨嬨?/span>
琛ㄨ揪寮廠witch
鍦℅o緙栫▼璇█涓〃杈緎witch璇彞鐨勮娉曞涓嬶細
switch(boolean-expression or integral type){ case boolean-expression or integral type : statement(s); case boolean-expression or integral type : statement(s); /* you can have any number of case statements */ default : /* Optional */ statement(s); }浠ヤ笅瑙勫垯閫傜敤浜巗witch璇彞錛?/p>
鍦╯witch璇彞涓嬌鐢ㄧ殑琛ㄨ揪寮忓繀欏誨叿鏈夋暣浣撴垨甯冨皵琛ㄨ揪寮忥紝鎴栬呮槸涓涓被鍨嬶紝鍏朵腑鎵榪扮被鍏鋒湁
涓涓崟涓鐨勮漿鎹㈠嚱鏁幫紝浠ヤ竴涓暣浣撴垨甯冨皵鍊箋傚鏋滆〃杈句笉閫氳繃錛岄粯璁ゅ兼槸true銆?span style="font-family: 寰蔣闆呴粦, sans-serif;">鍙互鏈変換鎰忔暟
閲忕殑case璇彞鍦╯witch鍐呫傛瘡涓猚ase鍚庤窡鍊艱繘琛屾瘮杈冿紝浠ュ強涓涓啋鍙楓?/span>constant-expression
鐨勬儏鍐碉紝蹇呴』鏄浉鍚岀殑鏁版嵁綾誨瀷錛屽湪switch鐨勫彉閲忥紝瀹冨繀欏繪槸涓涓父閲?/span>鎴栨枃瀛椼?/span>
褰撳彉閲忚鎺ラ氱瓑浜巆ase鐨勫鹼紝浠ヤ笅case涓皢鎵ц璇彞銆傚湪case璇彞涓璪reak涓嶆槸蹇呴渶銆?/p>
switch璇彞鍙互鏈変竴涓彲閫夐粯璁ゆ儏鍐典笅錛屽畠蹇呴』鍑虹幇鍦ㄥ紑鍏崇粨鏉熴傜己鐪佹儏鍐典笅錛屽彲鐢ㄤ簬鎵ц浠?/p>
鍔℃椂娌℃湁鐨刢ase涓簍rue銆傚垯case鍦ㄩ粯璁ゆ儏鍐典笅涔熶笉鏄繀欏葷殑銆?/p>
渚嬪瓙
package main import "fmt" func main() { /* local variable definition */ var grade string = "B" var marks int = 90 switch marks { case 90: grade = "A" case 80: grade = "B" case 50,60,70 : grade = "C" default: grade = "D" } switch { case grade == "A" : fmt.Printf("Excellent!\n" ) case grade == "B", grade == "C" : fmt.Printf("Well done\n" ) case grade == "D" : fmt.Printf("You passed\n" ) case grade == "F": fmt.Printf("Better try again\n" ) default: fmt.Printf("Invalid grade\n" ); } fmt.Printf("Your grade is %s\n", grade ); }褰撲笂榪頒唬鐮佽緙栬瘧鍜屾墽琛屾椂錛屽畠浜х敓浜嗕互涓嬬粨鏋滐細
Well done Excellent! Your grade is A
綾誨瀷Switch
鍦℅o緙栫▼璇█鐨勪竴涓被鍨媠witch璇彞鐨勮娉曞涓嬶細
switch x.(type){ case type: statement(s); case type: statement(s); /* you can have any number of case statements */ default: /* Optional */ statement(s); }浠ヤ笅瑙勫垯閫傜敤浜巗witch璇彞錛?/p>
鍦╯witch璇彞涓嬌鐢ㄥ繀欏繪湁鎺ュ彛鐨勫彉閲忚〃杈懼紡{}杈撳叆銆?/p>
鍦╯witch鍐呭彲浠ユ湁浠繪剰鏁伴噺case璇彞銆傛瘡涓縐峜ase鍚庤窡鐨勫艱繘琛屾瘮杈冿紝浠ュ強涓涓啋鍙楓?/p>
case 綾誨瀷蹇呴』鏄浉鍚岀殑鏁版嵁綾誨瀷錛屽湪switch鐨勫彉閲忥紝瀹冨繀欏繪槸涓涓湁鏁堢殑鏁版嵁綾誨瀷銆?/p>
褰撳彉閲忚鎺ラ氱瓑浜庢煇涓case涓殑鍊鹼紝浠ヤ笅case璇彞灝嗘墽琛屻傚湪case璇彞鍧楃殑break涓嶆槸蹇呴渶鐨勩?/p>
switch璇彞鍙互鏈変竴涓彲閫夐粯璁ase錛屽畠蹇呴』鍑虹幇鍦╯witch鐨勭粨鏉熴傜己鐪佹儏鍐典笅錛屽彲鐢ㄤ簬鎵ц
浠誨姟鏃舵病鏈夊尮閰峜ase鏃躲俤efault涓嶆槸蹇呴渶鐨勩?/p>
渚嬪瓙
package main import "fmt" func main() { var x interface{} switch i := x.(type) { case nil: fmt.Printf("type of x :%T",i) case int: fmt.Printf("x is int") case float64: fmt.Printf("x is float64") case func(int) float64: fmt.Printf("x is func(int)") case bool, string: fmt.Printf("x is bool or string") default: fmt.Printf("don't know the type") } }璁╂垜浠紪璇戝拰榪愯涓婇潰鐨勭▼搴忥紝榪欏皢浜х敓浠ヤ笅緇撴灉錛?/p>
type of x :<nil>
select璇彞
select璇彞鐨勮娉曞涓嬶細
select { case communication clause : statement(s); case communication clause : statement(s); /* you can have any number of case statements */ default : /* Optional */ statement(s); }浠ヤ笅瑙勫垯閫傜敤浜巗elect璇彞錛?/p>
鍙互鏈変換鎰忔暟閲忕殑鑼冨洿鍐呴夋嫨涓涓猚ase璇彞銆傛瘡涓縐嶆儏鍐典笅鍚庤窡鐨勫艱繘琛屾瘮杈冿紝浠ュ強涓涓啋鍙楓?/p>
瀵逛簬case鐨勭被鍨嬪繀欏繪槸涓涓氫俊閫氶亾鎿嶄綔銆?/p>
褰撻氶亾榪愯涓嬮潰鍙戠敓鐨勮鍙ヨ繖縐嶆儏鍐靛皢鎵ц銆傚湪case璇彞涓璪reak涓嶆槸蹇呴渶鐨勩?/p>
select璇彞鍙互鏈変竴涓彲閫夐粯璁ase錛屽畠蹇呴』鍑虹幇鍦╯elect鐨勭粨鏉熷墠銆傜己鐪佹儏鍐典笅錛屽彲鐢ㄤ簬鎵ц
浠誨姟鏃舵病鏈夌殑鎯呭喌涓嬫槸鐪熷疄鐨勩傚湪榛樿鎯呭喌涓媌reak涓嶆槸蹇呴渶鐨勩?/p>
渚嬪錛?/p>
package main import "fmt" func main() { var c1, c2, c3 chan int var i1, i2 int select { case i1 = <-c1: fmt.Printf("received ", i1, " from c1\n") case c2 <- i2: fmt.Printf("sent ", i2, " to c2\n") case i3, ok := (<-c3): // same as: i3, ok := <-c3 if ok { fmt.Printf("received ", i3, " from c3\n") } else { fmt.Printf("c3 is closed\n") } default: fmt.Printf("no communication\n") } } 璁╂垜浠紪璇戝拰榪愯涓婇潰鐨勭▼搴忥紝榪欏皢浜х敓浠ヤ笅緇撴灉錛?/p>
no communication
涓 Go 璇█甯擱噺
甯擱噺鏄寚璇ョ▼搴忓彲鑳芥棤娉曞湪鍏舵墽琛屾湡闂存敼鍙樼殑鍥哄畾鍊箋傝繖浜涘浐瀹氬間篃琚О涓烘枃瀛椼?/p>
甯擱噺鍙互鏄換浣曞儚涓涓暣鍨嬪父閲忥紝涓涓誕鐐瑰父閲忥紝瀛楃甯擱噺鎴栧瓧絎︿覆鏂囧瓧鐨勫熀鏈暟鎹被鍨嬨傝繕
鏈夋灇涓懼父閲忋?span style="font-family: 寰蔣闆呴粦, sans-serif;">甯擱噺鏄竴鏍鳳紝鍙槸瀹冧滑鐨勫間笉鑳借嚜宸卞畾涔夊悗榪涜淇敼甯歌鍙橀噺澶勭悊銆?/span>
鏁村艦甯擱噺
涓涓暣鏁版枃瀛椾篃鍙互鏈変竴涓悗緙涓篣鍜孡鐨勭粍鍚堬紝鍒嗗埆涓烘棤絎﹀彿鍜岄暱鏁村瀷銆傚悗緙鍙互鏄ぇ鍐欐垨灝?/p>
鍐欙紝騫朵笖鍙互浠ヤ換鎰忛『搴忋?span style="font-family: 寰蔣闆呴粦, sans-serif;">鍙互鏄崄榪涘埗錛屽叓榪涘埗錛屾垨鍗佸叚榪涘埗甯告暟銆傚墠緙鎸囧畾鍩烘垨鍩烘暟錛?x
鎴?0X 鐨勫崄鍏繘鍒訛紝0 琛ㄧず鍏繘鍒訛紝騫舵病鏈夊崄榪涘埗銆?/span>
鏁存暟甯擱噺鐨勪竴浜涗緥瀛愶細
212 /* Legal */
215u /* Legal */
0xFeeL /* Legal */
078 /* Illegal: 8 is not an octal digit */
032UU /* Illegal: cannot repeat a suffix */
涓嶅悓綾誨瀷鐨勬暣鍨嬪父閲忕殑渚嬪瓙錛?/p>
85 /* decimal */
0213 /* octal */
0x4b /* hexadecimal */
30 /* int */
30u /* unsigned int */
30l /* long */
30ul /* unsigned long */
嫻偣鏂囨湰(甯擱噺)
嫻偣瀛楅潰鍏鋒湁涓涓暣鏁伴儴鍒嗭紝涓涓皬鏁扮偣錛屼竴涓皬鏁伴儴鍒嗭紝鍜屼竴涓寚鏁伴儴鍒嗐備綘鍙互琛ㄧず鍗佽繘
鍒跺艦寮忔垨鎸囨暟褰㈠紡嫻偣鏂囧瓧銆?span style="font-family: 寰蔣闆呴粦, sans-serif;">鍚屾椂閲囩敤鍗佽繘鍒跺艦寮忚〃紺猴紝鍒欏繀欏誨寘鎷皬鏁扮偣錛屾寚鏁幫紝鎴栦袱鑰呭茍
鐢ㄨ屾寚鏁板艦寮忚〃紺猴紝鍒欏繀欏誨寘鎷暣鏁伴儴鍒嗭紝灝忔暟閮ㄥ垎錛屾垨鑰呬袱鑰呭吋鑰屾湁涔嬨傛湁絎﹀彿鐨勬寚鏁幫紝閫?/span>
榪噀鎴朎琛ㄧず銆?/span>
涓嬮潰鏄誕鐐歸潰鍊肩殑涓浜涗緥瀛愶細
3.14159 /* Legal */
314159E-5L /* Legal */
510E /* Illegal: incomplete exponent */
210f /* Illegal: no decimal or exponent */
.e55 /* Illegal: missing integer or fraction */
瀛楃涓叉枃瀛?/strong>
瀛楃涓叉枃瀛楁垨甯擱噺鐢ㄥ弻寮曞彿“”銆備竴涓瓧絎︿覆鍖呭惈綾諱技浜庡瓧絎︽枃瀛楀瓧絎︼細鏅氬瓧絎︼紝杞箟搴忓垪
鍜岄氱敤瀛楃銆?span style="font-family: 寰蔣闆呴粦, sans-serif;">鍙互浣跨敤瀛楃涓插拰鍒嗛殧浣跨敤絀烘牸鎵撶牬涓涓暱琛屾垚澶氳銆?/span>
"hello, dear"
"hello,
dear"
"hello, " "d" "ear"
const 鍏抽敭瀛?/strong>
package main
import "fmt"
func main() {
const LENGTH int = 10
const WIDTH int = 5
var area int
area = LENGTH * WIDTH
fmt.Printf("value of area : %d", area)
}
涔犳儻澶у啓瀹氫箟甯擱噺鏄竴涓壇濂界殑緙栫▼涔犳儻銆?/span>
浜?Go 璇█榪愮畻絎?/strong>
Go璇█鏈変赴瀵岀殑鍐呯疆榪愮畻絎﹀拰榪愮畻絎︼細
綆楁湳榪愮畻絎?/p>
鍏崇郴榪愮畻絎?/p>
閫昏緫榪愮畻絎?/p>
浣嶈繍綆楃
璧嬪艱繍綆楃
鍏跺畠榪愮畻絎?/p>
綆楁湳榪愮畻絎?/strong>
| 榪愮畻絎?/th> | 鎻忚堪 | 紺轟緥 |
|---|---|---|
| + | 涓や釜鎿嶄綔鏁扮浉鍔?/td> | A + B = 30 |
| - | 絎竴涓搷浣滄暟鍑忕浜屾搷浣滄暟 | A - B = -10 |
| * | 涓や釜鎿嶄綔鏁扮浉涔?/td> | A * B = 200 |
| / | 閫氳繃鍘誨垎瀛愰櫎浠ュ垎姣?/td> | B / A = 2 |
| % | 妯¤繍綆楀拰鏁存暟闄ゆ硶鍚庣殑浣欐暟 | B % A = 0 |
| ++ | 榪愮畻絎﹂掑鏁存暟鍊煎鍔犱竴 | A++ = 11 |
| -- | 榪愮畻絎﹂掑噺鏁存暟鍊煎噺涓 | A-- = 9 |
鍏崇郴榪愮畻絎?/strong>
| 榪愮畻絎?/th> | 鎻忚堪 | 紺轟緥 |
|---|---|---|
| == | 媯鏌ヤ袱涓搷浣滄暟鐨勫兼槸鍚︾浉絳夛紝濡傛灉鏄殑璇濋偅涔堟潯浠朵負鐪熴?/td> | (A == B) 涓嶄負 true. |
| != | 媯鏌ヤ袱涓搷浣滄暟鐨勫兼槸鍚︾浉絳夛紝濡傛灉鍊間笉鐩哥瓑錛屽垯鏉′歡鍙樹負鐪熴?/td> | (A != B) 涓簍rue. |
| > | 媯鏌ュ乏杈圭殑鎿嶄綔鏁扮殑鍊兼槸鍚﹀ぇ浜庡彸鎿嶄綔鏁扮殑鍊鹼紝濡傛灉鏄殑璇濋偅涔堟潯浠朵負鐪熴?/td> | (A > B) 涓嶄負 true. |
| < | 媯鏌ュ乏杈圭殑鎿嶄綔鏁扮殑鍊兼槸鍚﹀皬浜庡彸鎿嶄綔鏁扮殑鍊鹼紝濡傛灉鏄殑璇濋偅涔堟潯浠朵負鐪熴?/td> | (A < B) 涓?nbsp;true. |
| >= | 媯鏌ュ乏杈圭殑鎿嶄綔鏁扮殑鍊兼槸鍚﹀ぇ浜庢垨絳変簬鍙蟲搷浣滄暟鐨勫鹼紝濡傛灉鏄殑璇濋偅涔堟潯浠朵負鐪熴?/td> | (A >= B) 涓嶄負 true. |
| <= | 媯鏌ュ乏杈圭殑鎿嶄綔鏁扮殑鍊兼槸鍚﹀皬浜庢垨絳変簬鍙蟲搷浣滄暟鐨勫鹼紝濡傛灉鏄殑璇濋偅涔堟潯浠朵負鐪熴?/td> | (A <= B) 涓?nbsp;true |
閫昏緫榪愮畻絎?/span>
| && | 鎵璋撻昏緫涓庤繍綆楃銆傚鏋滀袱涓搷浣滄暟閮介潪闆訛紝鍒欐潯浠跺彉涓虹湡銆?/td> | (A && B) 涓?false. |
| || | 鎵璋撶殑閫昏緫鎴栨搷浣溿傚鏋滀換浣曚袱涓搷浣滄暟鏄潪闆訛紝鍒欐潯浠跺彉涓虹湡銆?/td> | (A || B) 涓?nbsp;true. |
| ! | 鎵璋撻昏緫闈炶繍綆楃銆備嬌鐢ㄥ弽杞搷浣滄暟鐨勯昏緫鐘舵併傚鏋滄潯浠朵負鐪燂紝閭d箞閫昏緫闈炴搷鍚庣粨鏋滀負鍋囥?/td> | !(A && B) 涓?nbsp;true. |
浣嶈繍綆楃
| p | q | p & q | p | q | p ^ q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
鍋囪錛屽鏋淎 =60;涓攂 =13;鐜板湪浠ヤ簩榪涘埗鏍煎紡瀹冧滑濡備笅錛?/p>
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
C璇█鏀寔浣嶈繍綆楃鍒楀湪濡備笅琛ㄣ傚亣璁懼彉閲廇=60鍜屽彉閲廈=13錛屽垯
鍏跺畠榪愮畻絎?/strong>
榪樻湁鍏朵粬涓浜涢噸瑕佺殑榪愮畻絎︼紝鍖呮嫭sizeof鍜?:鍦℅o璇█涓篃鏀寔銆?/p>
Go璇█榪愮畻絎︿紭鍏堢駭
| 鍒嗙被 | 榪愮畻絎?nbsp; | 鍏寵仈 |
|---|---|---|
| 鍚庣紑 | () [] -> . ++ - - | 浠庡乏鍒板彸 |
| 涓鍏?/td> | + - ! ~ ++ - - (type)* & sizeof | 浠庡彸鍒板乏 |
| 涔樻硶 | * / % | 浠庡乏鍒板彸 |
| 鐩稿姞 | + - | 浠庡乏鍒板彸 |
| 縐誨姩 | << >> | 浠庡乏鍒板彸 |
| 鍏崇郴 | < <= > >= | 浠庡乏鍒板彸 |
| 鐩哥瓑 | == != | 浠庡乏鍒板彸 |
| 鎸変綅涓?/td> | & | 浠庡乏鍒板彸 |
| 鎸変綅寮傛垨 | ^ | 浠庡乏鍒板彸 |
| 鎸変綅鎴?nbsp; | | | 浠庡乏鍒板彸 |
| 閫昏緫涓?nbsp; | && | 浠庡乏鍒板彸 |
| 閫昏緫鎴?nbsp; | || | 浠庡乏鍒板彸 |
| 鏉′歡 | ?: | 浠庡乏鍒板彸 |
| 璧嬪?/td> | = += -= *= /= %=>>= <<= &= ^= |= | 浠庡彸鍒板乏 |
| 閫楀彿 | , | 浠庡乏鍒板彸 |
涓 Go 璇█鐜璁劇疆
鏈湴鐜璁劇疆
鍦ㄨ繖閲屾垜浠粙緇嶈緗瓽o緙栫▼璇█鐜錛岄渶瑕佸湪浣犵殑璁$畻鏈轟笂鐨勫噯澶囦互涓嬩袱涓蔣浠訛紝(A)鏂囨湰緙?/p>
杈戝櫒鍜?B)Go緙栬瘧鍣ㄣ?/p>
鏂囨湰緙栬緫鍣?/strong>
鎴戠殑鐜鏄痷buntu錛岀洿鎺ョ敤 vim
Go緙栬瘧鍣?/strong>
ubuntu涓嬮潰鐩存帴瀹夎
# apt-get install golang
渚嬪瓙錛?/p>
# vim hello.go
1 package main
2
3 import fmt "fmt"
4
5 func main() {
6 fmt.Printf("Hello, world; or Καλημέρα κόσμε; or 銇撱倱銇仭銇?nbsp;涓栫晫 ");
7 }
go璇█涓鏋滄湁if絳夊悗闈㈤渶瑕佽窡澶ф嫭鍙風殑璇彞錛屽己鍒朵嬌鐢ㄥぇ鎵╁彿璺焛f鍐欏湪涓琛?span style="font-family: 寰蔣闆呴粦, sans-serif;">銆?/span>
緙栬瘧榪愯錛?/span>
# go run hello.go
Hello, world; or Καλημέρα κόσμε; or 銇撱倱銇仭銇?nbsp;涓栫晫
浜?Go 璇█紼嬪簭緇撴瀯
鍦ㄦ垜浠涔燝o緙栫▼璇█鐨勫熀鏈瀯寤烘ā鍧楋紝鐪嬬湅涓涓渶浣庨檺搴︾殑Go紼嬪簭緇撴瀯錛岃繖鏍鋒垜浠?/p>
灝卞彲浠ユ妸瀹冧綔涓哄嵆灝嗗埌鏉ョ殑绔犺妭鐨勫弬鑰冦?/p>
Go 紼嬪簭鍖呭惈浠ヤ笅閮ㄥ垎錛?br />
鍖呭0鏄?br />
瀵煎叆鍖?/p>
鍑芥暟
鍙橀噺
璇彞鍜岃〃杈懼紡
娉ㄩ噴
渚嬪錛?br />
1 package main
2
3 import fmt "fmt"
4
5 func main() {
6 fmt.Printf("Hello, world; or Καλημέρα κόσμε; or 銇撱倱銇仭銇?nbsp;涓栫晫 ");
7 }
絎竴琛屽畾涔変簡榪欎釜紼嬪簭鍖呯殑鍚嶇О銆傝繖鏄竴涓繀欏誨0鏄庝負Go紼嬪簭榪愯鍦ㄤ粈涔堝寘銆俶ain鍖呮槸璧峰
鐐規(guī)潵榪愯紼嬪簭銆傛瘡涓寘閮芥湁涓涓笌涔嬪叧鑱旂殑璺緞鍜屽悕縐般?/p>
涓嬩竴琛宨mport "fmt" 鏄憡璇夌紪璇戝櫒鍘誨寘鍚枃浠跺湪鍖協(xié)mt鐨勯澶勭悊鍛戒護銆?/p>
涓嬩竴琛?nbsp;func main()涓昏鍔熻兘鏄負紼嬪簭鎵ц鐨勫紑濮嬨?/p>
濡傛灉鏈夋敞閲婏紝/*...*/浼氳緙栬瘧鍣ㄨ蹇界暐錛屽畠宸茶鍔犲叆鍒扮▼搴忔坊鍔犳敞閲娿傚洜姝わ紝榪欐牱鐨勮縐頒負紼?/p>
搴忎腑鐨勬敞閲娿傛敞閲婁篃浣跨敤//綾諱技浜嶫ava鎴朇++娉ㄩ噴銆?/p>
涓嬩竴琛?nbsp;fmt.Println錛?..錛夋槸鎻愪緵鍙︿竴縐嶅姛鑳斤紝浣挎秷鎭?#8220;Hello, World!”瑕佹樉紺哄湪灞忓箷涓娿傝繖
閲宖mt鍖呭凡瀵煎嚭銆?/p>
涓?Go 璇█鐨勫熀鏈娉?/strong>
鏍囪瘑絎?/strong>
Go璇█涓嶅厑璁告爣璇嗙涓殑鏍囩偣瀛楃錛屽@錛?鍜?銆?/p>
Go鏄竴縐嶅尯鍒嗗ぇ灝忓啓鐨勭紪紼嬭璦
Manpower 鍜?nbsp;manpower 鍦℅o涓槸涓や釜涓嶅悓鐨勬爣璇嗙
鏍囪瘑絎﹀紑濮嬩互瀛楁瘝A鍒癦鎴朼鍒皕鎴栦笅鍒掔嚎_鍚庤窡闆朵釜鎴栧涓瓧姣嶏紝涓嬪垝綰垮拰鏁板瓧錛?銆?錛?/p>
鍏抽敭璇?/strong>
涓嬮潰鐨勫垪琛ㄦ樉紺轟簡Go鐨勪繚鐣欏瓧銆傝繖浜涗繚鐣欑殑瀛楀彲浠ヤ笉琚敤浣滃父閲忔垨鍙橀噺錛屾垨浠諱綍鍏朵粬鐨勬爣璇嗙
鍚嶇О銆?/p>
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
鍦?Go 涓┖鐧芥牸
浠呭寘鍚┖鏍鹼紝鍙兘涓庢敞閲婅錛岃縐頒負涓涓┖琛岋紝Go緙栬瘧鍣ㄥ畬鍏ㄥ拷鐣ュ畠銆?/p>
var age int;
蹇呴』鏈夎嚦灝戜竴涓┖鐧藉瓧絎︼紙閫氬父鏄竴涓┖鏍鹼級int鍜宎ge涔嬮棿鐨勭紪璇戝櫒錛屼互渚胯兘澶熷尯鍒嗗畠浠?/p>
fruit = apples + oranges; // get the total fruit
fruit鍜?涔嬮棿鎴?鍜宎pples錛岃櫧鐒舵槸鑷敱鐨勶紝濡傛灉鎯充究浜庨槄璇葷殑鐩殑錛屾渶濂藉寘鎷竴浜涚┖鏍?/p>
鍥?Go 璇█鏁版嵁綾誨瀷
鍦℅o緙栫▼璇█錛屾暟鎹被鍨嬫寚鐢ㄤ簬澹版槑鍙橀噺鎴栦笉鍚岀被鍨嬬殑鍔熻兘鐨勫箍娉涚殑緋葷粺銆傚彉閲忕殑綾誨瀷鍐沖畾浜?/p>
鏈夊灝戠┖闂村崰鐢ㄧ殑瀛樺偍鍜屽瓨鍌ㄦ柟寮忕殑浣嶆ā寮忓皢琚В閲娿?/p>
Go鐨勬暟鎹被鍨嬪彲鍒嗙被濡備笅錛?/p>
Boolean Types
瀹冧滑鏄竷?yōu)當绫诲瀷锛屽畠鐢变袱涓瀹氫箟鐨勫笖R噺錛?a) true (b) false
Numeric Types
瀹冧滑鏄畻鏈被鍨嬶紝琛ㄧず鏁存暟綾誨瀷鎴朾銆傚湪鏁翠釜紼嬪簭嫻偣鍊?/p>
string types:
涓涓瓧絎︿覆綾誨瀷浠h〃緇勫瓧絎︿覆鍊箋傚畠鐨勫兼槸涓涓瓧鑺傚簭鍒椼傚瓧絎︿覆鏄竴嬈″垱閫犱簡紼沖畾鐨勭被鍨嬶紝
榪欐槸涓嶅彲鑳芥敼鍙樹竴涓瓧絎︿覆鐨勫唴瀹廣傞澹版槑鐨勫瓧絎︿覆綾誨瀷涓哄瓧絎︿覆銆?/p>
Derived types:
瀹冧滑鍖呮嫭錛?a)鎸囬拡綾誨瀷錛?b)鏁扮粍綾誨瀷錛?c)緇撴瀯綾誨瀷錛?d)鑱旂洘綾誨瀷鍙?e)鍑芥暟綾誨瀷(f)鍒囩墖綾?g)
鍑芥暟綾誨瀷(h)鎺ュ彛綾誨瀷(i)鍦板浘綾誨瀷(j)綆¢亾綾誨瀷銆?/p>
鏁扮粍綾誨瀷鍜岀粨鏋勭被鍨嬭緇熺О涓鴻仛鍚堢被鍨嬨傚嚱鏁扮殑綾誨瀷鎸囧畾鐨勪竴緇勫叿鏈夌浉鍚岀殑鍙傛暟鍜岀粨鏋滅被鍨嬫墍
鏈夊嚱鏁般?/p>
鏁存暟
1 uint8
8浣嶆棤絎﹀彿鏁存暟 (0 - 255)
2 uint16
16浣嶆棤絎﹀彿鏁存暟 (0 - 65535)
3 uint32
32浣嶆棤絎﹀彿鏁存暟 (0 - 4294967295)
4 uint64
64浣嶆棤絎﹀彿鏁存暟 (0 - 18446744073709551615)
5 int8
鏈夌鍙?浣嶆暣鏁?nbsp;(-128 - 127)
6 int16
鏈夌鍙?6浣嶆暣鏁?nbsp;(-32768 - 32767)
7 int32
鏈夌鍙風殑32浣嶆暣鏁?nbsp;(-2147483648 - 2147483647)
8 int64
鏈夌鍙風殑64浣嶆暣鏁?nbsp;(-9223372036854775808 - 9223372036854775807)
嫻偣綾誨瀷
1 float32
IEEE-754 32-bit 嫻偣鏁?/p>
2 float64
IEEE-754 64-bit 嫻偣鏁?/p>
3 complex64
澶嶆暟涓巉loat32瀹為儴鍜岃櫄閮?/p>
4 complex128
澶嶆暟涓巉loat64瀹為儴鍜岃櫄閮?/p>
鍏朵粬鏁板肩被鍨?/strong>
1 byte
鐩稿悓浜?nbsp;uint8
2 rune
鐩稿悓浜?nbsp;int32
3 uint
32 鎴?nbsp;64 浣?/p>
4 int
鐩稿悓浜?nbsp;uint 鐨勫ぇ灝?/p>
5 uintptr
涓涓棤絎﹀彿鏁存暟鏉ュ瓨鍌ㄦ寚閽堝肩殑瑙i噴鐨勬瘮鐗逛綅
浜?Go 璇█鍙橀噺
鍙橀噺鏄粈涔堬紝鍙笉鏄粰瀹氬埌瀛樺偍鍖哄煙錛屾垜浠殑紼嬪簭鍙互鎿嶇旱鐨勫悕縐般傚湪Go涓瘡涓彉閲忓叿鏈夌壒瀹?/p>
鐨勭被鍨嬶紝瀹冪‘瀹氱殑澶у皬鍜屽彲鍙樼殑瀛樺偍鍣ㄧ殑甯冨眬;鑳界‘瀹氬瓨鍌ㄥ櫒鍐呭瓨鍌ㄧ殑鍊肩殑鑼冨洿;鍜岀粍鎿嶄綔鍙互鏂?/p>
鍔犲埌鍙橀噺銆?/p>
涓涓彉閲忓悕鍙互鐢卞瓧姣嶏紝鏁板瓧鍜屼笅鍒掔嚎銆傚畠蹇呴』浠ュ瓧姣嶆垨涓嬪垝綰褲傚ぇ鍐欏拰灝忓啓瀛楁瘝鏄笉鍚岀殑錛屽洜
涓篏o鏄尯鍒嗗ぇ灝忓啓鐨勩傚熀浜庤鍩烘湰綾誨瀷鍦ㄥ墠闈㈢殑绔犺妭涓鏄庣殑閭f牱錛屽皢鏈変互涓嬪熀鏈彉閲忕被鍨嬶細
byte 閫氬父鍗曚釜瀛楄妭(涓涓瓧鑺?錛岃繖鏄竴涓瓧鑺傜殑綾誨瀷
int 鏁存暟鏈鑷劧鐨勫昂瀵哥殑鏈哄櫒
float32 鍗曠簿搴︽誕鐐瑰?/p>
Go緙栫▼璇█涔熷彲浠ュ畾涔夊悇縐嶅叾浠栫被鍨嬬殑鍙橀噺錛屾垜浠皢鍦ㄤ互鍚庣殑绔犺妭鍒楀嚭錛屽錛氭灇涓撅紝鎸囬拡錛屾暟
緇勶紝緇撴瀯錛岃仈鍚堬紝絳夌瓑銆?/p>
Go涓彉閲忓畾涔?/strong>
var variable_list optional_data_type;
optional_data_type鍙互鍖呮嫭瀛楄妭錛屾暣鍨嬶紝float32錛宑omplex64錛屽竷?yōu)當鎴栦恢M綍鐢ㄦ埛瀹氫箟鐨勫璞?/p>
絳夋湁鏁圙o鐨勬暟鎹被鍨嬶紝variable_list鍙互鐢辯敤閫楀彿鍒嗛殧鐨勪竴涓垨澶氫釜鏍囪瘑絎﹀悕縐般備竴浜涙湁鏁堢殑澹?/p>
鏄庡涓嬫墍紺猴細
var i, j, k int;
var c, ch byte;
var f, salary float32;
d = 42;
var i, j, k; 鏃㈠0鏄庡茍瀹氫箟浜嗗彉閲廼錛宩鍜宬;榪欐寚紺虹紪璇戝櫒鍒涘緩涓涓悕涓篿錛宩鍜宬鐨?nbsp;int綾誨瀷鍙橀噺銆傚彉閲?/p>
鍙互鍐嶅0鏄庢椂鍊欏垵濮嬪寲銆傚彉閲忕殑綾誨瀷鏄?span style="font-family: 寰蔣闆呴粦, sans-serif;">鐢辯紪璇戝櫒鑷姩鏍規(guī)嵁浼犻掔粰瀹冪殑鍊煎垽鏂?/span>
variable_name = value;
d = 3, f = 5; // declaration of d and f. Here d and f are int
瀵逛簬娌℃湁鍒濆鍖栧畾涔夛細鍏鋒湁闈欐佸瓨鍌ㄦ椂闂村彉閲忕殑闅愬惈闆跺垵濮嬪寲(鎵鏈夊瓧鑺傜殑鍊間負0);鎵鏈夊叾瀹冨彉閲?/p>
鐨勫垵濮嬪兼槸瀹冧滑鐨勬暟鎹被鍨嬬殑闆跺箋?/p>
闈欐佺被鍨嬪0鏄?/strong>
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %T ", x)
}
緙栬瘧榪愯緇撴灉鏄細
20
x is of type float64
鍔ㄦ佺被鍨嬪0鏄?綾誨瀷鎺ㄦ柇
紺轟緥
璇曡瘯涓嬮潰鐨勪緥瀛愶紝鍏朵腑鐨勫彉閲忓凡緇忓0鏄庢病鏈変換浣曠被鍨嬬殑錛屽茍宸茬‘瀹氬湪涓誨嚱鏁頒腑鍒濆鍖栥傚鏋滅被鍨嬫帹鏂殑錛屾垜浠凡緇忓垵濮嬪寲鐨勫彉閲弝浣跨敤:=榪愮畻絎︼紝x鍒濆鍖栦嬌鐢?榪愮畻絎︺?/p>
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %T ", x)
fmt.Printf("y is of type %T ", y)
}
緙栬瘧鍜岃繍琛屼笂闈㈢殑紼嬪簭錛岃繖灝嗕駭鐢熶互涓嬬粨鏋滐細
20
42
x is of type float64
y is of type int
娣峰悎鍙橀噺澹版槑
涓嶅悓綾誨瀷鐨勫彉閲忓彲浠ヤ竴姝ュ埌浣嶄嬌鐢ㄧ被鍨嬫帹鏂0鏄庛?/p>
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %T ", a)
fmt.Printf("b is of type %T ", b)
fmt.Printf("c is of type %T ", c)
}
緙栬瘧鍜岃繍琛屼笂闈㈢殑紼嬪簭錛岃繖灝嗕駭鐢熶互涓嬬粨鏋滐細
3
4
foo
a is of type int
b is of type int
c is of type string
鍥為【錛?/strong>
寮濮嬪涔犱箣鍓嶏紝鎴戝厛pull涓嬫潵ubuntu鍜宖edora闀滃儚
[#9#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker pull fedora
Using default tag: latest
latest: Pulling from library/fedora
9bdb5101e5fc: Pull complete
Digest: sha256:1fa98be10c550ffabde65246ed2df16be28dc896d6e370dab56b98460bd27823
Status: Downloaded newer image for fedora:latest
[#10#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
ebe73f29e6e1: Pull complete
4976a0f2dc03: Pull complete
5c117067c385: Pull complete
001d664e2dd4: Pull complete
Digest: sha256:7eb6ad74ec4fbe56ac194d8760063c88ca362f05a9038f2bc4f09a51849a4a53
Status: Downloaded newer image for ubuntu:latest

4.5.6 Dockerfile 鍜屾瀯寤虹紦瀛?/strong>
鎯崇暐榪囩紦瀛樺姛鑳斤紝鍙互浣跨敤 docker build 鐨?--no-cache 鏍囧織
sudo docker build --no-cache -t="zhiyewang/static_web" .
4.5.7 鍩轟簬鏋勫緩緙撳瓨鐨?Dockerfile 妯℃澘
FROM ubuntu:14.04
MAINTAINER zhiyewang "zhiye_wang@yeah.net"
ENV REFRESHED_AT 2016-03-16
RUN apt-get -qq update
榪欓噷瑕佹兂閲嶆柊鏋勫緩 Dockerfile 錛屽彧闇瑕佸皢絎笁琛岀殑鏃ユ湡淇敼浠ヤ笅鍗沖彲銆傚皢浼氭洿鏂?APT 鍖呯殑緙?/p>
瀛樸?/p>
4.5.8 鏌ョ湅鏂伴暅鍍?/strong>

鏌ョ湅闀滃儚濡備綍鏋勫緩鍑烘潵錛屽彲浠ヤ嬌鐢?docker history 鍛戒護銆傚彲浠ョ湅鍒版柊鏋勫緩鐨?zhiyewang/stat
ic_web 闀滃儚鐨勬瘡涓灞傘備互鍙婂垱寤鴻繖浜涘眰鐨?Dcoekrfile 鍛戒護銆?/p>

4.5.9 浠庢瀯寤虹殑鏂伴暅鍍忓惎鍔ㄥ鍣?/p>
涓婁竴鑺傛垚鍔熶嬌鐢?Dockerfile 鍛戒護鏋勫緩鍑?zhiyewang/static_web 榪欎釜闀滃儚銆傜幇鍦ㄦ垜浠潵璇曡瘯
鐪嬮暅鍍忔槸鍚﹀伐浣滄甯搞倆
鍩轟簬鏂版瀯寤虹殑闀滃儚鍚姩涓涓柊瀹瑰櫒銆?/p>
[#17#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -d -p 80 --name stati
c_web zhiyewang/static_web nginx -g "daemon off;"
d4d9024c688d267761dee792e0b0686a6b2d06dcf53e656c98d95408f4894974
榪欐潯鍛戒護鍩轟簬鏂規(guī)墠鏋勫緩鐨勯暅鍍忓悕瀛楋紝鍚姩浜嗕竴涓悕涓?static_web 鐨勬柊瀹瑰櫒銆?鍚屾椂鎸囧畾浜?-d 閫?/p>
欏癸紝鍛婅瘔 Docker 浠ュ垎紱葷殑鏂瑰紡鍦ㄥ悗鍙拌繍琛屻傚悓鏃朵篃鎸囧畾浜嗗湪鏂板鍣ㄤ腑榪愯鐨勫懡浠? nginx -g "
daemon off;"銆傝繖灝嗕互鍓嶅彴鐨勬柟寮忓惎鍔?Nginx銆傛柊鏍囧織 -p 鐢ㄦ潵鎺у埗 Docker 鍦ㄨ繍琛屾椂搴旇鍏?/p>
寮鍝簺緗戠粶绔彛緇欏閮紙瀹夸富鏈猴級銆?/p>
[#19#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker ps -l
CONTAINER ID IMAGE COMMAND PORTS
d4d9024c688d zhiyewang/static_web "nginx -g 'daemon off" 0.0.0.0:32768->80/tcp
鍙互鐪嬪埌瀹瑰櫒涓殑 80 绔彛琚槧灝勫埌瀹夸富鏈虹殑 32768 绔彛銆?/p>
涔熷彲浠ヤ嬌鐢?docker port 鏌ョ湅绔彛鐨勬儏鍐?/p>
[#20#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker port d4d9024c688d
80/tcp -> 0.0.0.0:32768
榪欐牱鐨勭鍙f槧灝勬柟寮忎負闅忔満鐨勶紝鎴戜滑涔熷彲浠ユ寚瀹氱壒瀹氱殑绔彛鏄犲皠
灝嗗鍣ㄧ殑 80 绔彛緇戝畾鍒版湰鍦板涓繪満鐨?80 绔彛
sudo docker run -d -p 80:80 --name static_web zhiyewang/static_web nginx -g "daemon off;"
灝嗗鍣ㄧ殑 80 绔彛緇戝畾鍒版湰鍦板涓繪満鐨?8080 绔彛
sudo docker run -d -p 8080:80 --name static_web zhiyewang/static_web nginx -g "daemon off;"
灝嗗鍣ㄧ殑 80 绔彛緇戝畾鍒版湰鍦板涓繪満鐨?127.0.0.1 榪欎釜 IP 鐨?80 绔彛
sudo docker run -d -p 127.0.0.1:80:80 --name static_web zhiyewang/static_web nginx -g "daemon off;"
灝嗗鍣ㄧ殑 80 绔彛緇戝畾鍒版湰鍦板涓繪満鐨?127.0.0.1 榪欎釜 IP 鐨勯殢鏈虹鍙?/p>
sudo docker run -d -p 127.0.0.1::80 --name static_web zhiyewang/static_web nginx -g "daemon off;"
瀵瑰鍏紑绔彛錛屾鍛戒護鍙互灝嗗鍣ㄥ唴鐨?80 绔彛瀵規(guī)湰鍦板涓繪満鍏紑錛屽茍涓旂粦瀹氳瀹夸富鏈虹殑涓涓?/p>
闅忔満绔彛銆傛鍛戒護鍚屾椂涔熶細灝?Dockerfile 鏂囦歡涓?EXPOSE 鎸囦護鎸囧畾鐨勫叾浠栫鍙d竴騫跺叕寮銆?/p>
sudo docker run -d -p --name static_web zhiyewang/static_web nginx -g "daemon off;"
榪欐牱鎴戜滑灝卞彲浠ヤ嬌鐢ㄦ湰鍦板涓繪満鐨?IP 鍦板潃鎴栬?127.0.0.1 鐨?localhost 鏉ヨ繛鎺ュ埌榪愯鐨勫鍣紝
鏌ョ湅 Web 鏈嶅姟鍣ㄧ殑鍐呭浜嗐?/p>
[#33#cloudsoar@cloudsoar-virtual-machine ~]$curl localhost:32768
Hi, I am in your container
4.5.10 Dockerfile 鎸囦護
1 CMD 鎸囦護
CMD 鎸囦護鐢ㄤ簬鎸囧畾涓涓鍣ㄥ惎鍔ㄦ椂鍊欓渶瑕佽繍琛岀殑鎸囦護銆傛湁鐐圭被浼間簬 RUN 鎸囦護錛屽尯鍒槸 RUN
鎸囦護鏄寚瀹氶暅鍍忚鏋勫緩鏃跺欒繍琛岀殑鎸囦護錛岃?CMD 鏄鍣ㄨ鍚姩鏃惰繍琛岀殑鎸囦護銆?/p>
鍛戒護琛屽惎鍔ㄥ鍣ㄧ殑 /bin/true
[#34#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -i -t zhiyewang/static_web /bin/true
鍙互浣跨敤 CMD 鍐欏湪 Dockerfile 涓細
CMD ["/bin/true"]
涔熷彲浠ヤ負瑕佽繍琛岀殑鍛戒護鎸囧畾鍙傛暟
CMD ["/bin/bash", "-l"]
闇瑕佹敞鎰忕殑鏄?docker run 鍛戒護鍙互瑕嗙洊 CMD 鎸囦護銆傚鏋?dockerrun 涓寚瀹氫簡鍛戒護錛岃孋M
D 涓篃鎸囧畾浜嗙浉鍚岀殑鍛戒護錛屽懡浠よ涓殑鎸囦護浼氳鐩?Dockerfile 涓殑 CMD 鎸囦護銆?/p>
鍋囪鎴戜滑鐨?Dockerfile 涓湁濡備笅鍛戒護
CMD [ "/bin/bash" ]
浣跨敤 docker build 鍛戒護鏋勫緩涓涓柊闀滃儚錛屽亣璁句負 zhiyewang/test錛屽茍鍩轟簬姝ら暅鍍忓惎鍔ㄤ竴涓柊
瀹瑰櫒銆?/p>
[#35#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -t -i zhiyewang/test
root@7ec0a03d41fc:/#
鍙互鐪嬪埌 docker run 鍛戒護鐨勬湯灝懼茍娌℃湁鎸囧畾 /bin/bash 鎸囦護錛屽嵈榪涘叆浜嗗鍣ㄧ殑 bash銆傚疄闄呬笂
Docker 浣跨敤浜?CMD 涓寚瀹氱殑鍛戒護銆?/p>
浣嗘槸 Dockerfile 涓彧鑳芥寚瀹氫竴鏉?CMD 鎸囦護銆傚鏋滃埗瀹氬涓紝鍙湁鏈鍚庝竴涓細琚皟鐢ㄣ?/p>
2 ENTRYPOINT
ENTRYPONIT 鎸囦護鎻愪緵鐨勫懡浠や笉浼氬啀瀹瑰櫒鍚姩鏃惰鍛戒護琛岃鐩栥?/p>
ENTRYPONIT ["/usr/sbin/nginx"]
涓?ENTRYPOINT 鎸囧畾鍙傛暟
ENTRYPONIT ["/usr/sbin/nginx", "-g", "daemon off;"]
濡傛灉闇瑕?涔熷彲浠ュ湪榪愯鏃墮氳繃 docker run 鐨?--entrypoint 鏍囧織瑕嗙洊 ENTRYPOINT 鎸囦護銆?/p>
3 WORKDIR
WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp
ENTRYPOINT [ "rackup" ]
鎶婄洰褰曞垏鎹㈠埌 /opt/webapp/db 鎸囧畾浜?bundle install 鍛戒護錛岀劧鍚庡張灝嗗伐浣滅洰褰曞垏鎹負 /opt
/webapp 鏈鍚庤繖鍙簡 ENTRYPOINT 鎸囦護鏉ュ惎鍔?rackup 鍛戒護銆?/p>
4 ENV
ENV 鍙互鐢ㄦ潵鍦ㄩ暅鍍忔瀯寤鴻繃紼嬩腑璁劇疆鐜鍙橀噺
ENV RMV_PATH /home/rvm/
榪欎釜鐜鍙橀噺璁劇疆鍚庡湪鍚庣畫鐨勪換浣?RUN 涓兘鍙互浣跨敤
涔熷彲浠ュ湪鍏朵粬鎸囦護涓洿鎺ヤ嬌鐢ㄨ繖浜涚幆澧冨彉閲?nbsp;
RVM_PATH=/home/rvm/ gem install unicorn
ENV 鍒涘緩鐨勭幆澧冨彉閲忎篃浼氳鎸佷箙淇濆瓨鍒頒粠鎴戜滑鐨勯暅鍍忓垱寤虹殑浠諱綍瀹瑰櫒涓傛瘮濡傚湪瀹瑰櫒涓繍琛?/p>
env 鏌ョ湅錛?/p>
root@7ec0a03d41fc:/# env
...
RVM_PATH=/home/rvm/
榪愯鏃剁幆澧冨彉閲?/p>
sudo docker run -ti -e "WEB_PORT=8080" ubuntu env
鍙互璁插鍣ㄧ殑 WEB_PORT 鐜鍙橀噺璁劇疆涓?8080
5 USER
user 鎸囦護鐢ㄦ潵鎸囧畾璇ラ暅鍍忎細浠ヤ粈涔堟牱鐨勭敤鎴峰幓鎵ц
USER nginx
鎴戜滑鍙互鎸囧畾鐢ㄦ埛鍚嶆垨鑰?UID 浠ュ強緇勬垨鑰?GID錛岀敋鑷蟲槸涓よ呯殑緇勫悎銆備篃鍙互鍦?docker run 鍛?/p>
浠や腑閫氳繃 -u 閫夐」鏉ヨ鐩栬鎸囦護鐨勫箋傚鏋滀笉閫氳繃 USER 鎸囧畾鐗瑰畾鐢ㄦ埛錛岄粯璁ゆ槸 root 銆?/p>
6 VOLUME
VOLUME ["/opt/project"]
榪欐潯鎸囦護灝嗕細涓哄熀浜庢闀滃儚鍒涘緩鐨勪換浣曞鍣ㄥ垱寤轟竴涓悕涓?/opt/projiect 鐨勬寕杞界偣銆備篃鍙互閫氳繃
鏁扮粍鐨勬柟寮忔寚瀹氬涓嵎銆?/p>
VOLUME ["/opt/project", "/data"]
7 ADD
ADD 鍛戒護鐢ㄦ潵灝嗘瀯寤虹幆澧冧笅鐨勬枃浠跺拰鐩綍澶嶅埗鍒伴暅鍍忎腑銆備篃鍙互鎸囧畾URL銆侱ocker 閫氳繃鐩殑鍦?/p>
鍧鐨勫弬鏁版湯灝劇殑瀛楃鏉ュ垽鏂枃浠舵簮鏄洰褰曡繕鏄枃浠躲傚鏋滅洰鐨勫湴鍧浠?/ 緇撳熬錛孌ocker 璁や負鏄竴涓?/p>
鐩綍錛屽鏋滀笉鏄殑璇濓紝璁や負鏄枃浠躲?/p>
ADD http://wordpress.org/latest.zip /root/wordpress.zip
ADD 鍦ㄥ鐞嗘湰鍦扮殑褰掓。鏂囦歡錛堝寘鎷?gzip錛宐zip2錛寈v錛夋寚瀹氫負婧愭枃浠舵椂鍊欙紝浼氳嚜鍔ㄥ皢褰掓。瑙e帇銆?/p>
ADD latest.tar.gz /var/www/wordpress/
8 COPY
COPY 鍜?ADD 鐨勬湰璐ㄥ尯鍒槸 COPY 鍙叧蹇冨湪鏋勫緩涓婁笅鏂囦腑澶嶅埗鏈湴鏂囦歡錛岃屼笉浼氬幓鍋氭枃浠舵彁
鍙栧拰瑙e帇鐨勫伐浣溿侰OPY 鐨勬枃浠舵簮璺緞蹇呴』鏄竴涓笌褰撳墠鏋勫緩鐜鐩稿鐨勬枃浠舵垨鐩綍錛屾湰鍦版枃
浠墮兘鏀懼埌鍜?Dockerfile 鍚屼竴涓洰褰曚笅銆備笉鑳藉鍒惰鐩綍涔嬪鐨勪換浣曟枃浠躲傜洰鐨勪負姝㈠繀欏繪槸瀹瑰櫒
鍐呴儴鐨勪竴涓粷瀵硅礬寰勩傝鎸囦護鍒涘緩鐨勬枃浠舵垨鑰呯洰褰曠殑 UID 鍜?GID 閮戒細琚緗負 0 銆?/p>
COPY conf.d/ /etc/apache2/
9 ONBUILD
4.6 灝嗛暅鍍忛閫佸埌 Docker Hub
[#37#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker push zhiyewang/static_web
The push refers to a repository [docker.io/zhiyewang/static_web] (len: 1)
e97eb7ef0136: Pushed
6a7a53f6e78a: Pushed
ddc8935b098a: Pushed
40fa5cd1c3d2: Pushed
c5aed3a8ff95: Pushed
0b427fcc4cbb: Pushed
9d89fd8f8a3e: Pushed
073de23ee32b: Pushed
latest: digest: sha256:152eb2d70e0f795fbe1b8f8c9eea09e7832a8b01e953cc051cd07832732da0ed size: 14731
鐜板湪鍙互鍦?Docker Hub 涓婄湅鍒版垜浠殑闀滃儚浜嗐?/p>

鑷姩鏋勫緩
4.7 鍒犻櫎闀滃儚
濡傛灉涓嶉渶瑕佷竴涓暅鍍忎簡 鍙互浣跨敤 docker rmi 鏉ュ垹闄?/p>
[#41#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker rmi zhiyewang/static_web
Error response from daemon: conflict: unable to remove repository reference "zhiyewang/static_web" (must force) - container 7ec0a03d41fc is using its referenced image e97eb7ef0136
Error: failed to remove images: [zhiyewang/static_web]
鍙互鐪嬪埌榪欎釜闀滃儚琚竴涓鍣?nbsp;7ec0a03d41fc 浣跨敤鐫錛岄鍏堝垹闄ゆ帀瀹瑰櫒鍗沖彲銆?nbsp;
[#53#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker rm 7ec0a03d41fc
7ec0a03d41fc
[#62#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker rmi e97eb7ef0136
Deleted: e97eb7ef013619e503bd729596a06e46ee85786619d95950e54f5a74c6fc2694
Deleted: 6a7a53f6e78a802ea932a5914e63d217acf4a47ddbedb80dab042d55297573a5
Deleted: ddc8935b098a0b449a3335286b2b0e555b3d44bd5d92dea305c57f6f7c846fae
Deleted: 40fa5cd1c3d2ae9c80763e9b787c5c9b4848a34164fc2138d2c160830505466d
Deleted: c5aed3a8ff9508b42644cef59c2b44c249628c54130fa1a030f3f2b299124ecc
榪欓噷鍒犻櫎鐨勬槸鏈湴鐨勯暅鍍忋傛瘡涓涓?Deleted: 琛岄兘浠h〃涓涓暅鍍忓眰琚垹闄ゃ?/p>
4.8 榪愯鑷繁鐨?Docker Registry
榪欎釜鍙互鑷繁璇曡瘯浜嗐?/p>
鍒版涓烘錛岀鍥涚珷瀛︿範瀹屾瘯銆?/p>
涓嬩竴綃囧涔犲湪嫻嬭瘯涓嬌鐢?Docker錛岀敤Docker 嫻嬭瘯涓涓潤鎬佺綉绔欙紝鐢?Docker 鍒涘緩騫舵祴璇曚竴涓?/p>
WEB 搴旂敤錛岀敤 Docker 鐢ㄤ簬鎸佺畫闆嗘垚
鍥為【錛?/p>
鍥為【濡備綍浣跨敤 docker run 鍒涘緩鏈鍩烘湰鐨勫鍣?/p>
$sudo docker run -i -t --name another_container_mum ubuntu /bin/bash
root@3d49f5830c81:/#
榪欐潯鍛戒護浼氬惎鍔ㄤ竴涓柊鐨勫悕涓?another_container_mum 鐨勫鍣紝榪欎釜瀹瑰櫒鍩轟簬ubuntu闀?/p>
鍍忓茍涓斾細鍚姩Bash Shell
---------------------------------------------------------------------------------------------
4.1 浠涔堟槸 Docker 闀滃儚
4.2 鍒楀嚭闀滃儚

鍙互鐪嬪嚭鎴戣繖閲屾湁涓変釜闀滃儚銆?/p>
鍏朵腑 ubuntu 鏄垜涓婂崍涓嬭澆鐨?ubuntu 鍩虹闀滃儚錛宲aulcos11/docker-tutorial 鏄笅杞界殑鍙﹀
涓涓敤鎴蜂笂浼犵殑闀滃儚銆備絾鏄笉鐭ラ亾 CREATED 榪欎竴鏍忕殑鏃墮棿鎬庝箞涓嶅噯銆?/p>
闀滃儚浠庝粨搴撲笅杞戒笅鏉ャ傞暅鍍忎繚瀛樺湪浠撳簱涓傝屼粨搴撳瓨鍦ㄤ簬Registry涓傞粯璁ょ殑Registry鏄敱Do
cker鍏徃榪愯惀鐨勫叕鍏?Registry 鏈嶅姟錛屽嵆鏄?Dcoker Hub銆?/p>
姣忎釜闀滃儚搴撻兘鍙互瀛樻斁寰堝闀滃儚錛屼緥濡傛垜浠煡鐪嬩竴涓媢buntu浠撳簱涓殑鍏朵粬闀滃儚錛?/p>
鍙槸浣跨敤 docker images 鏌ョ湅鎵鏈夌殑 ubuntu docker 闀滃儚
sudo docker images
鍙互浣跨敤docker pull涓嬭澆鏌愪釜鍩虹闀滃儚
[#12#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker pull ubuntu
Docker Hun 涓湁涓ょ綾誨瀷浠撳簱錛氱敤鎴蜂粨搴撳拰欏跺眰浠撳簱銆傜敤鎴蜂粨搴撶殑闀滃儚閮芥槸鏈塂ocker鐢ㄦ埛
鍒涘緩鐨勶紝鑰岄《灞備粨搴撳垯鏄敱Docker鍐呴儴鐨勪漢鏉ョ鐞嗙殑銆傜敤鎴蜂粨搴撶殑鍛藉悕鐢辯敤鎴峰悕鍜屼粨搴撳悕涓?/p>
閮ㄥ垎緇勬垚錛屽錛歱aulcos11/docker-tutorial錛岀敤鎴峰悕錛歱aulcos11錛屼粨搴撳悕錛歞ocker-tutor
ial錛屼笌鍏剁浉瀵圭殑欏跺眰浠撳簱鍙寘鍚粨搴撳悕閮ㄥ垎錛屼緥濡?ubuntu錛宖edora銆傞《灞備粨搴撶敱Docker鍏?/p>
鍙稿拰鐢遍夊畾鐨勮兘鎻愪緵浼樿川鍩虹闀滃儚鐨勫巶鍟嗙鐞嗐?/p>
4.3 鎷夊彇闀滃儚
浣跨敤docker images鍙互鏌ョ湅鏈湴Docker瀹夸富鏈轟笂闈㈢殑闀滃儚銆傚鏋滃笇鏈涜兘鍦ㄩ暅鍍忓垪琛ㄤ腑鍙湅
鍒版煇涓暅鍍忕殑鍐呭錛屼緥濡?fedora錛屽彲浠ラ氳繃鍦?docker images 鍛戒護鍚庨潰璺熸寚瀹氱殑闀滃儚鍚嶆潵瀹?/p>
鐜幫紝渚嬪錛?nbsp;

浣跨敤 docker pull 鎷夊彇闀滃儚
[#15#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker pull fedora
Using default tag: latest
latest: Pulling from library/fedora
6888fc827a3f: Pull complete
9bdb5101e5fc: Downloading [===================> ] 28.63 MB/74.33 MB
4.4 鏌ユ壘闀滃儚
鎴戞湰鍦扮殑闀滈暅鍍忔湁錛?/p>
[#1#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker images
[sudo] password for cloudsoar:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
paulcos11/docker-tutorial latest e37931352714 8 days ago 587.8 MB
ubuntu latest 8ed581e3fa7a 11 days ago 188 MB
姝ゆ椂 fedora 闀滃儚榪樻槸娌℃湁涓嬭澆瀹屾瘯鐨勩備笉鐫鎬ャ傛垜浠厛緇冧範鍏朵粬鐨勬搷浣滐紝鍦?nbsp;paulcos11/do
cker-tutorial 闀滃儚涓嬌鐢?docker run 鍛戒護鏉ヤ粠 docker-tutorial 鍒涘緩涓涓鍣ㄣ?/p>
[#2#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -i -t paulcos11/docker-tutorial /bin/bash
root@869a3b2049ad:/#
鍙互鐪嬪埌錛屽凡緇忎粠 paulcos11/docker-tutorial 闀滃儚鍚姩浜嗕竴涓柊鐨勫鍣ㄣ?/p>
4.5 鏋勫緩闀滃儚
鏋勫緩 Docker 闀滃儚鏈変互涓嬩袱縐嶆柟娉曪細
浣跨敤 docker commit 鍛戒護銆?/p>
浣跨敤 docker build 鍛戒護鍜?Dockerfile 鏂囦歡銆?/p>
4.5.1 鍒涘緩 Docker Hub 璐﹀彿
鍦?hub.docker.com 鍒涘緩涓涓嚜宸辯殑璐﹀彿錛屾敞鍐屼箣鍚庨氳繃鏀跺埌鐨勭‘璁ら偖浠舵縺媧伙紝涓嬮潰灝卞彲浠ユ祴
璇曞垰鎵嶆敞鍐岀殑璐﹀彿鏄惁鍙互宸ヤ綔浜嗐傝鐧誨綍鍒?docker hub錛屽彲浠ヤ嬌鐢?docker login 鍛戒護銆傚

榪欓噷鐪嬪埌鎴戞槸娉ㄥ唽鎴愬姛浜嗭紝鐢ㄦ埛鍚嶅彧鑳芥槸瀛楁瘝鎴栬呮暟緇勭殑緇勫悎銆備笅闈嬌鐢?docker login 鏉ラ獙璇?/p>
鎴戠殑璐﹀彿錛?/p>
[#4#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker login
Username: zhiyewang
Password:
Email: zhiye_wang@yeah.net
WARNING: login credentials saved in /home/cloudsoar/.docker/config.json
Login Succeeded
鍙互鐪嬪埌鎴戠殑璐﹀彿鐧誨綍鎴愬姛浜嗐?/p>
4.5.2 浣跨敤 Docker 鐨?commit 鍛戒護鍒涘緩闀滃儚
榪欓噷鎴戝熀浜庡墠闈笅杞界殑 ubuntu 闀滃儚鏉ュ垱寤轟竴涓柊闀滃儚銆?/p>
棣栧厛鎴戝湪榪欎釜鍩虹闀滃儚涓惎鍔ㄤ竴涓鍣?/p>
[#5#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -i -t ubuntu /bin/bash
root@460f5a1ac42a:/#
鍦ㄥ鍣ㄤ腑瀹夎涓?Apache 浣滀負涓涓?web 鏈嶅姟鍣ㄦ潵榪愯銆傝繖鏍鋒瘡嬈′嬌鐢?Apache 鐨勬椂鍊欎笉鐢ㄥ啀
閲嶆柊瀹夎 Apache 浜嗐?/p>
root@460f5a1ac42a:/# apt-get -y install apache2
Reading package lists... Done
Building dependency tree
root@460f5a1ac42a:/# apt-get -y install vim
鎴戝枩嬈㈢敤vim錛屽悓鏃跺張瀹夎浜嗕竴涓?vim錛屽搰鍜斿挃銆?/p>
涓轟簡瀹屾垚姝ら」宸ヤ綔錛岄渶瑕佸厛閫鍑?exit 錛岀劧鍚庢墽琛?docker commit 鍛戒護銆?/p>
榪欓噷闇瑕佹敞鎰忕殑鏄紝 docker commit 鎻愪氦鐨勬槸鍒涘緩瀹瑰櫒鐨勯暅鍍忎笌瀹瑰櫒鐨勫綋鍓嶇姸鎬佷箣闂存湁宸紓
鐨勯儴鍒嗭紝榪欎嬌寰楄鏇存柊闈炲父杞婚噺銆傝繖閲屽彲浠ョ湅鍒版垜鍒涘緩鐨勭粨鏋溿?/p>

濡傛灉鍍忎粠鍒氭墠鍒涘緩鐨勯暅鍍忚繍琛屼竴涓鍣紝鍙互浣跨敤 docker run 鍛戒護
[#16#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -t -i zhiyewang/apache2 /bin/bash
root@bb634a313bf2:/#
4.5.3 浣跨敤 Dockerfile 鏋勫緩闀滃儚
浜嬪疄涓婃墍鏈夎祫鏂欓兘涓嶆帹浠嬩嬌鐢?docker commit 鐨勬柟娉曟瀯寤洪暅鍍忥紝鑰屾槸浣跨敤 Dockerfile 鐨勫畾涔?/p>
鏂囦歡鍜?docker build 鍛戒護鏉ユ瀯寤洪暅鍍忋?/p>
鎴戜滑鐨勭涓涓?Dockerfile
鐜板湪鎴戜滑鍒涘緩涓涓洰褰曪紝騫跺湪閲岄潰鍒涘緩鍒濆鐨?Dockerfile錛屾垜浠皢鍒涘緩涓涓寘鍚畝鍗?Web 鏈?/p>
鏈嶅姟鍣ㄧ殑 Docker 闀滃儚銆?/p>

榪欓噷鎴戜滑鍒涘緩浜嗕竴涓悕涓?static_web 鐨勭洰褰曠敤鏉ヤ繚瀛?Dockerfile錛岃繖涓洰褰曞氨鏄垜浠殑鏋勫緩鐜?/p>
澧冿紙build environment錛夛紝Docker 鍒欑О姝ょ幆澧冧負涓婁笅鏂囷紙context錛夋垨鑰呮瀯寤轟笂涓嬫枃錛坆uild
context錛夈侱ocker 浼氬湪鏋勫緩闀滃儚鏃跺欙紝灝嗘瀯寤轟笂涓嬫枃鍜岃涓婁笅鏂囦腑鐨勬枃浠跺拰鐩綍涓婁紶鍒?doc
ker 瀹堟姢榪涚▼銆傝繖鏍?Docker 瀹堟姢榪涚▼灝辮兘鐩存帴璁塊棶浣犳兂鍦ㄩ暅鍍忎腑瀛樺偍鐨勪換浣曚唬鐮併?/p>
涓嬮潰鏄竴涓?Dockerfile 鐨勪緥瀛愶紝鐢?Dockerfile 鏋勫緩涓涓兘浣滀負 Web 鏈嶅姟鍣ㄧ殑 Docker 闀滃儚銆?/p>
1 # version: 0.0.1
2 FROM ubuntu:14.04
3 MAINTAINER zhiyewang "zhiye_wang@yeah.net"
4 RUN apt-get update
5 RUN apt-get install -y nginx
6 RUN echo 'Hi, I am in your container' \
7 >/usr/share/nginx/html/index.html
8 EXPOSE 80
鍛戒護瑙i噴錛?/p>
Dockerfile 鐢變竴緋誨垪鎸囦護鍜屽弬鏁扮粍鎴愩傛瘡鏉℃寚浠ら兘鏄ぇ鍐欙紝鑰屼笖鍚庨潰闇瑕佽窡涓涓弬鏁般侱ocker
file 浼氭寜鐓ч『搴忎粠涓婂線涓嬫墽琛屻?/p>
Dockerfile 鏀寔娉ㄩ噴錛屾墍鏈変互浜曞彿寮澶寸殑閮芥槸娉ㄩ噴銆?/p>
FROM ubuntu:14.04 鎸囧畾浜?ubuntu 14.04 浣滀負鍩虹闀滃儚錛屾瘡
鎵ц涓鏉℃寚浠わ紝瀵瑰鍣ㄥ仛鍑轟慨鏀廣傝嚜鍔ㄤ細鍐嶆寚瀹氱被浼?docker commit 鐨勬搷浣滐紝鎻愪氦涓涓柊闀滃儚
灞傦紝緇х畫鎵ц涓嬩竴鏉℃寚浠ゃ?/p>
MAINTAINER 鎸囦護浼氬憡璇?Docker 璇ラ暅鍍忕殑浣滆呮槸璋侊紝浠ュ強浣滆呯殑鐢?shù)瀛愰偖錃g鍦板潃銆?/p>
鎺ヤ笅鏉ユ垜浠墽琛屼簡涓夋潯 RUN 鎸囦護錛孯UN 鎸囦護浼氬湪褰撳墠闀滃儚涓繍琛屾寚瀹氱殑鍛戒護銆傛垜浠氳繃RUN鏄?/p>
浠ゆ洿鏂頒簡 APT 浠撳簱錛屽畨瑁呬簡 nginx 鍖咃紝涔嬪悗鍒涘緩浜? /usr/share/nginx/html/index.html 鏂囦歡錛?/p>
榛樿鎯呭喌錛孯UN鎵ц浼氬湪 shell 閲屼嬌鐢?/bin/sh -c 鏉ユ墽琛屻傚鏋滃啀涓嶆敮鎸?shell 鎴栬呬笉鎯沖啀 shell
涓繍琛岋紝鍙互浣跨敤 exec 鏍煎紡鐨?RUN
RUN [ "apt-get", "install", "-y", "nginx" ]
鎺ヤ笅鏉ョ殑 EXPOSE 鎸囦護錛屽憡璇?Docker 璇ュ鍣ㄥ唴鐨勫簲鐢ㄧ▼搴忓皢浼氫嬌鐢?Docker 鐨勬寚瀹氱鍙c備絾鏄?/p>
Docker 騫朵笉浼氳嚜鍔ㄦ墦寮姝ょ鍙o紝鑰屾槸闇瑕佸啀浣跨敤 docker run 榪愯瀹瑰櫒鏃跺欐寚瀹氶渶瑕佹墦寮閭d簺绔?/p>
鍙c?/p>
4.5.4 鍩轟簬 Dockerfile 鏋勫緩鏂伴暅鍍?/strong>
榪愯 Dockerfile
[#34#cloudsoar@cloudsoar-virtual-machine ~]$cd static_web/
[#35#cloudsoar@cloudsoar-virtual-machine ~/static_web]$sudo docker build -t="zhiyewang/static_web" .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:14.04
14.04: Pulling from library/ubuntu
Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu:14.04
---> 8ed581e3fa7a
Step 2 : MAINTAINER zhiyewang "zhiye_wang@yeah.net"
---> Running in 7806118624b7
---> c5aed3a8ff95
Removing intermediate container 7806118624b7
...
Processing triggers for sgml-base (1.26+nmu4ubuntu1) ...
---> ddc8935b098a
Removing intermediate container c81405d28e41
Step 5 : RUN echo 'Hi, I am in your container' >/usr/share/nginx/html/index.html
---> Running in f0049e284208
---> 6a7a53f6e78a
Removing intermediate container f0049e284208
Step 6 : EXPOSE 80
---> Running in 2a0714253002
---> e97eb7ef0136
Removing intermediate container 2a0714253002
Successfully built e97eb7ef0136
榪欓噷浣跨敤 -t 鍙傛暟涓烘柊闀滃儚璁劇疆浜嗕粨搴撳拰鍚嶇О銆備粨搴撲負 zhiyewang錛屽悕縐頒負 static_web錛屼篃鍙?/p>
浠ユ瀯寤鴻繃紼嬩腑涓洪暅鍍忔坊鍔犱竴涓爣絳撅紝鏂規(guī)硶涓?#8220;闀滃儚鍚嶏細鏍囩”
sudo docker build -t="zhiyewang/static_web:v1" .
濡傛灉娌℃湁瀹氬埗浠諱綍鏍囩錛孌ocker 浼氳嚜鍔ㄤ負闀滃儚璁劇疆涓涓?latest 鏍囩銆?/p>
涓婇潰鍛戒護鏈鍚庣殑 . 鍛婅瘔鎴戜滑鍘誨綋鍓嶈礬寰勫幓鎵?Dockerfile 鏂囦歡銆備篃鍙互鎸囧畾涓涓?Git 浠撳簱鐨勬簮鍦?/p>
鍧鏉ユ寚瀹?Dockerfile 鐨勪綅緗備緥濡?/p>
sudo docker build -t="zhiyewang/static_web:v1" \
git@github.com:zhiyewang/docker-static_web
榪欓噷鍋囪鐨勫湪 Git 浠撳簱鐨勭洰褰曚笅瀛樺湪 Dockerfile 鏂囦歡銆傛垜涔熸病鏈夋敞鍐?Git 璐﹀彿鍘繪墽琛岃繃銆?/p>
鏌ョ湅 docker build 榪囩▼鍙戠幇錛屾瀯寤轟笂涓嬫枃宸茬粡涓婁紶鍒頒簡 Docker 瀹堟姢榪涚▼錛?/p>
Sending build context to Docker daemon 2.048 kB
涔嬪悗錛屽彲浠ョ湅鍒?Dockerfile 涓殑姣忔潯鏄庝護閮借欏哄簭鎵ц錛岃屼笖鏋勫緩榪囩▼鐨勬渶緇堢粨鏋滆繑鍥炰簡鏂扮殑
闀滃儚鐨?ID錛屽嵆 e97eb7ef0136 錛屽茍涓?Docker 浼氭彁浜ゆ瘡涓姝ョ殑鎵ц緇撴灉銆?/p>
4.5.4 鎸囦護澶辮觸鏃跺欎細鎬庢牱
渚嬪鎴戜滑灝嗕笂闈㈢殑絎?4 姝ョ殑鍖呭悕 nginx 鍐欐垚 ngin
[#41#cloudsoar@cloudsoar-virtual-machine ~/static_web]$sudo docker build -t="zhiyewang/static_web" .
[sudo] password for cloudsoar:
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:14.04
---> 8ed581e3fa7a
Step 2 : MAINTAINER zhiyewang "zhiye_wang@yeah.net"
---> Using cache
---> c5aed3a8ff95
Step 3 : RUN apt-get update
---> Using cache
---> 40fa5cd1c3d2
Step 4 : RUN apt-get install -y ngin
---> Running in 86e3dbaadf20
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package ngin
The command '/bin/sh -c apt-get install -y ngin' returned a non-zero code: 100
鍙戠幇浼氬嚭閿欍傛垜浠潵璋冭瘯涓涓嬪け璐ュ師鍥犮傜敤 docker run 鏄庝護鏉ュ熀浜庤繖嬈℃瀯寤哄埌鐩墠涓烘宸茬粡
鎴愬姛鐨勬渶鍚庝竴姝ュ垱寤轟竴涓鍣紝瀹冪殑 ID 鏄?nbsp;40fa5cd1c3d2 錛屽涓嬩唬鐮侊細
[#42#cloudsoar@cloudsoar-virtual-machine ~/static_web]$sudo docker run -t -i 40fa5cd1c3d2 /bin/bash
root@b978996f25f3:/#
榪欐椂鎴戜滑鍦ㄦ瀹瑰櫒涓繍琛岀 4 姝ワ細
root@b978996f25f3:/# apt-get install -y ngin
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package ngin
鍙戠幇鍖呭悕閿欒銆?/p>
鎴戜滑鍙互鍦ㄨ繖涓鍣ㄤ腑鍐嶆榪愯 apt-get install -y nginx錛岃繖嬈¤緭鍏ユ紜殑鍖呭悕錛屾潵瀹氫綅闂
錛屽鏋滀竴鏃﹁В鍐充簡榪欎釜闂錛屽氨鍙互閫鍑哄鍣紝鐢ㄦ紜殑鍖呭悕淇敼 Dockerfile 鏂囦歡錛屼箣鍚庡啀嬈?/p>
鏋勫緩鍗沖彲銆?br />
榪欎竴綃囧埌榪欓噷銆備笅涓綃囩戶緇涔燚ockerfile 鍜屾瀯寤虹紦瀛樸?/p>
3.1 紜繚docker宸茬粡灝辯華
棣栧厛鏌ョ湅docker紼嬪簭鏄惁瀛樺湪錛屽姛鑳芥槸鍚︽甯?/span>
[#3#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker info
[sudo] password for cloudsoar:
Containers: 11
Images: 16
Server Version: 1.9.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 38
3.2 榪愯鎴戜滑鐨勭涓涓鍣?/span>
docker run 鍛戒護鎻愪緵浜咲ocker瀹瑰櫒鐨勫垱寤哄埌鍚姩鐨勫姛鑳?/span>
涔︿笂浣跨敤姝ゅ懡浠ゅ垱寤虹涓涓鍣?/span>
[#4#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
073de23ee32b: Downloading 48.09 MB/65.69 MB
...
鍙互鐪嬪埌鏈夊ぇ姒?6MB錛岀瓑寰呮參鎱笅杞藉畬鎴愩傚叾瀹濽buntu闀滃儚涔熸槸涓涓熀紜闀滃儚銆?/span>
sudo docker run -i -t ubuntu /bin/bash
榪欏彞鍛戒護鎴戠殑鐞嗚В灝辨槸錛宻udo 涓存椂鍒囨崲綆$悊鍛樻潈闄愶紝浣跨敤 docker run 鍛戒護錛屽惎鍔ㄩ暅鍍?/span>
ubuntu 涓殑 bash銆?/span>docker run 浼氭鏌ユ湰鍦版槸鍚︽湁ubuntu榪欎釜鍩虹闀滃儚錛屽鏋滄病鏈夛紝
鍒欏幓docker hub registry 鍘繪嫻嬪茍涓嬭澆姝ら暅鍍忥紝涓嬭澆瀹屾瘯鍐嶆墽琛屻?/span>
鐢變簬瀹瑰櫒鏈夎嚜宸辯殑ip錛岃嚜宸辯殑shell錛屾槸鐙珛鐨勩傚洜姝ゅ姞涓?-i 鍙傛暟鏉ユ墦寮瀹瑰櫒鐨勬爣鍑嗚緭鍏?/span>
STDIN錛屼嬌鐢?-t 緇欏鍣ㄩ厤涓涓氦浜掑紡緇堢銆傚綋鏂板鍣ㄤ笅杞藉畬姣曞悗錛屼細鑷姩浠oot鐢ㄦ埛鐧?/span>
褰曞埌鏂扮殑瀹瑰櫒涓傜晫闈㈡樉紺虹殑鏄細root@瀹瑰櫒ID 銆傚鍣ㄧ殑涓繪満鍚嶅氨鏄鍣ㄧ殑ID銆?/span>
鍋囪璇存垜浠兂瑕佺粰榪欎釜瀹瑰櫒瀹夎涓涓猚url錛屾垨鑰呮槸 ping錛屽彲浠ラ氳繃濡備笅鍛戒護
sudo docker run ubuntu apt-get install -y curl
docker run 瀹瑰櫒鍚?鍛戒護
絳変簡鍗婁釜灝忔椂錛岃繕娌′笅杞藉畬姣曪紝鐢變簬榪欎釜鍩虹闀滃儚涓嬭澆瀹炲湪澶參錛屾垜鎹簡涓涓暅鍍?/span>
鎴戜箣鍓峱ull浜嗕竴涓悕涓簆aulcos11/docker-tutorial鐨勯暅鍍忥紝瀹瑰櫒鏈?1涓?/span>
濡傛灉浣犳兂涓嬭澆鍏朵粬鐨勯暅鍍忥紝鍙互浣跨敤 docker search tutorial 棣栧厛鏌ョ湅鍙敤闀滃儚銆傜劧鍚庝嬌鐢?/p>
docker pull 鎶婂畠鎷変笅鏉ャ?/p>
root@cloudsoar-virtual-machine:/home/cloudsoar# docker search tutorial
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
georgeyord/reactjs-tutorial This is the backend of the React comment b... 2 [OK]
mhausenblas/kairosdb-tutorial GitHub fetcher for KairosDB tutorial 1 [OK]
odk211/spree-tutorial 1 [OK]
paulcos11/docker-tutorial docker tutorial
root@cloudsoar-virtual-machine:/home/cloudsoar# docker pull paulcos11/docker-tutorial
Using default tag: latest
latest: Pulling from paulcos11/docker-tutorial
044ffdf80f70: Pull complete
...
Digest: sha256:8effcf1f4eac7096ba4eaf4a90261580657605d159946372c12ae28b7e5e74f1
Status: Downloaded newer image for paulcos11/docker-tutorial:latest
鍒拌繖閲岋紝鎴戞垚鍔熶笅杞戒簡瀹瑰櫒闀滃儚paulcos11/docker-tutorial
緇х畫嫻佺▼錛岃繘鍏ユ垜浠殑瀹瑰櫒
root@cloudsoar-virtual-machine:~# docker run -i -t paulcos11/docker-tutorial /bin/bash
root@537739299f24:/#
鎵ц瀹屾瘯鍙互鐪嬪埌榪涘叆浜嗗鍣ㄧ殑bash錛岀敤鎴鋒槸root錛屽鍣↖D鏄?span style="color: #ff0000;">537739299f24錛?/span>
3.3 浣跨敤瀹瑰櫒
鍙互浣跨敤 hostname 鏌ョ湅瀹瑰櫒鐨勪富鏈哄悕
root@537739299f24:/# hostname
537739299f24
鍙互鐪嬪埌瀹瑰櫒鐨処D灝辨槸瀹瑰櫒鐨勪富鏈哄悕銆?br />涓嬩竴姝ョ湅鐪?/etc/hosts 鏂囦歡
root@537739299f24:/# cat /etc/hosts
172.17.0.2 537739299f24
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
鍙互鐪嬪埌docker 宸茬粡鍦╤ost鏂囦歡涓負璇ュ鍣ㄧ殑ijp澧炲姞浜嗕竴鏉′富鏈洪厤緗」
鍐嶇湅鐪婭P
root@537739299f24:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
30: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever
鍙互鐪嬪埌榪欓噷鏈塴o鐨勫洖鐜帴鍙c傝繕鏈塱p鏄?72.17.0.2鐨勬爣鍑唀th0鎺ュ彛錛屽拰瀹夸富鏈哄畬鍏ㄤ竴鏍楓?/span>
鏌ョ湅瀹瑰櫒 涓殑榪涚▼
root@537739299f24:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.1 21944 3528 ? Ss 03:03 0:01 /bin/bash
root 12 0.0 0.0 19188 2336 ? R+ 03:14 0:00 ps -aux
鎺ヤ笅鏉ワ紝鎴戞兂緇欏鍣ㄥ畨瑁呬竴涓獀im
榪欓噷鎴戝厛鏇存柊涓嬪鍣ㄧ殑婧愬啀瀹夎銆?br />
root@537739299f24:/# apt-get update && apt-get install vim
瀹夎瀹屾瘯浣跨敤 exit錛屽嵆鍙鍑哄埌瀹夸富鏈虹郴緇熴傝繖鏃跺鍣ㄤ篃浼氬仠姝紝鍥犱負涓鏃﹂鍑哄鍣紝
瀹瑰櫒涔熼殢涔嬪仠姝簡榪愯銆備絾鏄鍣ㄤ粛鐒跺瓨鍦紝鍙互鐢?docker ps -a 鏌ョ湅瀹瑰櫒鍒楄〃銆?/span>
root@537739299f24:/# exit
exit

docker ps 鍙互鏌ョ湅榪愯涓殑瀹瑰櫒錛屽姞涓?-a 鍙傛暟鍙互鏌ョ湅鎵鏈夌殑瀹瑰櫒
3.4 瀹瑰櫒鍛藉悕
鍙互浣跨敤濡備笅鍛戒護涓哄鍣ㄦ寚瀹氫竴涓悎娉曟湁鎰忎箟鐨勫悕瀛椼?/p>
root@cloudsoar-virtual-machine:~# docker run --name wzy_the_container -i -t paulcos11/docker-tutorial /bin/bash
root@0a09dfd688ea:/# exit
exit
3.5 閲嶆柊鍚姩宸茬粡鍋滄鐨勫鍣?/span>
姝ゆ椂錛寃zy_the_container 宸茬粡鍋滄浜嗐傚彲浠ヤ嬌鐢ㄥ涓嬪懡浠ら噸鍚竴涓凡緇忓仠姝㈢殑瀹瑰櫒銆?br />
root@cloudsoar-virtual-machine:~# docker start wzy_the_container
wzy_the_container
涔熷彲浠ヤ嬌鐢ㄥ鍣↖D鏇挎崲瀹瑰櫒鍚嶃?/span>
3.6 闄勭潃鍒板鍣ㄤ笂
瀹瑰櫒鍚姩鐨勬椂鍊欎細鎸夌収docker run鎸囧畾鐨勫弬鏁版潵榪愯銆傚洜姝よ繖涓鍣ㄥ惎鍔ㄥ悗浼氬惎鍔ㄤ竴涓氦浜?/p>
鐨剆hell銆傛垜鍙互浣跨敤 docker attach 鐩存帴闄勭潃鍒版瀹瑰櫒銆?/p>
root@cloudsoar-virtual-machine:~# docker attach wzy_the_container
root@0a09dfd688ea:/#
鍙互鐪嬪埌閲嶆柊浼氬埌浜嗗鍣ㄧ殑Bash鎻愮ず絎︾晫闈€?br />
濡傛灉閫鍑哄鍣ㄧ殑shell錛屽鍣ㄤ篃浼氶殢涔嬪仠姝㈣繍琛屻?/p>
3.7 鍒涘緩瀹堟姢寮忓鍣?/strong>
闄や簡浜や簰寮忚繍琛岀殑瀹瑰櫒錛屾垜浠篃鍙互鍒涘緩瀹堟姢瀹瑰櫒銆傚彲浠ラ暱鏈熺殑榪愯搴旂敤紼嬪簭鎴栬呮湇鍔°?/p>
澶у鏃跺欓渶瑕佸垱寤哄畧鎶ゅ紡瀹瑰櫒銆?/p>
[#10#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
cf5636f0499fa0105b845b5dfa61913ff7d5fccfb1b19c16b09ed2752233794d
鐢變簬姝ゆ椂絎?3.2 姝ユ垜涓嬭澆鐨?Ubuntu 鍩虹闀滃儚Downloading 48.09 MB/65.69 MB 鍒氬ソ涓嬭澆
瀹屾瘯錛屾墍浠ユ鏃舵垜寮濮嬩嬌鐢╱buntu瀹瑰櫒闀滃儚鎿嶄綔浜嗐?/span>
docker run 鐨勫弬鏁?-d 鏄斁鍒板悗鍙版墽琛屻傛鏃舵垜浠茍娌℃湁鍍忎笂涓涓鍣ㄧ洿鎺ラ檮鐫鍒版柊瀹瑰櫒鐨?/span>
shell浼氳瘽涓婏紝鑰屾槸榪斿洖浜嗕竴涓鍣↖D鑰屽凡銆傛鏃朵嬌鐢?docker ps 鍙互鐪嬪埌姝e湪榪愯鐨勫鍣ㄣ?/span>

ubuntu灝辨槸鎴戝垰鍒氫笅杞藉畬姣曠殑鍩虹闀滃儚銆?paulcos11/docker-tutorial 鏄垜鑷繁涓嬭澆鐨勫叾浠栫殑闀滃儚銆?br />
3.8 瀹瑰櫒鍐呴儴鍐嶆悶浠涔?/strong>
浣跨敤 docker logs 鑾峰彇瀹瑰櫒鏃ュ織
[#16#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker logs daemon_dave
hello world
hello world
hello world
hello world
hello world
hello world
鎴栬呭彲浠ュ姞涓?f 瀹炴椂鐩戞帶瀹瑰櫒鏃ュ織銆?/span>
sudo docker logs -f daemon_dave
涔熷彲浠ヨ拷韙棩蹇楁煇涓鐗囨錛屽彧闇瑕乼ail鍛戒護鍔犲叆 -f --lines鏍囧織鍗沖彲銆?/p>
渚嬪錛?docker logs --tail 10 daemon_dave 鑾峰彇鏈鍚?0琛屾棩蹇楀嵆鍙?/p>
docker logs --tail 0 -f daemon_dave 鑾峰彇鏈鏂版棩蹇椼?/p>
濡傛灉瑕佹煡鐪嬫棩蹇楃殑鏃墮棿錛屽彲浠ュ姞涓婃椂闂存埑銆?/p>
[#18#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker logs -ft daemon_dave
2016-03-15T03:45:28.457991514Z hello world
2016-03-15T03:45:29.472422582Z hello world
2016-03-15T03:45:30.475130491Z hello world
3.9 鏌ョ湅瀹瑰櫒榪涚▼
鏌ョ湅瀹瑰櫒鍐呯殑榪涚▼鍙互浣跨敤 docker top 鍛戒護銆?br />
[#20#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker top daemon_dave
UID PID PPID C STIME TTY TIME CMD
root 25381 22325 0 11:45 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done
3.10 鍦ㄥ鍣ㄥ唴閮ㄨ繍琛岃繘紼?/span>
鎴戜滑鍙互浣跨敤docker exec 鍛戒護鍦ㄥ鍣ㄥ唴閮ㄩ澶栧惎鍔ㄦ柊榪涚▼錛屽彲浠ヨ繍琛岀殑榪涚▼鏈変袱縐嶇被鍨嬶紝
浜や簰寮忎換鍔″拰鍚庡彴浠誨姟銆傞鍏堟垜浠嬌鐢?touch 鍛戒護鍒涘緩涓涓┖鏂囦歡銆?/span>
$sudo docker exec -d daemon_dave touch /etc/new_config_file
-d 琛ㄧず鏄悗鍙拌繘紼嬨?/span>
鎴栬呮墦寮涓涓猻hell
$sudo docker exec -t -i daemon_dave /bin/bash
root@cf5636f0499f:/#
3.11 鍋滄瀹堟姢寮忓鍣?/span>
$sudo docker stop daemon_dave
daemon_dave
3.12 鑷姩閲嶅惎瀹瑰櫒
濡傛灉鐢變簬鏌愮閿欒瀵艱嚧瀹瑰櫒鍋滄錛屽彲浠ラ氳繃 --restart 鏍囧織璁ヾocker鑷姩閲嶆柊鍚姩瀹瑰櫒銆?/span>
$sudo docker run --restart=on-failure:5 --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
Error response from daemon: Conflict. The name "daemon_dave" is already in use by container cf5636f0499f. You have to remove (or rename) that container to be able to reuse that name.
榪欓噷鎴戠殑榪愯涓嶈搗鏉ワ紝鍥犱負 -- restart 鏍囩ず鏄痙ocker 2.0 寮曞叆鐨勩傛垜鐨勬槸docker 1.9鐗堟湰銆?/p>
3.13 娣卞叆瀹瑰櫒
闄や簡浣跨敤docker ps 鏌ョ湅瀹瑰櫒淇℃伅錛岃繕鍙互浣跨敤 docker inspect 鏌ョ湅鏇村淇℃伅
$sudo docker inspect daemon_dave
[sudo] password for cloudsoar:
[
{
"Id": "cf5636f0499fa0105b845b5dfa61913ff7d5fccfb1b19c16b09ed2752233794d",
"Created": "2016-03-15T03:45:28.124542139Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo hello world; sleep 1; done"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2016-03-15T03:45:28.455126857Z",
"FinishedAt": "2016-03-15T04:05:11.945521026Z"
},
...
涔熷彲浣跨敤 -f 鎴栬?--format 鏍囧織鏉ラ夊畾鏌ョ湅緇撴灉銆?/p>
$sudo docker inspect --format='{{ .State.Running}}' daemon_dave
false
浠ュ強鏌ョ湅鍏朵粬淇℃伅
$sudo docker start daemon_dave
daemon_dave
$sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' daemon_dave
172.17.0.3
3.14 鍒犻櫎瀹瑰櫒
濡傛灉瀹瑰櫒涓嶅湪浣跨敤錛屽彲浠ヤ嬌鐢?docker rm 鍛戒護鍒犻櫎銆?/span>
榪欓噷鍋囪鎴戣鍒犻櫎 daemon_dave 榪欎釜瀹瑰櫒錛屼粬鐨勫鍣↖D鏄?nbsp;cf5636f0499f
$sudo docker rm cf5636f0499f
Error response from daemon: Conflict, You cannot remove a running container. Stop the container before attempting removal or use -f
Error: failed to remove containers: [cf5636f0499f]
$sudo docker stop cf5636f0499f
cf5636f0499f
$sudo docker rm cf5636f0499f
cf5636f0499f
鐢變簬涓嶈兘鍒犻櫎姝e湪榪愯鐨勫鍣紝鎵浠ラ渶瑕佸厛鍋滄銆?/p>
3.15 灝忕粨
涓嬩竴绔犲涔犲浣曟瀯寤鴻嚜宸辯殑Docker闀滃儚錛屼互鍙婂浣曚嬌鐢―ocker 浠撳簱鍜?Docker Registry.
榪愯 64 浣?CPU 鏋舵瀯鐨勮綆楁満錛孌ocker 鐩墠涓嶆敮鎸?32 浣?CPU
榪愯 Linux 3.8 鎴栬呮洿楂樼増鏈唴鏍搞?/p>
鍐呮牳蹇呴』鏀寔涓縐嶉傚悎鐨勫瓨鍌ㄩ┍鍔?(storage driver)錛屼緥濡?Device Mapper, AUFS
鍐呮牳蹇呴』鏀寔騫跺紑鍚?cgroup 鍜屽懡鍚嶇┖闂?(namespace) 鍔熻兘
2.2 Ubuntu 涓畨瑁?Docker
瀹樻柟鏀寔鐗堟湰錛?/p>
Ubuntu Trusty 14.04 LTS 64 浣?/p>
Ubuntu Precise 12.04 LTS 64 浣?/p>
浣嗘槸騫朵笉鎰忓懗鐫鍏朵粬鐨刄buntu鎴栬匘ebian鐗堟湰灝變笉鑳藉畨瑁匘ocker錛屽彧瑕佹湁鍚堥傜殑鍐呮牳鍜?/p>
Docker鎵蹇呴』鐨勬敮鎸佸嵆鍙?/p>
2.2.1 媯鏌ュ墠鎻愭潯浠?/p>
# 鎴戠殑鐜鏄?windows 7 鏃楄埌鐗?64 浣嶏紝 6GB 鍐呭瓨銆?/p>
# 瀹夎浜?Vmware 铏氭嫙鏈猴紝閲岄潰瀹夎浜嗕竴涓?Ubuntu 15.10
[#1#cloudsoar@cloudsoar-virtual-machine ~]$uname -a
Linux cloudsoar-virtual-machine 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
鍙互鐪嬪埌鎴戠殑鍐呮牳鏄?3.19.0 x86_64 鐨勫唴鏍革紝鍥犳涓嶉渶瑕佸崌綰у唴鏍?/p>
2 鏌ョ湅Device Mapper
浠諱綍 Ubuntu 12.04 鎴栬呮洿楂樼増鏈兘宸茬粡瀹夎浜咲evice Mapper錛屽涓嬪懡浠ゅ彲浠ョ‘璁ゆ槸鍚﹀畨瑁?/p>
[#2#cloudsoar@cloudsoar-virtual-machine ~]$ls -l /sys/class/misc/device-mapper lrwxrwxrwx 1 root root 0 3鏈?14 15:26 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper
2.2.2 瀹夎 Docker
棣栧厛闇瑕佹坊鍔?Docker 鐨?APT 浠撳簱錛屾坊鍔犱箣鍓嶉渶瑕佺‘璁ゅ凡緇忓畨瑁呬簡curl鍛戒護
[#3#cloudsoar@cloudsoar-virtual-machine ~]$whereis curl curl: /usr/bin/curl /usr/share/man/man1/curl.1.gz [#4#cloudsoar@cloudsoar-virtual-machine ~]$sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
濡傛灉娌″畨瑁咃紝浣跨敤 apt-get –y install curl 鍛戒護瀹夎
鎺ヤ笅鏉ユ坊鍔?Docker 浠撳簱鐨?GPG 瀵嗛挜
[#7#cloudsoar@cloudsoar-virtual-machine ~]$curl -s https://get.docker.io/gpg | sudo apt-key add - gpg: 鎵句笉鍒版湁鏁堢殑 OpenPGP 鏁版嵁銆?/pre>鎴戠殑铏氭嫙鏈烘槸浠婂ぉ瀹夎鐨勬柊鐨勩傝繖閲屾彁紺烘姤閿欙紝鎵句笉鍒癘penPGP鏁版嵁銆?/p>
緗戜笂宸壘鍒版柟娉曪細
[#10#cloudsoar@cloudsoar-virtual-machine ~]$sudo curl -s https://get.docker.io/gpg | sudo apt-key add - gpg: 鎵句笉鍒版湁鏁堢殑 OpenPGP 鏁版嵁銆?[#11#cloudsoar@cloudsoar-virtual-machine ~]$gpg --keyserver pgpkeys.mit.edu --recv-key 9AA38DCD55BE302B gpg: 宸插垱寤虹洰褰?#8216;/home/cloudsoar/.gnupg’ gpg: 鏂扮殑閰嶇疆鏂囦歡‘/home/cloudsoar/.gnupg/gpg.conf’宸插緩绔?gpg: 璀﹀憡錛氬湪‘/home/cloudsoar/.gnupg/gpg.conf’閲岀殑閫夐」浜庢嬈¤繍琛屾湡闂存湭琚嬌鐢?gpg: 閽ュ寵鐜?#8216;/home/cloudsoar/.gnupg/secring.gpg’宸插緩绔?gpg: 閽ュ寵鐜?#8216;/home/cloudsoar/.gnupg/pubring.gpg’宸插緩绔?gpg: 涓嬭澆瀵嗛挜‘55BE302B’錛屼粠 hkp 鏈嶅姟鍣?pgpkeys.mit.edu gpg: /home/cloudsoar/.gnupg/trustdb.gpg錛氬緩绔嬩簡淇′換搴︽暟鎹簱 gpg: 瀵嗛挜 55BE302B錛氬叕閽?#8220;Debian Archive Automatic Signing Key (5.0/lenny) <ftpmaster@debian.org>”宸插鍏?gpg: 娌℃湁鎵懼埌浠諱綍緇濆淇′換鐨勫瘑閽?gpg: 鍚堣琚鐞嗙殑鏁伴噺錛? gpg: 宸插鍏ワ細1 (RSA: 1) [#12#cloudsoar@cloudsoar-virtual-machine ~]$gpg -a --export 9AA38DCD55BE302B | sudo apt-key add - OK瀹屾垚鍚庢洿鏂版簮錛宻udo apt-get update
姝ゆ椂錛屾垜鐢ㄨ櫄鎷熸満鍒涘緩浜嗕竴涓揩鐓у浠斤紝浠ヤ究浠ュ悗鏈夐棶棰橀渶瑕佹仮澶嶇殑鏃跺欐柟渚夸嬌鐢ㄣ?/p>
涓嬮潰寮濮嬪畨瑁匘ocker
[#14#cloudsoar@cloudsoar-virtual-machine ~]$sudo apt-get install lxc-docker 姝e湪璇誨彇杞歡鍖呭垪琛?.. 瀹屾垚 姝e湪鍒嗘瀽杞歡鍖呯殑渚濊禆鍏崇郴鏍?姝e湪璇誨彇鐘舵佷俊鎭?.. 瀹屾垚 灝嗕細瀹夎涓嬪垪棰濆鐨勮蔣浠跺寘錛? aufs-tools cgroupfs-mount git git-man liberror-perl lxc-docker-1.9.1 寤鴻瀹夎鐨勮蔣浠跺寘錛? git-daemon-run git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn 涓嬪垪銆愭柊銆戣蔣浠跺寘灝嗚瀹夎錛? aufs-tools cgroupfs-mount git git-man liberror-perl lxc-docker lxc-docker-1.9.1 鍗囩駭浜?0 涓蔣浠跺寘錛屾柊瀹夎浜?7 涓蔣浠跺寘錛岃鍗歌澆 0 涓蔣浠跺寘錛屾湁 322 涓蔣浠跺寘鏈鍗囩駭銆?闇瑕佷笅杞?12.1 MB 鐨勮蔣浠跺寘銆?瑙e帇緙╁悗浼氭秷鑰楁帀 53.8 MB 鐨勯澶栫┖闂淬?鎮(zhèn)ㄥ笇鏈涚戶緇墽琛屽悧錛?[Y/n] y鏁翠釜涓嬭澆榪囩▼鍙兘鏈夌偣鎱紝鎴戣繖閲屾槸鐢?shù)淇?00Mb鐨勫厜綰わ紝涓嬭澆閫熷害鏄?0kb/s宸﹀彸
瀹夎瀹屾瘯鍚庯紝浣跨敤 docker info 鏌ョ湅鏄惁瀹夎騫惰繍琛屼簡
[#15#cloudsoar@cloudsoar-virtual-machine ~]$sudo docker info Containers: 0 Images: 0 Server Version: 1.9.1 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 0 Dirperm1 Supported: true Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.19.0-15-generic Operating System: Ubuntu 15.04 CPUs: 1 Total Memory: 2.43 GiB Name: cloudsoar-virtual-machine ID: RL5D:42DH:XMAC:GDQY:VWPJ:3YGM:UHQK:K3QD:USCH:TEGA:32PF:HUNB2.2.3 Docker 鍜?UFW
ubuntu涓紝濡傛灉浣跨敤 UFW (Uncomplicated Firewall) 榪橀渶瑕佸惎鍔?UFW 鐨勬暟鎹寘杞彂
Docker鎵嶈兘姝e父榪愯錛岄渶瑕佸 /etc/default/uwf 鏂囦歡鍋氬嚭涓鐐規(guī)敼鍔?/p>
灝?DEFAULT_FORWARD_POLICY="DROP" 鏀逛負 “ACCEPT”, 淇濆瓨浠庢柊鍔犺澆鍗沖彲.
2.9 Docker 瀹堟姢榪涚▼
褰?Docker 瀹夎瀹屾瘯鍚? 榛樿浼氱珛鍗沖惎鍔?Docker 瀹堟姢榪涚▼. 鐩戝惉 /var/run/docker.sock 榪?/p>
涓?Unix 濂楁帴瀛楁枃浠舵潵鑾峰彇鏉ヨ嚜瀹㈡埛绔殑 Docker 璇鋒眰. 濡傛灉緋葷粺瀛樺湪鍚嶄負 docker 鐨勭敤鎴風粍
鐨勮瘽錛孌ocker 浼氬皢姝ゅ鎺ュ瓧鏂囦歡鐨勬墍鏈夎呰緗負 docker 鐢ㄦ埛緇勶紝榪欐牱 docker 鐢ㄦ埛緇勬墍
鏈夌敤鎴烽兘鍙互鐩存帴榪愯 Docker 涓嶇敤浣跨敤 sudo銆?/p>
2.9.1 閰嶇疆 Docker 瀹堟姢榪涚▼
榪欐潯鍛戒護浼氬皢Docker瀹堟姢榪涚▼緇戝畾鍒板涓繪満涓婄殑鎵鏈夌綉緇滄帴鍙c?[#19#cloudsoar@cloudsoar-virtual-machine ~]$sudo /usr/bin/docker -d -H tcp://0.0.0.0:23752.9.2 媯鏌ュ畧鎶よ繘紼嬫槸鍚﹀湪榪愯
[#2#cloudsoar@cloudsoar-virtual-machine ~]$sudo status docker [sudo] password for cloudsoar: status: 鏃犳硶榪炴帴鍒?Upstart: Failed to connect to socket /com/ubuntu/upstart: 鎷掔粷榪炴帴鎴戣繖閲屾姤閿欍?浠婂ぉ鏆傛椂榪樻湭瑙e喅錛屾湁寰呰繘涓姝ユ煡鎵捐祫鏂欍?/p>
zhiye_wang 2016-03-14 18:00 鍙戣〃璇勮]]>