1. 程式人生 > >Docker第三天常用命令

Docker第三天常用命令

docker run ubuntu:15.10 /bin/echo "Hello world"
docker run 映象名(可選) 容器名 要執行的命令
執行容器

service docker status
檢視docker守護程序是否在執行(docker)

docker ps
檢視執行的容器

docker ps -a
顯示所有容器

docker run -i -t ubuntu:15.10 /bin/bash
進入互動式docker視窗
    -t:在新容器內指定一個偽終端或終端。
    -i:允許你對容器內的標準輸入 (STDIN) 進行互動。
    
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
啟動後臺docker程序
    -d 後臺啟動
    
docker logs 容器id
檢視容器內的標準輸出

docker stop 容器id
停止容器

docker restart 容器id
重啟容器

docker pull 映象
拉取映象(下載)

docker run -d -P training/webapp python app.py
啟動web程式
    -d:讓容器在後臺執行。
    -P:將容器內部使用的網路埠對映到我們使用的主機上。
    
docker run -d -P 5000:5000 training/webapp python app.py
埠對映到我們使用的主機上 
-d:讓容器在後臺執行。
-P:將容器內部使用的網路埠對映到我們使用的主機上。
-P :是容器內部埠隨機對映到主機的高階口。
-p : 是容器內部埠繫結到指定的主機埠。
docker run -d -p 5000:5000 training/webapp python app.py
我們可以指定容器繫結的網路地址,比如繫結127.0.0.1。
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
預設都是繫結 tcp 埠,如果要繫結 UDP 埠,可以在埠後面加上 /udp。
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker run -d -P --name runoob training/webapp python app.py
當我們建立一個容器的時候,docker會自動對它進行命名。另外,我們也可以使用--name標識來命名容器

Docker 容器映象刪除 
1.停止所有的container,這樣才能夠刪除其中的images:
docker stop $(docker ps -a -q)
如果想要刪除所有container的話再加一個指令:
docker rm $(docker ps -a -q)
2.檢視當前有些什麼images
docker images
3.刪除images,通過image的id來指定刪除誰
docker rmi <image id>
想要刪除untagged images,也就是那些id為<None>的image的話可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要刪除全部image的話
docker rmi $(docker images -q)
【Error response from daemon: conflict: 
unable to delete 4ac2d12f10cd (must be forced) 
- image is referenced in multiple repositories】
【來自守護程序的錯誤響應:衝突:無法刪除4ac2d12f10cd(必須強制) - 映像在多個儲存庫中被引用】
以上操作如不能刪除映象:執行如下
    docker container ls -a 列出所有容器(docker ps -a -q)
    刪除所有容器
    docker rm -f  $(docker container ls -a)
    刪除映象
    docker rmi 映象id
    
    curl -s http://ip.cn
    
強制刪除容器db01、db02
docker rm -f db01 db02


docker port 容器id
可以檢視指定 (ID 或者名字)容器的某個確定埠對映到宿主機的埠號。

docker logs -f  容器id
檢視容器輸出日誌,類似linux tail -f

docker top 容器id
來檢視容器內部執行的程序

docker inspect 容器id
檢視 Docker 的底層資訊。它會返回一個 JSON 檔案記錄著 Docker 容器的配置和狀態資訊

docker ps -l 
查詢最後一次建立的容器

docker rm 容器id 
刪除不需要的容器

docker images 
來列出本地主機上的映象

我們可以從 Docker Hub 網站來搜尋映象,Docker Hub 網址為: https://hub.docker.com/ 
我們也可以使用 docker search 命令來搜尋映象。比如我們需要一個httpd的映象來作為我們的web服務。
我們可以通過 docker search 命令搜尋 httpd 來尋找適合我們的映象。
docker search httpd

docker build 
構建新的映象

接下來我們建立一個守護態的Docker容器,然後使用docker attach命令進入該容器。
docker run -itd ubuntu:14.04 /bin/bash

