docker-image container 基本操作 -常用命令

原文鏈接:https://www.cnblogs.com/xiadongqing/p/6144053.html

基本概念:

  • container

容器。可以把每個 container 看做是一個獨立的主機。 container 的創建通常有一個 image 作爲其模板。類比成虛擬機的話可以理解爲 image 就是虛擬機的鏡像,而 container 就是一個個正在運行的虛擬機。一個虛擬機鏡像可以創建出多個運行的虛擬主機且相互獨立。 注意:container 一旦創建如果沒有用 rm 命令移除,將會一直存在。所以用完後記得刪除哦。

  • image

鏡像。image 相當於 container 的模板,container 創建后里面有什麼軟件完全取決於它使用什麼 image 。image 可以通過 container 創建(相當於把此時 container 的狀態保存成快照),也可以通過 Dockerfile (一個文本文件,裏面使用 docker 規定的一些寫法)來創建。其中通過 Dockerfile 創建的方法能讓環境配置和代碼一起被版本庫一起管理。

  • registry

存放鏡像的倉庫。只要能連接到 registry 每個人都可以很方便地通過 pull 命令從倉庫中獲取鏡像。docker 默認使用的倉庫是 docker hub,國內可以使用 DaoCloud 來建立 Mirror 連接到 docker hub,進而加快獲取 image 的速度。

  • boot2docker

一個輕量級 linux 虛擬機,主要是爲了讓非 linux 系統也能用上 docker 。它實質上是一個 virtualbox 虛擬主機+一個能管理這個虛擬主機的命令行工具。由於這個虛擬主機的存在,在非 linux 系統上 container 需要獲取一些物理系統資源(如 usb 設備)時不僅需要配置 docker 命令,還需要配置 boot2docker 這個虛擬主機的資源配置。

常用命令表

通用:

操作 命令 示例
查看 docker 版本 docker version docker version
查看 docker 信息 docker info docker info
查看某命令 help 信息 docker help [command] docker help attach
查看 docker help 信息 docker --help docker --help
  • container 相關:
操作 命令 示例
創建 container docker create docker create chenhengjie123/xwalkdriver
創建並運行 container docker run docker run chenhengjie123/xwalkdriver /bin/bash
創建並運行 container 後進入其 bash 控制檯 docker run -t -i image /bin/bash docker run -t -i ubuntu /bin/bash
創建並運行 container 並讓其在後臺運行,並端口映射 docker run -p [port in container]:[port in physical system] -d [image] [command] docker run -p 5000:5000 -d training/webapp python app.py
查看正在運行的所有 container 信息 docker ps docker ps
查看最後創建的 container docker ps -l docker ps -l
查看所有 container ,包括正在運行和已經關閉的 docker ps -a docker ps -a
輸出指定 container 的 stdout 信息(用來看 log ,效果和 tail -f 類似,會實時輸出。) docker logs -f [container] docker logs -f nostalgic_morse
獲取 container 指定端口映射關係 docker port [container] [port] docker port nostalgic_morse 5000
查看 container 進程列表 docker top [container] docker top nostalgic_morse
查看 container 詳細信息 docker inspect [container] docker inspect nostalgic_morse
停止 continer docker stop [container] docker stop nostalgic_morse
強制停止 container docker kill [container] docker kill nostalgic_morse
啓動一個已經停止的 container docker start [container] docker start nostalgic_morse
重啓 container (若 container 處於關閉狀態,則直接啓動) docker restart [container] docker restart nostalgic_morse
刪除 container docker rm [container] docker rm nostalgic_morse

命令中需要指定 container 時,既可使用其名稱,也可使用其 id 。

  • image 相關:
操作 命令 示例
從 container 創建 image docker commit [container] [imageName] docker commit nostalgic_morse ouruser/sinatra:v2
從 Dockerfile 創建 image docker build -t [imageName] [pathToFolder] docker build ouruser/sinatra:v3 .
查看本地所有 image docker images docker images
在 registry 中搜索鏡像 docker search [query] docker search ubuntu
從 registry 中獲取鏡像 (若無指定 tag 名稱,則默認使用 latest 這個 tag) docker pull [imageName] docker pull ubuntu:14.04docker pull training/webapp
給 image 打 tag docker tag [imageId] [imageName] docker tag 5db5f8471261 ouruser/sinatra:devel
把本地 image 上傳到 registry 中 (此時會把所有 tag 都上傳上去) docker push [imageName] docker push ouruser/sinatra
刪除本地 image docker rmi [image] docker rmi training/sinatra

注意:image 中沒有指定 tag 名稱的話默認使用 latest 這個 tag 。然而 latest 的含義和 VCS 中的 head 不一樣,不是代表最新一個鏡像,僅僅是代表 tag 名稱爲 latest 的鏡像。若不存在 tag 名稱爲 latest 的鏡像則會報錯。

總結

docker 雖然是一個虛擬化技術,但使用上卻更像是在管理系統軟件或者代碼。裏面的一些 pstoprm 命令讓使用 Linux 命令的人感到十分親切(雖然它們的語義有點不一樣。。。),startstoprestart 讓你感覺像是在控制 service ,而 pushpullcommittag 又讓你覺得像是在使用 git 。因此程序員會感到很親切且容易上手。

