Docker基礎

来源:http://www.cnblogs.com/drawnkid/archive/2017/04/16/6718323.html
-Advertisement-
Play Games

Docker Docker官網:https://cloud.docker.com/ 1. Docker 基礎用法和命令幫助 參考材料基礎: "Docker學習筆記" Docker手冊翻譯: "中文指南" 菜鳥教程: "Docker實例應用" 比較有深度的教程: "Docker入門教程" 1.1 常用 ...


Docker

  • Docker官網:https://cloud.docker.com/

    1. Docker 基礎用法和命令幫助

  • 參考材料基礎:Docker學習筆記
  • Docker手冊翻譯:中文指南
  • 菜鳥教程:Docker實例應用
  • 比較有深度的教程:Docker入門教程
    image

    1.1 常用命令

  • docker pull && docker push
  • $ sudo docker pull --help
  • pull 拉取鏡像 Usage: docker pull [OPTIONS] NAME[:TAG] Pull an image or a repository from the registry
  • -a, --all-tags=false Download all tagged images in the repository
  • $ sudo docker push
  • push 推送指定鏡像 Usage: docker push NAME[:TAG] Push an image or a repository to the registry
  • 示例:

$ sudo docker pull ubuntu # 下載官方 ubuntu docker 鏡像,預設下載所有 ubuntu 官方庫鏡像 $ sudo docker pull ubuntu:14.04 # 下載指定版本 ubuntu 官方鏡像 
$ sudo docker push 192.168.0.100:5000/ubuntu # 推送鏡像庫到私有源[可註冊 docker 官方賬戶,推送到官方自有賬戶] $ sudo docker push 192.168.0.100:5000/ubuntu:14.04 # 推送指定鏡像到私有源 
  • 阿裡雲docker鏡像庫:https://dev.aliyun.com/search.html
  • docker run :
    • Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container
    • --name="" Assign a name to the container # 設置容器名
    • --net="bridge" Set the Network mode for the container # 設置容器網路模式
      • 'bridge': creates a new network stack for the container on the docker bridge
      • 'none': no networking for this container
      • 'container:
      • 'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure.
    • --expose=[] Expose a port from the container without publishing it to your host # 指定對外提供服務埠
    • -P, --publish-all=false Publish all exposed ports to the host interfaces # 自動映射容器對外提供服務的埠
    • -p, --publish=[] Publish a container's port to the host # 指定埠映射
      • format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort (use 'docker port' to see the actual mapping)
    • -h, --hostname="" Container host name # 設置容器主機名
    • -i, --interactive=false Keep stdin open even if not attached # 保持標準輸出開啟即使沒有 attached
    • --link=[] Add link to another container (name:alias) # 添加鏈接到另外一個容器
    • --name="" Assign a name to the container # 設置容器名
    • --rm=false Automatically remove the container when it exits (incompatible with -d) # 如果容器退出自動移除容器和 -d選項衝突
    • -d, --detach=false Detached mode: Run container in the background, print new container id # 後臺運行容器
    • -u, --user="" Username or UID # 指定運行容器的用戶uid 或者用戶名
    • -v, --volume=[] Bind mount a volume (e.g., from the host: -v /host:/container, from docker: -v /container) # 掛載捲
    • --volumes-from=[] Mount volumes from the specified container(s) # 從指定容器掛載捲
    • -w, --workdir="" Working directory inside the container # 指定容器工作目錄
  • docker attach CONTAINER-ID
  • 當前 shell 下 attach 連接指定運行鏡像
  • 相關快捷鍵
  • 使容器退出:Ctrl-D exit
  • 從容器斷開連接deattach:Ctrl-P + Ctrl-Q
  • docker start CONTAINER [CONTAINER...]
  • 運行一個或多個停止的容器
  • docker stop CONTAINER [CONTAINER...]
  • 停掉一個或多個運行的容器-t選項可指定超時時間
  • docker kill [OPTIONS] CONTAINER [CONTAINER...]
  • 預設 kill 發送 SIGKILL 信號-s可以指定發送 kill 信號類型
  • docker restart [OPTIONS] CONTAINER [CONTAINER...]
  • 重啟一個或多個運行的容器-t選項可指定超時時間
  • docker pause CONTAINER
  • 暫停一個容器,方便 commit
  • docker unpause CONTAINER
  • 繼續暫停的容器
  • docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]
  • 查看容器或者鏡像的詳細信息
  • docker docker history [OPTIONS] IMAGE
  • 顯示一個鏡像的歷史

    2. Docker管理

  • Docker Web管理工具
  • Portainer:
  1. Portainer將docker的命令行模式能提供的信息和操作通過web來實現
  2. 可以在它提供的web中實現docker的命令行操作

    Docker 網路配置

  • docker port
  • Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射埠對應的容器內部源埠

    Docker 創建鏡像:

  • docker import *.tar
  • Create a new filesystem image from the contents of a tarball
  • 從tar包中的內容創建一個新的文件系統映像[對應 export]
  • docker build Dockerfile
    • Build an image from a Dockerfile
    • 通過 Dockerfile 定製鏡像
  • 參考:兩種方式創建你自己的 Docker 基本映像
  • 方法2:
    • 在 Docker registry 中,有一個被稱為 Scratch 的使用空 tar 文件構建的特殊庫,如下能創建一個空鏡像:
    • 註意:因為這個空鏡像沒有運行shell的基本環境,並不能運行

      //表示從/dev/null中創建一個新的tar包,重定向到docker import中,成為scratch
      james@james:~/software/docker > tar cv --files-from /dev/null |sudo  docker import - scratch
      sha256:ff266ec37e11e1759166c7d0212d5516e2b5bb54673059ae7888c89528ebe8c8
      james@james:~/software/docker > sudo docker images
      REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
      scratch               latest              ff266ec37e11        8 seconds ago       0 B
      portainer/portainer   latest              d449426bc5a4        4 weeks ago         9.162 MB
      nfnty/arch-mini       archCustum          393a394f60f0        6 weeks ago         544.8 MB
      nfnty/arch-mini       latest              393a394f60f0        6 weeks ago         544.8 MB
      hello-world           latest              48b5124b2768        6 weeks ago         1.84 kB
  • 之後再使用這個鏡像配合Dockerfile來創建一個新的小容器:
    • 註意:運行docker build命令的目錄下需要有一個Dockerfile目錄,在該目錄下放置Dockerfile配置文件和相關文件。命令才能運行,否則會有錯。

      james@james:~/software/docker > ls
      Dockerfile
      james@james:~/software/docker/Dockerfile > cat Dockerfile
      FROM scratch
      ADD env.sh /usr/local/bin/run.sh
      CMD ["/usr/local/bin/run.sh"]
      james@james:~/software/docker > sudo docker build Dockerfile
      Sending build context to Docker daemon 3.584 kB
      Step 1 : FROM scratch
       --->
      Step 2 : ADD env.sh /usr/local/bin/run.sh
       ---> 21f12d548a6a
      Removing intermediate container db83a72432ae //這裡會移除中間容器
      Step 3 : CMD /usr/local/bin/run.sh
       ---> Running in 38a7909a0683
       ---> 22ecdd838f05
      Removing intermediate container 38a7909a0683
      Successfully built 22ecdd838f05
      james@james:~/software/docker > sudo docker images
      REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
      <none>                <none>              22ecdd838f05        14 minutes ago      760 B
      scratch               latest              ff266ec37e11        34 minutes ago      0 B
      james@james:~/software/docker > sudo docker tag  22ecdd scratch:shell
  • 此時新創建的images的REPOSITORY和TAG都是空的,使用上面的命令可以修改。
  • docker tag imageid name:tag