進入容器的幾種方法:
    1、exec
        通過docker ps 檢視需要進入的容器pid
        執行
            docker exec -it 246f35c432de /bin/bash
        退出容器,不會關閉容器,一般使用這個方法。
    2、attach
        通過docker ps 檢視需要進入的容器pid
        docker attach pid
        退出容器會關閉容器,不推薦
    3、ssh
        在映象(或容器)中安裝SSH Server,這樣就能保證多人進入
        容器且相互之間不受干擾了,相信大家在當前的生產環境中(沒有使用Docker的情況)也是這樣做的。
        但是使用了Docker容器之後不建議使用ssh進入到Docker容
    4、nsenter
        系統預設將我們需要的nsenter安裝到主機中
        如果沒有安裝的話,按下面步驟安裝即可(注意是主機而非容器或映象)
        具體的安裝命令如下:
         wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
         tar -xzvf util-linux-2.24.tar.gz  
         cd util-linux-2.24/  
         ./configure --without-ncurses  
         make nsenter  
         sudo cp nsenter /usr/local/bin  
        nsenter可以訪問另一個程序的名稱空間。所以為了連線到某個容器我們還需要獲取該容器的第一個程序的PID。
        可以使用docker inspect命令來拿到該PID。
        docker ps
        可以使用docker inspect來檢視該容器的詳細資訊。
        docker inspect 44fc0f0582d9
        docker inspect 246f35c432de | grep Pid
        如果要顯示該容器第一個進行的PID可以使用如下方式
        docker inspect -f {{.State.Pid}} 44fc0f0582d9 
        在拿到該程序PID之後我們就可以使用nsenter命令訪問該容器了。
        nsenter --target 3326 --mount --uts --ipc --net --pid
        退出容器,不會關閉容器。
        
docker tag 命令,為映象新增一個新的標籤。
docker tag 映象id 映象名:標籤名(版本號)

docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx
-p 80:80:將容器的80埠對映到主機的80埠
--name mynginx:將容器命名為mynginx 
-v $PWD/www:/www:將主機中當前目錄下的www掛載到容器的/www
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機中當前目錄下的nginx.conf掛載到容器的/etc/nginx/nginx.conf
-v $PWD/logs:/wwwlogs:將主機中當前目錄下的logs掛載到容器的/wwwlogs

 

docker建立映象
    兩種方法
        1、通過更新已有的映象容器,並提交映象,來建立映象。
            進入docker互動式視窗
            docker run -i -t ubuntu /bin/bash
            在容器中更新映象
            apt-get update
            退出互動式視窗
            exit
            提交映象
            docker commit -m="has update" -a="runoob" e218edb10161 ubuntu:v2
                -m:提交的描述資訊
                -a:指定映象作者
                e218edb10161:容器ID
                ubuntu:v2    指定要建立的目標映象名和標籤(版本)

        2、使用dockerfile來建立新的映象
            1、建立一個dockerfile檔案
                touch dockerfile
            2、新增指令
            FROM    centos:6.7
            MAINTAINER      Fisher "[email protected]"
            
            RUN     /bin/echo 'root:123456' |chpasswd
            RUN     useradd runoob
            RUN     /bin/echo 'runoob:123456' |chpasswd
            RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
            EXPOSE  22
            EXPOSE  80
            CMD     /usr/sbin/sshd -D
        每一個指令都會在映象上建立一個新的層,每一個指令的字首都必須是大寫的。
        第一條FROM,指定使用哪個映象源
        RUN 指令告訴docker 在映象內執行命令,安裝了什麼。。。
        然後,我們使用 Dockerfile 檔案,通過 docker build 命令來構建一個映象。
            docker build -t runoob/centos:6.7 .
                -t :指定要建立的目標映象名
                .(上下文) :Dockerfile 檔案所在目錄,可以指定Dockerfile 的絕對路徑