同時由於可以使用 Dockerfile 進行 image 的構建,且 docker hub 支持從 github 等地方自動根據 Dockerfile 進行構建,所以 docker 把運行環境也集成到 CI 中了。

美中不足的是由於 docker 目前僅支持 linux 上的容器技術,因此它要在非 Linux 系統下運行必須加多一個虛擬機層。這會造成一些在 Linux 上運行不會出現的問題(ip 地址、硬件資源、文件映射等),同時由於基於 linux ,一些 windows 的程序會水土不服,泛用性比虛擬機差一些。

但帶來的好處是佔用的系統資源低很多。一個只能開數個虛擬機的電腦一般能開數十個 container ,且 container 的啓動時間一般在數秒內,比虛擬機快得多。另外,由於 docker 的 image 除了一些特殊的基礎鏡像外基本都是增量鏡像,因此重複部分不會耗費額外的資源,所以幾個看起來有數 g 的 image 如果裏面使用的基礎鏡像有重複部分(大部分情況下都會有部分重複),那麼它們實際佔用空間將會小得多。

 

 

https://testerhome.com/topics/2760

 

常用命令:

安裝Docker:

  • ubuntu安裝:鏡像管理

    docker images:列出本地所有鏡像

    docker search <IMAGE_ID/NAME>:查找image

    docker pull <IMAGE_ID>:下載image

    docker push <IMAGE_ID>:上傳image

    docker rmi <IMAGE_ID>:刪除image

     

    容器管理

    docker run -i -t <IMAGE_ID> /bin/bash:-i:標準輸入給容器    -t:分配一個虛擬終端    /bin/bash:執行bash腳本

    -d:以守護進程方式運行(後臺)

    -P:默認匹配docker容器的5000端口號到宿主機的

    -p <HOT_PORT>:<CONTAINER_PORT>:指定端口號

    - -name: 指定容器的名稱

    - -rm:退出時刪除容器


    docker stop <CONTAINER_ID>:停止container
    docker start <CONTAINER_ID>:重新啓動container

    -l:顯示最後啓動的容器

    -a:同時顯示停止的容器,默認只顯示啓動狀態

     

    docker attach <CONTAINER_ID> 連接到啓動的容器

    docker logs <CONTAINER_ID>  : 輸出容器日誌

    docker cp <CONTAINER_ID>:path hostpath:複製容器內的文件到宿主機目錄上

     

    <CONTAINER_ID>
    <CONTAINER_ID>:查看容器中的變化
    <CONTAINER_ID>:查看容器詳細信息(輸出爲Json)
    -f:查找特定信息,如-'{{ .NetworkSettings.IPAddress }}'
          docker commit -m "comment" -a "author" <CONTAINER_ID>  ouruser/imagename:tag


          docker extc -it <CONTAINER> <COMMAND>:在容器裏執行命令,並輸出結果

     

  • 網絡管理

    docker run -P:隨機分配端口號

    docker run -p 5000:5000:綁定特定端口號(主機的所有網絡接口的5000端口均綁定容器的5000端口)

    docker run -p 127.0.0.1:5000:5000:綁定主機的特定接口的端口號

    docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py:綁定udp端口號

    docker port<CONTAINER_ID> 5000:查看容器的5000端口對應本地機器的IP和端口號
    使用Docker Linking連接容器:

  • docker run -d -P --name web -v /webapp training/webapp python app.py
  • 也可以將容器卷掛載到宿主機目錄或宿主機的文件上,<容器目錄或文件>的內容會被替換爲<宿主機目錄或文件>的內容,默認容器對這個目錄有可讀寫權限
    docker run -d -P --name web -v <宿主機目錄>:<容器目錄> training/webapp python app.py
    可以通過指定ro,將權限改爲只讀
    -----:<容器目錄>:r trainingwebapp python apppy
    docker run -d -v /dbdata --name db1 training/postgres echo Data-only container for postgres
    首先啓動了一個容器,併爲這個容器增加一個數據卷/dbdata,然後啓動另一個容器,共享這個數據卷
    docker run -d --volumes-from db1 --name db2 training/postgres
    此時db2使用了db1的容器卷,當容器db1被刪除時,容器卷也不會被刪除,只有所有容器不再使用此容器卷時,纔會被刪除
    docker rm -v:刪除容器卷
    除了共享數據外,容器卷另一個作用是用來備份、恢復和遷移數據
    docker run --volumes-from db1 -v /home/backup:/backup ubuntu tar cvf /backup/backup.tar /dbdata
    
    啓動一個容器數據卷使用db1容器的數據卷,同時新建立一個數據卷指向宿主機目錄/home/backup,將/dbdata目錄的數據壓縮爲/backup/backup.tar
    docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
    docker run --volumes-from dbdata2 -v /home/backup:/backup busybox tar xvf /backup/backup.tar
    啓動一個容器,同時把backup.tar的內容解壓到容器的backup


    倉庫管理

    docker login:登錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章