天天看點

docker的基本操作

1、基本資訊檢視

    docker version:檢視docker的版本号,包括用戶端、服務端、依賴的Go等

    docker info

:檢視系統(docker)層面資訊,包括管理的images, containers數等

2、鏡像的擷取與容器的使用

   鏡像可以看作是包含有某些軟體的容器系統,比如ubuntu就是一個官方的基礎鏡像,很多鏡像都是基于這個鏡像“衍生”,該鏡像包含基本的ubuntu系統。再比如,hipache是一個官方的鏡像容器,運作後可以支援http和websocket的代理服務,而這個鏡像本身又基于ubuntu。

    搜尋鏡像

    docker search <image_name>:在docker index中搜尋image

    下載下傳鏡像

    docker pull <image> :從docker registry server

中下拉image

    檢視鏡像 

    docker images: 列出images

    docker images -a :列出所有的images(包含曆史)

  删除鏡像

    docker rmi  <image ID>:

删除一個或多個image

  在删除鏡像之前要先用 docker rm 删掉依賴于這個鏡像的所有容器

    使用鏡像建立容器

  [root@localhost /]# docker run chug/ubuntu12.10x64  /bin/echo hello world

hello world

      互動式運作

  [root@localhost /]# docker run -i -t chug/ubuntu12.10x64  /bin/bash

root@2161509ff65e:/#

    檢視容器

    docker ps :列出目前所有正在運作的container

    docker ps -l :列出最近一次啟動的container

    docker ps -a :列出所有的container(包含曆史,即運作過的container)

    docker ps -q :列出最近一次運作的container ID

    再次啟動容器

    docker start/stop/restart

<container> :開啟/停止/重新開機container

    docker start [container_id] :再次運作某個container

(包括曆史container)

    docker attach [container_id]

:連接配接一個正在運作的container執行個體(即執行個體必須為start狀态,可以多個視窗同時attach

一個container執行個體)

    docker start -i <container>

:啟動一個container并進入互動模式(相當于先start,在attach)

    docker run -i -t <image> /bin/bash

:使用image建立container并進入互動模式, login shell是/bin/bash

    docker run -i -t -p <host_port:contain_port>

:映射 HOST 端口到容器,友善外部通路容器内服務,host_port 可以省略,省略表示把 container_port

映射到一個動态端口。

注:使用start是啟動已經建立過得container,使用run則通過image開啟一個新的container。

  docker run 啟動容器

  案例docker run --name some-nginx -p 80:80 -v /some/content:/usr/share/nginx/html -d nginx

  --name:給容器指定一個名字

  -d:使容器在背景執行

  -v:綁定挂載點,将主控端目錄挂載到container中的目錄上,這樣在容器内的環境就可以通路宿主主機内的内容.前面是主機目錄,後面是容器目錄

  -p:端口映射,将宿主主機端口映射到container中的端口

    删除容器

    docker rm <container...>

:删除一個或多個container

    docker rm `docker ps -a -q` :删除所有的container

    docker ps -a -q | xargs docker rm :同上,

删除所有的container

3、持久化容器與鏡像

    3.1 通過容器生成新的鏡像

運作中的鏡像稱為容器。你可以修改容器(比如删除一個檔案),但這些修改不會影響到鏡像。不過,你使用docker commit

<container-id> <image-name>指令可以把一個正在運作的容器變成一個新的鏡像。

     docker commit <container> [repo:tag]

将一個container固化為一個新的image,後面的repo:tag可選。

    3.2 持久化容器

    export指令用于持久化容器

    docker export <CONTAINER ID> >

/tmp/export.tar

    3.3 持久化鏡像

    Save指令用于持久化鏡像

    docker save 鏡像ID > /tmp/save.tar

    3.4 導入持久化container

    導入export.tar檔案

[root@localhost /]# cat /tmp/export.tar | docker import - export:latest

af19a55ff0745fb0a68655392d6d7653c29460d22d916814208bbb9626183aaa

    3.5 導入持久化image

    導入save.tar檔案

[root@localhost /]# docker load < /tmp/save.tar

    對image打tag

[root@localhost /]# docker tag daa11948e23d load:tag

    3.7 一些其它指令

    docker logs $CONTAINER_ID

#檢視docker執行個體運作日志,確定正常運作

    docker inspect $CONTAINER_ID #docker inspect

<image|container> 檢視image或container的底層資訊

    docker build <path>

尋找path路徑下名為的Dockerfile的配置檔案,使用此配置生成新的image

    docker build -t repo[:tag] 同上,可以指定repo和可選的tag

    docker build - < <dockerfile>

使用指定的dockerfile配置檔案,docker以stdin方式擷取内容,使用此配置生成新的image

    docker port <container> <container port>

檢視本地哪個端口映射到container的指定端口,其實用docker ps 也可以看到

4、 一些使用技巧

    4.1 docker檔案存放目錄

    Docker實際上把所有東西都放到/var/lib/docker路徑下了。

docker的基本操作

    containers目錄當然就是存放容器(container)了,graph目錄存放鏡像,檔案層(file

system

layer)存放在graph/imageid/layer路徑下,這樣我們就可以看看檔案層裡到底有哪些東西,利用這種層級結構可以清楚的看到檔案層是如何一層一層疊加起來的。

    4.2  檢視root密碼

docker容器啟動時的root使用者的密碼是随機配置設定的。是以,通過這種方式就可以得到容器的root使用者的密碼了。

 

docker logs 5817938c3f6e 2>&1 | grep 'User: ' | tail -n1

5、存儲

  在Docker容器運作期間,對檔案系統的所有修改都會以增量的方式反映在容器使用的聯合檔案系統中,并不是真正的對隻讀層資料資訊修改。每次運作容器對它的修改,都可以了解成對夾心餅幹又添加了一層奶油。這層奶油僅供目前容器使用。當删除Docker容器,或通過該鏡像重新啟動時,之前的更改将會丢失。這樣做并不便于我們持久化和共享資料。Docker的資料卷這個東西可以幫到我們。

  在建立容器時,通過-v參數可以指定将容器内的某個目錄作為資料卷加載:

  docker run -i -t -v /home/www ubuntu:latest sh -c '/bin/bash' 在容器中會多一個/home/www挂載點,在這個挂載點存儲資料會繞過聯合檔案系統。我們可以通過下面的指令來找到這個資料卷在主機上真正的存儲位置:docker inspect -f {{.Volumes}} container_id 你會看到輸出了一個指向到/var/lib/docker/vfs/dir/...的目錄。cd進入後你會發現在容器中對/home/www的讀寫建立,都會反映到這兒。事實上,/home/www就是挂載自這個位置。

  有時候,我們需要将本地的檔案目錄挂載到容器内的位置,同樣是使用資料卷這一個特性,-v參數格式為:

  docker run -it -v [host_dir]:[container_dir]

  host_dir是主機的目錄,container_dir是容器的目錄.

  容器和容器之間是可以共享資料卷的,我們可以單獨建立一些容器,存放如資料庫持久化存儲、配置檔案一類的東西,然而這些容器并不需要運作。

docker run --name dbdata ubuntu echo "Data Container."在需要使用這個資料容器的容器建立時–volumes-from [容器名]的方式來使用這個資料共享容器。

上一篇: du、df