標籤: 台北網頁設計

  • 重歐美輕亞洲 特斯拉第200個充電站投入使用

    近日,特斯拉宣佈其第200個超級充電站已開放使用。這個超級充電站位於美國加州南部的奧克斯納德河流公園公務中心附近。特斯拉目前有57%的充電站位於美國。這些超級充電站可讓特斯拉電動汽車30分鐘充滿電。   特斯拉正不斷完善其充電網路,其向南有霍索恩(Hawthorne)和特甬牧場(Tejon Ranch)超級充電站,向北有索爾萬(Solvang)超級充電站,東部則有巴斯托(Barstow)超級充電站。他們表示明年其充電站網路將覆蓋美國98%的區域。   目前特斯拉已分別在北美、歐洲和亞洲建造了114座、66座、20座超級充電站。為了完善充電網路,特斯拉未來將在北美進一步縮小超級充電站間的間隙,並且將其將延伸至加拿大,而在歐洲,特斯拉將增大超級充電站密度和覆蓋國家。但是在亞洲,特斯拉的超級充電站建造計畫則顯得相對保守,如今在中國僅有7座。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    南投搬家公司費用需注意的眉眉角角,別等搬了再說!

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※教你寫出一流的銷售文案?

  • Tesla 第二產線將完工 預估產能跳增 3 倍

    近 3 個月前,特斯拉一度為了建置第 2 條產線而短暫停工,現在有分析師指出,擴廠工程已接近完成,且推估新產線產能還將跳增逾 3 倍。   Global Equities Research 分析師 Trip Chowdhry 最近參訪完特斯拉廠房後指出,新產線運轉已沒有問題,預估每週可產出 3,000 輛電動車。   特斯拉曾在第二季財報上揭露,原有產線每週產能約 800 輛,Chowdhry 預測約莫再 4 至 6 週的時間,舊產線產出即可提升至 1,000 輛。另外,Chowdhry 還注意到工廠內仍有許多閒置空間,似乎是預留給特斯拉正在開發的新一代平價電動車 Model 3。   廠房設施重整約花了特斯拉 1 億美元,若不算超級電池工廠,這是該公司史上最大單筆投資計畫。第 2 條產線開始投產後,特斯拉將可以 2 條產線同時生產 Model S 轎車與 Model X 運動休旅車。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※幫你省時又省力,新北清潔一流服務好口碑

    ※別再煩惱如何寫文案,掌握八大原則!

  • 中鋼參一腳 入股特斯拉馬達供應商富田

    中鋼集團於上周正式入股美國電動車大廠特斯拉(Tesla)馬達獨家供應商富田電機,成為其最大股東後,中鋼董事長鄒若齊 10 月 1 日首度透露,中鋼已向特斯拉釋出善意,將全力協助富田提升生產能力,希望能夠達到即時供料的能力,確保三方的穩定供應鏈關係。   中鋼轉投資、位於中部的富田公司,現在是特斯拉唯一的馬達材料供應商。中鋼日前投資富田,就是考量這一層供料關係,進而希望能夠強化與特斯拉的合作。   鄒若齊說,富田是中鋼重要的電磁鋼片客戶,但以它目前的產能,一年配合特斯拉的需求,是有能力供應幾千輛電動車所需的馬達給特斯拉。但若要富田供應上萬輛所需的馬達,恐就有困難。因此中鋼投資富田,最大目的就是要協助提升它的生產能力,希望未來能夠做到即時供料給特斯拉的目標,以穩定特斯拉的信心。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

  • 看好電動車!三星 LG 等韓企搶入功率半導體市場

    看好物聯網、電動車及智慧裝置未來的發展潛力,南韓大型企業正在全力衝刺功率半導體 (power semiconductor)。南韓媒體 ETNews 2 日報導,LG 電子 (LG Electronics) 正在積極研發功率半導體科技,該公司副董事長 Ku Bon-jun  2014 年稍早就曾親自訪問日本某家半導體公司,並取得技術顧問服務。分析顯示,Ku 這趟行程應該是為了開發 LG 集團瞄準的下一個成長動能──電動車。   功率半導體不但對耗電量有直接影響,也關係到電動車的品質好壞。LG 電子最近收購了 IC 設計商 Silicon Works,也是為了同樣的目的。   三星電子 (Samsung Electronics) 也在持續關注功率半導體的研發部門。三星除了自行開發行動裝置與面板的電源管理 IC 外,還打算發展應用於電動車、可再生能源的相關裝置。三星已經成功在自家的通訊晶片「Exynos Modem 303」導入電源管理解決方案「封包追蹤 (envelope tracking)」技術。這種技術可即時依據頻率、耗電量分配電力,並x連結至基頻 IC、電源管理 IC 以及無線功率放大器 (PA)。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※超省錢租車方案

    ※教你寫出一流的銷售文案?

  • Tesla 神秘代號 D 新車 10/9 巴黎車展亮相

    Tesla 神秘代號 D 新車 10/9 巴黎車展亮相

        巴黎國際汽車大展將在 10 月 4 日登場,電動車大廠特斯拉(Tesla)也確定不會缺席。特斯拉預告 9 日將發表代號 D 的神秘新車。除此之外,特斯拉還有更多消息將宣佈,為車展提前炒熱話題。   特斯拉旗下有轎車 Model S、SUV 運動休旅車 Model X,以及正在開發之中的平價車款 Model 3。按此命名慣例,神秘新車預料將稱為 Model D。   特斯拉口風甚緊,此前外界對 Model D 毫無所悉,直至時機成熟,才由執行長 Elon Musk 透過推文對外宣布,且暗示還有其它產品消息。   Musk 曾嘲笑燃料電池,因此可以確定的是 Model D 絕非燃料電池動力車。至於 Musk 口中的其它消息指的可能是升級現有車種硬體設備,如更先進的車用資訊娛樂系統,也有傳言指出可能是全新的電動摩托車,以使特斯拉電動車產品線更多元化。     (Source:)

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

  • 全球相機市占前五強出爐!Nikon 被超車、Sony 衝上第二名

    數位相機近年銷售逐漸下滑,眾品牌逐漸調整策略,大舉擁抱更輕巧的無反相機,也讓市占排名出現變化。《日經新聞》數據部門近期釋出 2019 年全球相機市占排行前五名,相較於去年出現不少變化。

    第一名仍是業界龍頭 Canon,擁有接近一半的市占率,且對比 2018 年還增加了 2.4%,現在累積至 45.4%。說明即便面臨富士、Sony 在無反領域持續進攻,Canon 仍以自身步調推出新產品,今年亦發表 EOS R5、R6 以及一系列 RF 鏡頭,有望在專業領域搶下更多死忠用戶。

    Sony 則在 2019 年首度超越 Nikon,隨著 A7 III 獲得熱烈好評,消費級別的 a6000 系列以及 RX100 也都有斬獲,市占率小幅增加至 20.2%,全年上升 0.9%。至於 Nikon 由於較晚踏入無反領域,面臨不少挑戰,2019 年市占率下滑 1.6%,整體落在 18.6%。外媒《PetaPixel》分析,隨著 Nikon 投入無反 Z 系列,今年應該能稍微止血。

    排行第四、第五的分別是富士與 Panasonic,兩者市占率皆是 4.7%,前者全年下滑 0.4%,後者則是維持不動。至於近期遭到出售的 Olympus 在 2018 年原本是第五位,如今因銷售量下滑,被擠出前五名。

    對於相機品牌來說,2019 年依舊不好過。數據亦顯示全年出貨數量僅 1483 萬台,下滑了 22%。今年碰上疫情更是雪上加霜,根據日本相機影像器材工業協會(CIPA)數據,上半年(1-6 月)數位相機總出貨量僅有 351 萬台,對比去年同期少了 51.9%,是 CIPA 於 2000 年開始公布數據以來,史上最低點的成績。

    新聞來源:https://3c.ltn.com.tw/news/41345

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

  • 衣索比亞總理阿邁德推動環保、性平獲2019年諾貝爾和平獎

    貝爾和平獎11日出爐,得獎者是衣索比亞總理阿邁德(Abiy Ahmed),原因是他結束該國與鄰國厄利垂亞之間長達20年的戰火,這項創舉又激發了非洲地區一系列的外交突破,阿邁德也提倡性別平等、環境保護。

    阿邁德2018年4月上任,是該國第1位奧羅莫元首,在最初幾個月,他果斷、大膽地釋放政治犯,並對他們受到的酷刑予以譴責,也釋放被監禁的記者,甚至與政治反對派、民間社會對談,討論改革問題,並邀請先前流亡的政黨人士返國,還針對安全、司法部門進行重大改革。

    阿邁德也致力於性別、環保問題,例如在國境內植樹造林以遏制氣候變化的負面影響。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是  USB CONNECTOR   ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案 ?

  • BERT的前世今生

    BERT的前世今生

    Transformer

    Transformer來自論文: All Attention Is You Need

    別人的總結資源:

    1. 谷歌官方AI博客: Transformer: A Novel Neural Network Architecture for Language Understanding
    2. Attention機制詳解(二)——Self-Attention與Transformer谷歌軟件工程師
    3. 放棄幻想,全面擁抱Transformer:自然語言處理三大特徵抽取器(CNN/RNN/TF)比較中科院軟件所 · 自然語言處理 /搜索 10年工作經驗的博士(阿里,微博);
    4. Calvo的博客:Dissecting BERT Part 1: The Encoder,儘管說是解析Bert,但是因為Bert的Encoder就是Transformer,所以其實它是在解析Transformer,裏面舉的例子很好;
    5. 再然後可以進階一下,參考哈佛大學NLP研究組寫的“The Annotated Transformer. ”,代碼原理雙管齊下,講得也很清楚。
    6. 《Attention is All You Need》淺讀(簡介+代碼)這個總結的角度也很棒。

    A High-Level Look

    可以將輸入的語言序列轉換成另外一種序列,比如下圖的神經機器翻譯:

    Transformer模型由編碼器-解碼器組合組成,解碼器負責對序列進行編碼,提取時間和空間信息,解碼器負責利用時間和空間特徵信息進行上下文預測,下圖是單個結構:

    編碼器和解碼器堆棧的組合結構,在谷歌的實驗結構中採用了6個編碼器和6解碼器相對應,使模型的編碼能力和解碼能力達到一個平衡狀態(堆棧式結構):

    編碼器-解碼器的內部結構,類似seq2seq模型:

    seq2seq模型:

    Encoder: 由6個相同的層組成, 每層包含兩個sub-layers.第一個sub-layer就是multi-head attention layer,然後是一個簡單的全連接層。其中每個sub-layer都加了residual connection(殘差連接)和normalisation(歸一化)。

    Decoder: 由6個相同的層組成,這裏的layer包含三個sub-layers, 第一個sub-layer 是masked multi-head attention layer。這裡有個特別點就是masked, 作用就是防止在訓練的時候,使用未來的輸出的單詞。比如訓練時,第一個單詞是不能參考第二個單詞的生成結果的。Masked是在點乘attention操作中加了一個mask的操作,這個操作是保證softmax操作之後不會將非法的values連到attention中,提高泛化性。

    Self-Attention at a High Level

    假設下面的句子就是我們需要翻譯的輸入句:

    ”The animal didn’t cross the street because it was too tired”

    當模型處理單詞的時候,self attention層可以通過當前單詞去查看其輸入序列中的其他單詞,以此來尋找編碼這個單詞更好的線索。

    Self-Attention in Detail

    第一步是將輸入的嵌入詞向量通過三個不同的參數矩陣得到三個向量,分別是一個Query向量,一個Key向量和一個Value向量,參數矩陣分別為Wq,Wk,Wv,,如下圖所示:

    第二步是通過當前詞的q向量與其他詞的k向量計算當前詞相對於其他詞的得分,分數採用點積進行計算,如下圖所示:

    第三步和第四步是講得到的分數除以k值維數的平方根(k值維數為64,可以使訓練過程有更加穩定的梯度,這個歸一化的值是經驗所得),再通過softmax得到每個得分的標準化得分:

    第五步是對當前詞所得到的標準化值對所有value向量進行加權求和得到當前詞的attention向量,這樣就使不同單詞的嵌入向量有了attention的參与,從而預測上下文句子的時候體現不同的重要的重要程度。

    Matrix Calculation of Self-Attention

    • Attendtion向量計算的矩陣形式,通過全職矩陣進行詞向量的計算大大加快了神經網絡的速度

    • X矩陣中的每一行對應於輸入句子中的一個單詞。(圖中的4個方框論文中為512個)和q / k / v向量(圖中的3個方框論文中為64個)

    公式中濃縮前面步驟2到5來計算self attention層的輸出。

    The Beast With Many Heads

    使用“Multi-headed”的機制來進一步完善self-attention層。“Multi-headed”主要通過兩個方面改善了Attention層的性能,參數組成和子空間映射:

    Many Heads的優缺點:

    • 它拓展了模型關注不同位置的能力。Multi head 的每個參數矩陣都會記錄單詞的位置信息,使原來的單個位置信息變得更加複雜。

    • 它為attention層提供了多個“representation subspaces”。由下圖可以看到,在self attention中,我們有多個個Query / Key / Value權重矩陣(Transformer使用8個attention heads),使特徵的提取變得更加複雜,而不是作為一個整體的特徵進行,每個單獨的子空間都會進行上下文的信息融合

    在8個不同的子空間進行self-attention的操作,每個單詞生成獨立的8個向量

    將8個子空間生成的向量壓縮成一個大向量,每個向量的子空間矩陣能夠學習到更多細節,壓縮過程採用一個更大的參數矩陣進行,對multi-head向量進行組合,生成最終的特徵向量。

    整體的框圖來表示一下計算的過程:

    Representing The Order of The Sequence Using Positional Encoding

    其實上面介紹的網絡裏面並沒有考慮序列的位置信息,在RNN中不同時刻的信息是通過遞歸網絡的時間t來刻畫的,有明顯的時間刻度,所以引入了位置向量來解決時間刻度問題。

    為了讓模型捕捉到單詞的順序信息,添加位置編碼向量信息(POSITIONAL ENCODING),位置編碼向量不需要訓練,它有一個規則的產生方式,生成與詞嵌入向量有着相同的向量就可以。

    通過構造函數sin、cos來對位置進行嵌入,pos為單詞位置信息,而i用來表達dimension 這裏為了好說明,如果2i= dmodel, PE 的函數就是sin(pos/10000)。這樣的sin, cos的函數是可以通過線性關係互相表達的,通過兩個函數對奇偶維度進行編碼。位置編碼的公式如下圖所示:

    個人認為選擇正餘弦函數主要是在-1和1之間是一個對稱關係,兩個相鄰的維度編碼相差比較大,在位置上有更好的區分性,1000是序列的長度,一般盡量將取值範圍控制在四分一個周期裏面,這樣會使每一個序列的每一個維度都取唯一的值。

    The Residuals

    編碼器和解碼器裏面的每一層都採用殘差的思想進行訓練,目的就是為了解決網絡過深情況下的難訓練問題,殘差連接可以將目標值問題轉化成零值問題,一定程度也可以減少網絡的過擬合問題。

    使用殘差連接的編碼器內部結構:

    使用殘差連接的編碼器-解碼器內部結構:

    The Decoder Side

    通過自回歸方式進行預測,解碼器每一個時間步輸入一個單詞,然後輸出一個單詞,將預測的單詞作為下一時刻的輸入進行單詞的預測,直到預測結束。

    The Final Linear and Softmax Layer

    • 線性層是一個簡單的全連接神經網絡,模型一次生成一個輸出,我們可以假設模型從該概率分佈中選擇具有最高概率的單詞並丟棄其餘的單詞。

    • 對於最終句子的生成有2個方法:一個是貪婪算法(greedy decoding),一個是波束搜索(beam search)。

    Bidirectional Encoder Representation from Transformers

    Word Embedding

    • 線性模型,主要是對高維空間進行映射,其實是對one-hot向量的空間轉換。

    • 通過神經網絡對輸入的詞進行映射,獲取詞向量,一般有cbow和skip-gram兩種方法,此方法訓練的詞向量與上下文無關,並沒有參考位置信息,只是對詞的有無進行參考,採用的是負採樣,預測的時候進行的是一個二分類器,模型認為只要在下文中找出正確的詞就認為是完成了任務。

    尚未解決一詞多義等問題。比如多義詞Bank,有兩個常用含義,但是Word Embedding在對bank這個單詞進行編碼的時候,是區分不開這兩個含義的,因為它們儘管上下文環境中出現的單詞不同,但是在用語言模型訓練的時候,不論什麼上下文的句子經過word2vec,都是預測相同的單詞bank,而同一個單詞占的是同一行的參數空間,這導致兩種不同的上下文信息都會編碼到相同的word embedding空間里去。所以word embedding無法區分多義詞的不同語義,這就是它的一個比較嚴重的問題。

    Embedding from Language Models(ELMO)

    • ElMO採用雙向的LSTM做上下文相關的任務,從前到后和後到前分別做一遍LSTM的encoding操作,從而獲得兩個方向的token聯繫。

    • Word Embedding本質上是個靜態的方式,所謂靜態指的是訓練好之後每個單詞的表達就固定住了,以後使用的時候,不論新句子上下文單詞是什麼,這個單詞的Word Embedding不會跟着上下文場景的變化而改變,所以對於比如Bank這個詞,它事先學好的Word Embedding中混合了幾種語義 ,在應用中來了個新句子,即使從上下文中(比如句子包含money等詞)明顯可以看出它代表的是“銀行”的含義,但是對應的Word Embedding內容也不會變,它還是混合了多種語義。

    ELMO的本質思想是:

    事先用語言模型學好一個單詞的Word Embedding,此時多義詞無法區分,不過這沒關係。在我實際使用Word Embedding的時候,單詞已經具備了特定的上下文了,這個時候我可以根據上下文單詞的語義去調整單詞的Word Embedding表示,這樣經過調整后的Word Embedding更能表達在這個上下文中的具體含義,自然也就解決了多義詞的問題了。所以ELMO本身是個根據當前上下文對Word Embedding動態調整的思路。

    一樣的,在具體進行下游任務的時候,採用神經網絡參數微調的方法根據不同的詞的上下文環境對詞向量進行調整,從而得到同一詞的不同向量表示。

    缺點:

    • LSTM的抽取能力遠遠落後於Transformer,主要是并行計算能力

    • 拼接方式融合雙向特徵能力偏弱

    Bidirectional Encoder Representation from Transformers

    BRET採用兩階段模型,首先是語言模型預訓練;其次是使用Fine-Tuning模式解決下游任務。在預訓練階段採用了類似ELMO的雙向語言模型,雙向指的是對於預測單詞的上文和下文是否參与,如果都參与預測那麼就是雙向,雙向容易導致自己看自己的問題,後面提出mask來解決

    經過預訓練的BRET模型,其已經具備了豐富的詞向量特徵信息,然後將此詞向量信息與下游任務進行組合進行NLP下游任務,例如文本生成,文本分類。

    如何能夠更好將BRET模型與下游任務進行改造是一個比較複雜的問題,再好的預訓練語言模型都要與下游的任務模型相結合才有好的效果, BRET的優勢在於可以自由根據預訓練模型進行單詞級別的任務和句子級的任務。

    BRET模型的創新

    就是論文中指出的Masked 語言模型和Next Sentence Prediction。而Masked語言模型上面講了,本質思想其實是CBOW,但是細節方面有改進。

    Masked 語言模型:

    • 而Masked語言模型上面講了,本質思想其實是CBOW,但是細節方面有改進,掩蓋的同時,要輸出掩蓋的詞的位置,然後用真實詞來預測。
    • Mask LM主要是為了增加模型的魯棒性和實際性能,但是在訓練時使用mask過多會影響實際任務的表現,所以做了一些處理:隨機選擇語料中15%的單詞,把它摳掉,也就是用[Mask]掩碼代替原始單詞,然後要求模型去正確預測被摳掉的單詞。但是這裡有個問題:訓練過程大量看到[mask]標記,但是真正後面用的時候是不會有這個標記的,這會引導模型認為輸出是針對[mask]這個標記的,但是實際使用又見不到這個標記,這自然會有問題。為了避免這個問題, BRET改造了一下,15%的被選中要執行[mask]替身這項光榮任務的單詞中,只有80%真正被替換成[mask]標記,10%被狸貓換太子隨機替換成另外一個單詞,10%情況這個單詞還待在原地不做改動。這就是Masked雙向語音模型的具體做法。

    Next Sentence Prediction:

    • 指的是做語言模型預訓練的時候,分兩種情況選擇兩個句子,一種是選擇語料中真正順序相連的兩個句子;另外一種是第二個句子從語料庫中拋色子,隨機選擇一個拼到第一個句子後面。
    • 我們要求模型除了做上述的Masked語言模型任務外,附帶再做個句子關係預測,判斷第二個句子是不是真的是第一個句子的後續句子。之所以這麼做,是考慮到很多NLP任務是句子關係判斷任務,單詞預測粒度的訓練到不了句子關係這個層級,增加這個任務有助於下游句子關係判斷任務。所以可以看到,它的預訓練是個多任務過程。這也是BRET的一個創新,一般用於句級任務。

    Transformer&BERT總結

    • 首先是兩階段模型,第一階段雙向語言模型預訓練,這裏注意要用雙向而不是單向,第二階段採用具體任務Fine-tuning或者做特徵集成;

    • 第二是特徵抽取要用Transformer作為特徵提取器而不是RNN或者CNN;

    • 第三,雙向語言模型可以採取CBOW的方法去做(當然我覺得這個是個細節問題,不算太關鍵,前兩個因素比較關鍵)。 BRET最大的亮點在於效果好及普適性強,幾乎所有NLP任務都可以套用BRET這種兩階段解決思路,而且效果應該會有明顯提升。可以預見的是,未來一段時間在NLP應用領域,Transformer將佔據主導地位,而且這種兩階段預訓練方法也會主導各種應用。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※推薦評價好的iphone維修中心

  • 談談 Promise 以及實現 Fetch 的思路

    談談 Promise 以及實現 Fetch 的思路

    Promise 是異步編程的一種解決方案。

    Promise

    
    /**
     * 屬性
     */
    Promise.length
    Promise.prototype
    
    /**
     * 方法
     */
    Promise.all(iterable)   // 所有成功觸發成功  任何失敗觸發失敗
    Promise.race(iterable)  // 任意一個成功或失敗后觸發
    Promise.reject(reason)
    Promise.resolve(value)
    
    /**
     * 原型
     */
    Promise.prototype.constructor
    //方法
    Promise.prototype.catch(onRejected)
    Promise.prototype.then(onFulfilled, onRejected)
    Promise.prototype.finally(onFinally)
    

    Promise 有三種狀態

    • pending: 初始狀態,既不是成功,也不是失敗狀態。
    • resolve: 意味着操作成功完成。(resoloved)
    • reject: 意味着操作失敗。

    pending

    pending 是初始狀態,執行 resolve/reject 會進入對應狀態,如果不執行,責一直為 pending 狀態

    例如下面代碼,promise 將一直在 pending 狀態,不會執行 then/catch.

    new Promise(function (resolve, reject) { })
      .then(res => console.log(res))
      .catch(err => console.log(err))
    

    resolve

    resolve 意味着操作成功完成, 如果有 .then,值會傳入 .then 的第一個參數函數里。

    new Promise(function (resolve, reject) {
      resolve(1)
    })
      .then(res => console.log(res))
    

    then 的第一個參數是成功的回調,第一個參數的返回值會影響接下來鏈的去向。第一個參數的返回值一般有三種情況

    • 無返回值:會去執行下一個 .then ,沒有參數
    • 返回值非promise:調用下一個then的函數,參數為返回值
    • 返回值為promise:根據promise的執行結果,執行 下一個then/catch,如果一直是pending,則不執行下一個then/catch

    例如想要在當前 then 終止,可以這樣操作:

      .then((res) => new Promise(() => {}))
    

    reject

    reject 意味着操作失敗。

    使用 .catch 會捕獲到錯誤信息。

    與代碼報錯(如 undefined.a)不同的是, 代碼報錯如果不使用 catch 捕獲,會向外傳遞,最終傳遞到根結點;而 reject 屬於 promise 錯誤,即使不使用 catch 捕獲也不會對全局有影響。

    用 promise 實現 fetch

    先來看幾個問題:

    1. 如果請求 code 404, 會走 then 還是 catch? (答案:then)
    2. 控制台能看到一行 404 的錯誤, 為什麼還是走 then 不是 catch 呢
    3. 如果請求跨域失敗,走 then 還是 catch?(答案:catch)
    4. 同樣是控制台看到錯誤,兩者有什麼區別呢?
    5. 跨域失敗的報錯, 和 then 中 undefined.a 報錯,如果都不 catch,後者在 react 腳手架開發環境頁面會蹦,兩者有什麼區別?

    帶着這幾個問題,來看看 fetch。

    fetch 返回值是 promise,所以有三種狀態 pending、resolve、reject.

    • pending: 請求中
    • resolve: 請求成功(code 200/404/500 等, 非 200 控制台輸出錯誤)
    • reject: 請求失敗(跨域失敗、連接超時、無網絡等,控制台輸出錯誤)

    我們還發現,請求失敗時,只能 catch 到最後一行錯誤, 如圖

    捕獲后

    為什麼 404 在控制台看到錯誤,還走 then, resolve 如何實現

    實現有幾個難點,

    1. throw 後面代碼不會執行;
    2. 先報錯,后執行 then;
    3. catch 后錯誤不會打印在控制台;

    試了下,Promise.reject(‘xxx’) 這樣的報錯方式雖然是微觀任務,但是總是在.then之後才在控制台輸出,更像是宏觀任務。所以也加個setTImeout宏觀任務調至後面。

    var fetch = function () {
      return new Promise(function (resolve, reject) {
        setTimeout(function () {
          if ('請求成功 200') {
            resolve('Response數據結構');
          } else if ('請求成功 404,500等') {
            Promise.reject('GET xxxxxxxx 404');
            setTimeout(function () {
              resolve('Response數據結構');
            });
          }
        })
      })
    }
    

    請求失敗 例如跨域失敗 reject 如何實現呢

    同樣加個 setTimeout

    var fetch = function () {
      return new Promise(function (resolve, reject) {
        setTimeout(function () {
          if ('請求成功 200') {
            resolve('Response數據結構');
          } else if ('請求成功 404,500等') {
            Promise.reject('GET xxxxxxxx 404');
            setTimeout(function () {
              resolve('Response數據結構');
            });
          } else if ('請求失敗') {
            Promise.reject('Access to fetch xxxxx with CORS disabled.');
            Promise.reject('GET xxxxx net::ERR_FAILED');
            setTimeout(function () {
              reject('TypeError: Failed to fetch');
            });
          }
        })
      })
    }
    

    還是有些問題,我們實現的因為在promise 中,錯誤會有前綴 Uncaught (in promise)。瀏覽器客戶端應該有更好的實現方式。

    最後總結一下 fetch 的三種情況

    • pending: 請求中
    • resolve: 請求成功(code 200: 調用 resolve 返回數據; code: 404/500 等, 先拋錯,再調用 resolve 返回數據。)
    • reject: 請求失敗(跨域失敗、連接超時、無網絡等,先控制台拋錯,再調用 reject)

    拋錯均不影響代碼執行,與 undefined.a 不同。

    whosmeya.com

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※幫你省時又省力,新北清潔一流服務好口碑

    ※回頭車貨運收費標準

  • Docker(三)Docker常用命令

    Docker(三)Docker常用命令

    Docker常用命令

    幫助命令

    # 显示 Docker 版本信息
    docker version  
    
    # 显示系統信息,包括鏡像和容器的數量
    docker info 
    
    # 查看幫助文檔 幫助文檔地址:https://docs.docker.com/reference/
    docker [命令] --help  
    

    鏡像命令

    查看最近創建的鏡像

    docker images 查看最近創建的鏡像

    docker images [OPTIONS] [REPOSITORY[:TAG]]
    
    # 幫助文檔
    [root@hwh1 ~]# docker images --help 
    Usage:	docker images [OPTIONS] [REPOSITORY[:TAG]]
    List images
    Options:
      -a, --all             Show all images (default hides intermediate images)    显示所有鏡像
          --digests         Show digests                                           显示摘要
      -f, --filter filter   Filter output based on conditions provided             根據提供的條件過濾輸出
          --format string   Pretty-print images using a Go template                用 Go 模板打印出一個圖像
          --no-trunc        Don't truncate output                                  不截斷輸出
      -q, --quiet           Only show numeric IDs                                  只显示数字 ID
    
    # 查看最近創建的鏡像
    # REPOSITORY  鏡像的倉庫源
    # TAG  鏡像的標籤
    # IMAGE ID  鏡像的id
    # CREATED  鏡像的創建時間
    # SIZE  鏡像的大小
    [root@hwh1 ~]# docker images   
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    
    # 查看所有鏡像
    [root@hwh1 ~]# docker images -a
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    
    # 只显示数字 ID
    [root@hwh1 ~]# docker images -q
    bf756fb1ae65
    

    搜索鏡像

    docker search 搜索鏡像

    docker search [OPTIONS] TERM
    
    [root@hwh1 ~]# docker search --help 
    Usage:	docker search [OPTIONS] TERM
    Search the Docker Hub for images
    Options:
      -f, --filter filter   Filter output based on conditions provided   根據提供的條件過濾輸出
          --format string   Pretty-print search using a Go template      用 Go 模板打印出一個圖像
          --limit int       Max number of search results (default 25)    搜索結果的最大值限制
          --no-trunc        Don't truncate output                       不截斷輸出
    
    
    [root@hwh1 ~]# docker search mysql
    NAME                              DESCRIPTION                                     STARS    OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   9626
    

    下載鏡像

    docker pull 下載鏡像

    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    
    [root@hwh1 ~]# docker pull --help 
    Usage:	docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    Pull an image or a repository from a registry
    Options:
      -a, --all-tags                Download all tagged images in the repository      下載倉庫中標記所有的鏡像,拿來選擇版本
          --disable-content-trust   Skip image verification (default true)            跳過圖像驗證       
          --platform string         Set platform if server is multi-platform capable  如果服務器支持多平台,則設置平台
     -q, --quiet                   Suppress verbose output                           禁止詳細輸出              
    
    # 下載鏡像
    [root@hwh1 ~]# docker pull mysql
    Using default tag: latest                     # 版本信息(默認不設置tag,則為最新版)
    latest: Pulling from library/mysql           
    8559a31e96f4: Pull complete                   # 分層下載,docker image 的核心,聯合文件系統
    d51ce1c2e575: Pull complete 
    c2344adc4858: Pull complete 
    fcf3ceff18fc: Pull complete 
    16da0c38dc5b: Pull complete 
    b905d1797e97: Pull complete 
    4b50d1c6b05c: Pull complete 
    c75914a65ca2: Pull complete 
    1ae8042bdd09: Pull complete 
    453ac13c00a3: Pull complete 
    9e680cd72f08: Pull complete 
    a6b5dc864b6c: Pull complete 
    Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6          # 簽名
    Status: Downloaded newer image for mysql:latest 
    docker.io/library/mysql:latest                 # 真實地址
    

    刪除鏡像

    docker rmi 刪除鏡像

    docker rmi [OPTIONS] IMAGE [IMAGE...]
    
    [root@hwh1 ~]# docker rmi --help 
    Usage:	docker rmi [OPTIONS] IMAGE [IMAGE...]
    Remove one or more images
    Options:
      -f, --force      Force removal of the image        強制刪除鏡像
          --no-prune   Do not delete untagged parents    不刪除未標記的父類
    
    
    # 刪除指定鏡像
    [root@hwh1 ~]# docker rmi mysql 
    Untagged: mysql:latest
    Untagged: mysql@sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6
    Deleted: sha256:be0dbf01a0f3f46fc8c88b67696e74e7005c3e16d9071032fa0cd89773771576
    Deleted: sha256:086d66e8d1cb0d52e9337eabb11fb9b95960e2e1628d90100c62ea5e8bf72306
    Deleted: sha256:f37c61ee1973b18c285d0d5fcf02da4bcdb1f3920981499d2a20b2858500a110
    Deleted: sha256:e40b8bca7dc63fc8d188a412328e56caf179022f5e5d5b323aae57d233fb1069
    Deleted: sha256:339f6b96b27eb035cbedc510adad2560132925a835f0afddbcc1d311c961c14b
    Deleted: sha256:d38b06cdb26a5c98857ddbc6ef531d3f57b00e325c0c314600b712efc7ff6ab0
    Deleted: sha256:09687cd9cdf4c704fde969fdba370c2d848bc614689712bef1a31d0d581f2007
    Deleted: sha256:b704a4a65bf536f82e5d8b86e633d19185e26313de8380162e778feb2852011a
    Deleted: sha256:c37206160543786228aa0cce738e85343173851faa44bb4dc07dc9b7dc4ff1c1
    Deleted: sha256:12912c9ec523f648130e663d9d4f0a47c1841a0064d4152bcf7b2a97f96326eb
    Deleted: sha256:57d29ad88aa49f0f439592755722e70710501b366e2be6125c95accc43464844
    Deleted: sha256:b17c024283d0302615c6f0c825137da9db607d49a83d2215a79733afbbaeb7c3
    Deleted: sha256:13cb14c2acd34e45446a50af25cb05095a17624678dbafbcc9e26086547c1d74
    
    # 遞歸刪除(批量刪除)
    [root@hwh1 ~]# docker rmi -f $(docker images -aq)
    Untagged: hello-world:latest
    Untagged: hello-world@sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
    Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
    # 已全部刪除
    [root@hwh1 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    
    

    容器命令

    注:下載一個 centos 鏡像測試

    新建容器並啟動

    docker run 新建容器並啟動

    [root@hwh1 ~]# docker pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    8a29a15cefae: Pull complete 
    Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
    Status: Downloaded newer image for centos:latest
    docker.io/library/centos:latest
    
    docker run
    
    [root@hwh1 ~]# docker run --help 
    Usage:	docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    Run a command in a new container
    Options:
          -d, --detach                     Run container in background and print 
                                              container ID                           後台方式運行
          --name string                    Assign a name to the container            容器名字,來區分容器
          -i, --interactive                Keep STDIN open even if not attached      使用交互方式,進入容器查詢內容
          -t, --tty                        Allocate a pseudo-TTY                     使用交互方式,進入容器查詢內容
          -p, --publish list               Publish a container's port(s) to the host 指定容器端口 
              -p 主機端口:容器端口
              -p 容器端口
              -p ip:主機端口:容器端口
              容器端口
          -P, --publish-all                Publish all exposed ports to random ports 隨機端口
          
    
    # 啟動並進入容器,相當於一個小型虛擬機
    [root@hwh1 ~]# docker run  -it centos /bin/bash
    [root@af833bdd3acf /]# ls      # 基礎版 centos 很多命令都不完善
    bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    [root@af833bdd3acf /]# exit    # 退出命令
    exit
    

    列出所有正在運行的容器

    docker ps 列出所有正在運行的容器

    docker ps [OPTIONS]
    
    [root@hwh1 ~]# docker ps --help
    Usage:	docker ps [OPTIONS]
    List containers
    Options:
      -a, --all             Show all containers (default shows just running)           列出所有的容器,包括正在運行和停止的
      -f, --filter filter   Filter output based on conditions provided                 
          --format string   Pretty-print containers using a Go template
      -n, --last int        Show n last created containers (includes all states)       列出最近運行的容器
                            (default -1)
      -l, --latest          Show the latest created container (includes all states)    显示最後創建的容器
          --no-trunc        Don't truncate output                                      不截斷輸出
      -q, --quiet           Only display numeric IDs                                   只显示数字 ID
      -s, --size            Display total file sizes                                   显示文件總大小
    
    
    [root@hwh1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    a0f986785f33        centos              "/bin/bash"         7 seconds ago       Up 5 seconds                            nervous_agnesi
    [root@hwh1 ~]# docker ps -n=1
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    a0f986785f33        centos              "/bin/bash"         6 minutes ago       Up 6 minutes                            nervous_agnesi
    [root@hwh1 ~]# docker ps -q
    a0f986785f33
    

    退出容器

    exit             # 直接容器停止並退出
    Ctrl + P + Q     # 不停止容器退出(快捷鍵)
    

    刪除容器

    docker rm 刪除容器

    docker rm [OPTIONS] CONTAINER [CONTAINER...]
    
    [root@hwh1 ~]# docker rm --help 
    Usage:	docker rm [OPTIONS] CONTAINER [CONTAINER...]
    Remove one or more containers
    Options:
      -f, --force     Force the removal of a running container (uses SIGKILL)      強制刪除正在運行的容器
      -l, --link      Remove the specified link                                    刪除指定的鏈接
      -v, --volumes   Remove anonymous volumes associated with the container       刪除與容器關聯的匿名卷
    
    [root@hwh1 ~]# docker rm af833bdd3acf      刪除已經停止的
    af833bdd3acf
    [root@hwh1 ~]# docker rm -f a0f986785f33   刪除正在運行的容器
    a0f986785f33
    
    # docker ps -a -q|xargs docker rm    # 刪除所有的容器,使用管道符
    

    啟動和停止容器操作

    docker start id       # 啟動
    docker restart id     # 重啟
    docker stop id        # 停止當前正在運行的容器
    docker kill id        # 強制停止當前容器
    
    [root@hwh1 ~]# docker start 7b28015cd7f6
    7b28015cd7f6
    [root@hwh1 ~]# docker restart 7b28015cd7f6
    7b28015cd7f6
    [root@hwh1 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
    7b28015cd7f6        centos              "/bin/bash"         46 seconds ago      Up 9 seconds                                 unruffled_wiles
    e2ff2fee0669        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                       amazing_nightingale
    690a9f41c7a8        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                       zealous_blackwell
    [root@hwh1 ~]# docker stop 7b28015cd7f6
    7b28015cd7f6
    [root@hwh1 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS              NAMES
    7b28015cd7f6        centos              "/bin/bash"         57 seconds ago      Exited (0) 2 seconds ago                      unruffled_wiles
    e2ff2fee0669        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                         amazing_nightingale
    690a9f41c7a8        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago       
    

    常用的其他命令

    後台啟動容器

    # docker run -d 鏡像名
    [root@hwh1 ~]# docker run -d centos
    9e34ebe17e41fb762f535ab21d81240b5fb4b105a44ed13c8813a8a8978f9b27
    # 問題:
    # docker ps -a,發現服務停止了
    # 常見的坑:
    # docker 容器使用後台運行,就必須要有要一個前台進程,docker發現沒有應用,就會自動停止
    

    查看日誌

    docker logs [OPTIONS] CONTAINER
    
    [root@hwh1 ~]# docker logs --help
    Usage:	docker logs [OPTIONS] CONTAINER
    Fetch the logs of a container
    Options:
          --details        Show extra details provided to logs                         显示額外的詳細信息
      -f, --follow         Follow log output                                           跟蹤日誌輸出
          --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or     從時間戳開始显示
                           relative (e.g. 42m for 42 minutes)
          --tail string    Number of lines to show from the end of the logs (default   日誌显示行數
                           "all")
      -t, --timestamps     Show timestamps                                             显示時間戳
          --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37)     在時間戳之前显示日誌
                           or relative (e.g. 42m for 42 minutes)
    

    查看容器中進程信息

    docker top CONTAINER [ps OPTIONS]
    
    [root@hwh1 ~]# docker top --help 
    Usage:	docker top CONTAINER [ps OPTIONS]
    Display the running processes of a container
    
    # docker top 容器id
    [root@hwh1 ~]# docker top 147f08710d27
    UID                 PID                 PPID                C                   STIME   
    root                76123               76105               0                   21:13  
    

    查看鏡像的元數據

    docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    
    [root@hwh1 ~]# docker inspect --help 
    Usage:	docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    Return low-level information on Docker objects
    Options:
      -f, --format string   Format the output using the given Go template          用 Go 模板打印出一個圖像
      -s, --size            Display total file sizes if the type is container      如果類型是容器的話,就显示容器大小
          --type string     Return JSON for specified type                         返回指定類型的 JSON 字符串
    
    # 查看 centos 的元數據
    [root@hwh1 ~]# docker inspect 147f08710d27
    [
        {
            "Id": "147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084",
            "Created": "2020-06-15T13:13:13.783652979Z",
            "Path": "/bin/bash",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 76123,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2020-06-15T13:13:15.632825635Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee",
            "ResolvConfPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/hostname",
            "HostsPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/hosts",
            "LogPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084-json.log",
            "Name": "/dazzling_benz",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {},
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "Capabilities": null,
                "Dns": [],
                "DnsOptions": [],
                "DnsSearch": [],
                "ExtraHosts": null,
                "GroupAdd": null,
                "IpcMode": "private",
                "Cgroup": "",
                "Links": null,
                "OomScoreAdj": 0,
                "PidMode": "",
                "Privileged": false,
                "PublishAllPorts": false,
                "ReadonlyRootfs": false,
                "SecurityOpt": null,
                "UTSMode": "",
                "UsernsMode": "",
                "ShmSize": 67108864,
                "Runtime": "runc",
                "ConsoleSize": [
                    0,
                    0
                ],
                "Isolation": "",
                "CpuShares": 0,
                "Memory": 0,
                "NanoCpus": 0,
                "CgroupParent": "",
                "BlkioWeight": 0,
                "BlkioWeightDevice": [],
                "BlkioDeviceReadBps": null,
                "BlkioDeviceWriteBps": null,
                "BlkioDeviceReadIOps": null,
                "BlkioDeviceWriteIOps": null,
                "CpuPeriod": 0,
                "CpuQuota": 0,
                "CpuRealtimePeriod": 0,
                "CpuRealtimeRuntime": 0,
                "CpusetCpus": "",
                "CpusetMems": "",
                "Devices": [],
                "DeviceCgroupRules": null,
                "DeviceRequests": null,
                "KernelMemory": 0,
                "KernelMemoryTCP": 0,
                "MemoryReservation": 0,
                "MemorySwap": 0,
                "MemorySwappiness": null,
                "OomKillDisable": false,
                "PidsLimit": null,
                "Ulimits": null,
                "CpuCount": 0,
                "CpuPercent": 0,
                "IOMaximumIOps": 0,
                "IOMaximumBandwidth": 0,
                "MaskedPaths": [
                    "/proc/asound",
                    "/proc/acpi",
                    "/proc/kcore",
                    "/proc/keys",
                    "/proc/latency_stats",
                    "/proc/timer_list",
                    "/proc/timer_stats",
                    "/proc/sched_debug",
                    "/proc/scsi",
                    "/sys/firmware"
                ],
                "ReadonlyPaths": [
                    "/proc/bus",
                    "/proc/fs",
                    "/proc/irq",
                    "/proc/sys",
                    "/proc/sysrq-trigger"
                ]
            },
            "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd-init/diff:/var/lib/docker/overlay2/ae0a1afad34903571dd0df8a39bc4bea93ccd793ae2f6185fa95385c18d56f05/diff",
                    "MergedDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/merged",
                    "UpperDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/diff",
                    "WorkDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [],
            "Config": {
                "Hostname": "147f08710d27",
                "Domainname": "",
                "User": "",
                "AttachStdin": true,
                "AttachStdout": true,
                "AttachStderr": true,
                "Tty": true,
                "OpenStdin": true,
                "StdinOnce": true,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/bash"
                ],
                "Image": "centos",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {
                    "org.label-schema.build-date": "20200114",
                    "org.label-schema.license": "GPLv2",
                    "org.label-schema.name": "CentOS Base Image",
                    "org.label-schema.schema-version": "1.0",
                    "org.label-schema.vendor": "CentOS",
                    "org.opencontainers.image.created": "2020-01-14 00:00:00-08:00",
                    "org.opencontainers.image.licenses": "GPL-2.0-only",
                    "org.opencontainers.image.title": "CentOS Base Image",
                    "org.opencontainers.image.vendor": "CentOS"
                }
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "dcbcaf21dc6395481ce4c27bd58e83b306aee13216f852b4ac92edab13dc6698",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {},
                "SandboxKey": "/var/run/docker/netns/dcbcaf21dc63",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "1b8456cbbb162e74762144d5a13305ba84acb45db92ce2467c0bc15724077b72",
                "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:02",
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "23077e8fffbf9407b9d83e492e05cc11904b4dbf7fd3ab3a4b84c36c1a7ee4a5",
                        "EndpointID": "1b8456cbbb162e74762144d5a13305ba84acb45db92ce2467c0bc15724077b72",
                        "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    

    進入當前正在運行的容器

    # 我們通常容器都是使用後台方式運行的,需要進入容器,修改一些配置
    # 方式一 :docker exec -it 容器id bashShell
    # 進入容器后開啟一個新的終端,可以在裏面操作(常用)
    # docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    [root@hwh1 ~]# docker exec --help 
    Usage:	docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    Run a command in a running container
    Options:
      -d, --detach               Detached mode: run command in the background             在後台運行命令
          --detach-keys string   Override the key sequence for detaching a container      重寫用於分離容器的鍵序列
      -e, --env list             Set environment variables                                設置環境變量
      -i, --interactive          Keep STDIN open even if not attached                     即使沒有連接,也保持STDIN打開
          --privileged           Give extended privileges to the command                  授予命令擴展權限
      -t, --tty                  Allocate a pseudo-TTY                                    分配一個偽TTY
      -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])       用戶名或者 id
      -w, --workdir string       Working directory inside the container                   容器內的工作目錄
      
    
    [root@hwh1 ~]# docker exec -it a41c80fd6d1c /bin/bash
    [root@a41c80fd6d1c /]# ls
    bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    
    
    # 方式二 :docker attach 容器id
    # 進入容器正在執行的終端,不會啟動新的終端
    # docker attach [OPTIONS] CONTAINER
    
    [root@hwh1 ~]# docker attach --help 
    Usage:	docker attach [OPTIONS] CONTAINER
    Attach local standard input, output, and error streams to a running container
    Options:
          --detach-keys string   Override the key sequence for detaching a container       重寫用於分離容器的鍵序列
          --no-stdin             Do not attach STDIN                                       不要附加STDIN
          --sig-proxy            Proxy all received signals to the process (default true)  將所有接收到的信號代理到進程(默認為true)
    
    
    [root@hwh1 ~]# docker attach a41c80fd6d1c
    [root@a41c80fd6d1c /]# ls
    bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    

    拷貝文件

    # 從容器被拷貝文件到主機上
    # docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-               docker cp 容器id:容器內路徑 目的的主機路徑
    
    # 從主機上拷貝文件到容器
    # docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH               docker cp 主機路徑 容器id:目的的容器內路徑
    
    [root@hwh1 ~]# docker cp --help 
    Usage:	docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
        	docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
    Copy files/folders between a container and the local filesystem
    
    Use '-' as the source to read a tar archive from stdin
    and extract it to a directory destination in a container.
    Use '-' as the destination to stream a tar archive of a
    container source to stdout.
    
    Options:
      -a, --archive       Archive mode (copy all uid/gid information)  存檔模式(複製所有uid/gid信息)
      -L, --follow-link   Always follow symbol link in SRC_PATH        始終遵循容器內路徑中的符號鏈接
    
    # 從容器被拷貝文件到主機上
    [root@hwh1 home]# docker attach a41c80fd6d1c
    [root@a41c80fd6d1c /]# cd /home
    [root@a41c80fd6d1c home]# ls
    [root@a41c80fd6d1c home]# touch hwh.java               # 在 home 目錄下創建一個  hwh.java
    [root@a41c80fd6d1c home]# ls
    hwh.java
    [root@hwh1 home]# ls
    hwh  hwh1  hwh2  user01  user02
    [root@hwh1 home]# docker cp a41c80fd6d1c:/home/hwh.java /home           # 將 hwh.java 複製到主機上
    [root@hwh1 home]# ls
    hwh  hwh1  hwh2  hwh.java  user01  user02
    
    

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案