Dockerfile

FROM reg.docker.alibaba-inc.com/rds-mysql-client:1.0 //指定構建鏡像的基礎源鏡像

MAINTAINER james <[email protected]> //指定創建鏡像的用戶
COPY bin /alidata/bin //COPY <src>... <dest> 複製文件或目錄到容器指定路徑中,和ADD用法一樣,但是不能指定遠程url
#RUN sh /alidata/bin/run.sh //每條RUN指令將在當前鏡像基礎上執行指定命令,並提交為新的鏡像,後續的RUN都在之前RUN提交後的鏡像為基礎
#ENTRYPOINT tail -f /etc/hosts //配置容器啟動後執行的命令,並且不可被 docker run 提供的參數覆蓋,而CMD是可以被覆蓋的。每個 Dockerfile 中只能有一個ENTRYPOINT,當指定多個時,只有最後一個生效。
### 安裝tsar
RUN yum install -y tsar.x86_64
### copy採集script
RUN mkdir -p /usr/alisys
RUN wget http://tianjimon.oss-cn-hangzhou.aliyuncs.com/tjmonitor-docker.tar.gz
RUN tar -zxvf tjmonitor-docker.tar.gz -C /usr/alisys/
RUN echo "*/1 * * * * /usr/alisys/tianjimon/tjmonitor >/dev/null 2>&1" >> /var/spool/cron/root

