<em id="pn7p8"><acronym id="pn7p8"><u id="pn7p8"></u></acronym></em>

    <th id="pn7p8"></th>

    <button id="pn7p8"></button>

      <dd id="pn7p8"></dd>
      <progress id="pn7p8"><track id="pn7p8"></track></progress>

      Linux培訓
      達內IT學院

      400-111-8989

      24條 Docker 建議

      • 發布:佚名
      • 來源:網絡
      • 時間:2015-07-31 16:00

      在TES GLOBAL,我們已經愛上Docker并從Docker的0.8版本開始就在生產環境中使用它。我們的很多開發者都參加了在DockerCon歐洲上的培訓。下面是我們總結的一些tips,希望可以幫到已經有Docker基礎的同學。

      1. CLI

      1.1 美化docker ps的輸出

      將Docker ps的輸出通過管道到less -S,這樣表格式的行就不會被折疊。

      docker ps - a | less -S

      1.2 刷新日志

      docker的日志不會即時刷新,除非你使用了-F選項:

      docker logs -F

      1.3 從docker inspect中獲取一個單一的值

      docker inspect默認會輸出大量的JSON格式的數據。你可以用jq,來得到某一特定鍵的值。或者你可以使用內置的go模板功能:

      最后一個docker容器現在運轉正常嗎?

      docker inspect --format '{{.State.Running}}' $(docker ps -lq)

      1.4 使用docker exec而不是sshd 或者 nsenter

      如果你查看過Docker的發行版你會你會很清楚這個小技巧。exec在是在1.3版本中添加的新功能,可以讓你在容器里面運行一個新的進程。這樣你就不必運行sshd或者在主機上安裝nscenter。

      2. Dockerfiles

      2.1 docker build支持git倉庫

      你不但可以從本地的Dockerfile中創建Docker鏡像,你還可以簡單的給docker build指定一個倉庫的URL,然后docker build會為你做完余下的事情。

      2.2 沒有軟件包列表

      默認的鏡像(如Ubuntu)是不包含軟件包列表的,目的是讓鏡像體積更小。因此需要在任何的基礎的Dockerfile中需要使用apt-get update。

      2.3 留意軟件包的版本

      注意軟件包的安裝,因為這些命令也是會緩存起來的。意味著如果你清空了緩存,你可能會得到不同的版本;或者如果緩存長期不更新,你可能不會得到最新的安全更新。

      2.4 小體積的基礎鏡像

      在Docker Hub上有一個官方的真正零體積的Docker鏡像,它的名字叫做scratch。所以如果你有這種需求,可以讓你的鏡像從零開始。而大多數的情況下,你最好還是從busybox開始,其大小只有2.5M。

      2.5 FROM默認會獲取最新的

      如果在FROM關鍵字后你沒有指定一個版本的tag,那么默認就會獲取最新的。請注意這點,并確保盡可能的指定一個特定的版本。

      2.6 shell或者是exec模式

      在Dockerfile中可以通過兩種方式來指定命令(如CMD RUN等)。如果你僅僅寫下命令那么Docker會將其包裹在sh -c命令中執行。你也可以寫成一個字符串數組的形式。數組的寫法不需要依賴容器中的shell,因為其會使用go的exec。Docker的開發者建議使用后一種方式。

      2.7 ADD vs COPY

      ADD和COPY都能在創建容器的時候添加本地的文件。但是ADD有一些額外的魔力,如添加遠程的文件、unzip或者untar一些文件包等。使用ADD之前請了解這種差別。

      2.8 WORKDIR和ENV

      每個命令都會創建一個新的臨時鏡像并在新的shell中運行,所以如果你在Dockerfile中不能運行 cd 或者export =。使用WORKDIR在多個命令中設置工作目錄并使用ENV來設置環境變量。

      2.9 CMD和ENTRYPOINT

      CMD是當一個鏡像在運行時默認會執行的命令。默認的ENTRYPOINT是/bin/sh -c,然后CMD會以參數的形式被傳入。我們可以在Dockerfile中覆蓋ENTRYPOINT以讓我們的容器像在接受命令行參數(默認的參數在Dockerfile中的CMD指定)。

      Dockerfile中

      ENTRYPOINT /bin/ls

      CMD ["-a"]

      我們覆蓋了命令行但是netrypoint仍然是ls

      docker run training/ls -l

      2.10 將ADD置于末尾

      如果文件發生改變,ADD會讓緩存失效。不要在Dockerfile中添加經常變化的東西,以避免讓緩存失效。將你的代碼放在最后,將庫和依賴放在最前。對于Node.js的應用來說,這意味著將package.json放在前面,運行nmp install然后添加你的代碼。

      3. Docker的網絡

      Docker有一個內置的IP池,用來指定容器的ip地址。它對外是不可見的,通過橋接的網口可以訪問到。

      3.1 查找端口的映射

      docker run接收顯式的端口映射作為參數,或者你可以通過-P選項來映射所有的端口。第二種做法的好處是能防止沖突。可以通過以下命令查找指定的端口:

      docker port containerID portNumber

      或者

      docker inspect --format '{{.NetworkSettings.Ports}}'

      containerID

      3.2 容器的IP地址

      每一個容器都擁有自己屬于私有網段的IP地址(默認是172.17.0.0/16)。IP可能會在重啟的時候發生變化,如果你想知道其地址,可以用:

      docker inspect --format '{{.NetworkSettings.IPAddress}}' containerID

      Docker會嘗試檢查沖突,在需要的情況下會使用不同的網段的地址。

      3.3 接管主機的網絡

      docker run --net=host能重用網絡。但是請不要這么做。

      4. 卷(volume)

      一個繞過目錄或者單一文件寫時復制(copy-on-write)的文件系統,接近零負載(綁定掛載)。

      4.1 卷的內容在docker commit的時候不會被保存

      在鏡像建立后寫入你的卷沒有太多的意義。

      4.2 卷默認是可讀可寫的

      但是有一個:ro的標志。

      4.3 卷和容器是分開存在的

      卷只要有一個容器使用他們就會存在。可以在容器之間通過--volumes-from選項共享。

      4.4 掛載你的docker.sock

      你可以僅僅掛載docker.sock就能讓你的容器訪問到Docker的API。然后你可以在該容器中運行Docker的命令。這樣容器甚至還可以殺死自己,在一個容器里面運行一個Docker的守護者進程是沒有必要的。

      5. 安全

      5.1 以root身份運行Docker

      Docker API能給root的訪問權限,因為你可以將/映射成一個卷,然后讀或者寫。或者你可以通過--net host接管宿主機的網絡。不要暴露Docker API如果你需要請使用TLS。

      5.2 Dockerfile中的USER

      默認下Docker可以以root的身份運行任何命令,但是你可以使用USER。Docker沒有用戶的命名空間,因此容器將用戶看作是宿主機上的用戶。但是僅僅是UID因而你需要在容器里面添加該用戶。

      5.3 使用TLS操作Docker API

      Docker 1.3版本添加了對TLS的支持。他們使用手動的驗證機制:客戶端和服務端都有一個Key。把Key看做是root用戶的密碼。從1.3版本開始,Boot2docker默認使用TLS并且會為你生成key。

      另外生成Key需要OpenSSL 1.0.1以上版本的支持,然后Docker daemon進程需要加上--tls-verify選項運行,Docker會使用安全的端口(2376)。

      預約申請免費試聽課

      填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

      上一篇:Nginx實戰系列之功能篇----后端節點健康檢查
      下一篇:如何使用Docker Machine部署Swarm集群

      如何讓你的 Docker 鏡像更小

      • 掃碼領取資料

        回復關鍵字:視頻資料

        免費領取 達內課程視頻學習資料

      • 視頻學習QQ群

        添加QQ群:1143617948

        免費領取達內課程視頻學習資料

      Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

      選擇城市和中心
      黑龍江省

      吉林省

      河北省

      湖南省

      貴州省

      云南省

      廣西省

      海南省

      高清特黄a大片,日本真人真做爰,特级做人爱C级,免费a级毛片 百度 好搜 搜狗
      <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>