ENTRYPOINT ["/usr/bin/python", "/alidata/bin/init_metadb.py"] //配置容器啟動後執行的命令,並且不可被 docker run 提供的參數覆蓋,而CMD是可以被覆蓋的.通過ENTRYPOINT使用 exec form 方式設置穩定的預設命令和選項,而使用CMD添加預設之外經常被改動的選項
CMD ["--action", "upgrade"] //CMD指定在 Dockerfile 中只能使用一次,如果有多個,則只有最後一個會生效。
CMD的目的是為了在啟動容器時提供一個預設的命令執行選項。如果用戶啟動容器時指定了運行的命令,則會覆蓋掉CMD指定的命令。
### CMD會在啟動容器的時候執行,build 時不執行,而RUN只是在構建鏡像的時候執行,後續鏡像構建完成之後,啟動容器就與RUN無關了,這個初學者容易弄混這個概念,這裡簡單註解一下。
  • VOLUME
  • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • 提交指定容器為鏡像
    • -a, --author="" Author (e.g., "John Hannibal Smith [email protected]")
    • -m, --message="" Commit message
    • -p, --pause=true Pause container during commit
    • 預設 commit 是暫停狀態

      airs-MacBook-Air:python air$ docker commit -a James -m "add vi editer" 182 local/archlinux:vi
      sha256:b1744e6892723d6ae5a6203ebbe594e3f7704c92fa7ba55ad3b3328800f07fd2

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、簡單線程同步問題 ...
  • 以前介紹過ubuntu下更換更新源辦法,詳情見http://www.cnblogs.com/Alier/p/6358447.html 下麵講一下windows下麵pip的配置更改,包括下載軟體是超時錯誤和更新源更換! 我的電腦系統為win10的,pip配置文件在%APPDATA%/pip/pip.i ...
  • TDB Assembler Assemblers (裝配器) 是Jena中用於描述將要構建的對象(通常是模型和數據集 models & datasets)的一種通用機制。例如, Fuseki 嚴重依賴使用 Assemblers 來描述模型和數據集. SPARQL 查詢是在RDF數據集上操作的。RDF ...
  • 由於不能使用自帶的printf函數,也是哭阿,好了,直接講解題思路:題目說了可以活用setfill和setw控制符,那應該可以解決題目: 直接貼代碼: 沒有百度到解決方法,我也算是原創了。 ...
  • 第8章實踐項目之瘋狂填詞 創建一個一個瘋狂填詞(Mad Libs),程式,它將讀入文本文件,並讓用戶在該文本文件中出現 ADJECTIVE,NOUN,VERB等單詞的地方,加上他們自己的文本。 首先準備一個a.txt的文本文件 程式代碼如下: 輸出結果為: cat下b.txt OK 大功告成。 ...
  • 集合框架包含的內容: 集合框架的介面: List介面實現類 ArrayList LinkedList 迭代器Iterator 如何遍歷List集合? 1、通過for迴圈和get()方法配合實現遍歷 2、通過迭代器Iterator實現遍歷 所有集合介面和類都沒有提供相應遍歷的方法,而是由Iterato ...
  • DFS 1 #include<iostream> 2 #include<queue> 3 #include<cstdio> 4 using namespace std; 5 queue<int>q; 6 int map[1001][1001]; 7 int vis[1001]; 8 int n,m; ...
  • 特點: 安全,速度,併發 文件:hello_world.rs 代碼: 執行:rustc hello_world.rs 執行:./hello_world 結果:屏幕上就出現字元串:hello world ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...