docker學習筆記2:容器操作


一、列出主機上已經創建的容器

docker ps -a

 

二、創建交互式容器

命令: docker run -i -t ubuntu /bin/bash

其中-i -t 表示創建一個提供交互式shell的容器。

ubuntu是鏡像名,如果本地不存在,回到倉庫中下載。

/bin/bash 是指定容器創建后立即執行的命令。

注意:每個容器都有一個唯一的ID,作為容器的標識。每個容器也有個唯一的名稱,在用docker run命令創建時可以通過 --name 名稱 來指定,如果不指定,系統會自動產生一個名稱。

如: docker run --name  mycontainer   -i -t ubuntu /bin/bash

對於交互式容器,當退出shell后,容器會關閉。 后面可以通過命令重新啟動容器。

 

三、啟動/停止容器

如果一個容器已經停止,可以執行如下docker start命令重新啟動容器,參數可以是容器的ID 或容器的名稱。

docker start 3d72d0283dc8

執行后返回容器的ID

注意,如果指定的容器已經處於啟動狀態,上述命令只是返回容器ID,不會重新啟動容器。

如果要想重啟已經啟動的容器,可以用 docker restart命令

如果要停止一個運行的容器,可以用 docker stop命令,kill命令也可停止容器,但這命令時強制立即停止容器。

 

四、附着到交互式容器上

當重新啟動容器時,會沿用創建容器(docker run)命令時指定的參數來運行。如果創建容器時,指定了shell。

重啟容器時,可以用 docker attach命令附着到容器上,當執行docker attach命令時(可能需要敲下回車鍵),就回到了容器的bash提示符,

這時就已經相當於在容器內部了的shell操作了。如果操作過程中,退出了shell。容器也會隨之停止。

所以這種容器一般是完成特定任務的,不適合運行服務程序。

 

五、創建守護式容器

這種容器指容器可以長期一直運行,沒有交互式會話,非常適合容器中運行后台應用程序和服務(如數據庫服務、web服務器等)。

 例子:

docker run --name mydaemon -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

上述語句利用-d標識創建了一個守護式容器,該容器啟動了一個shell,循環打印一個信息,保證shell不退出。

可以通過docker logs命令來獲取容器的日志

還可以通過 docker top 命令來查看容器內當前運行的進程信息。

 

六、與守護式容器交互

可以通過docker exec命令在容器內部額外啟動新進程。

如在主機中,執行語句 docker exec -t -i mydaemon /bin/bash

則會出現一個shell會話(容器內的,不是主機的),這樣就可以和容器進行交互了,可以完成自己想要的操作。

 

七、查看容器詳細信息

利用docker logs 命令可以獲取容器的日志信息。

利用docker inspect 命令可以查看容器更多的信息。 如ip地址等,這對守護容器還是很有意義的。

 

八、執行容器內命令

可以在docker主機上,執行 docker exec命令, 在容器內部啟動新的進程。

比如:

docker exec -i -t  容器ID/NAME  /bin/bash

上面命令表示在容器內打開一個shell交互式會話,參數 -i -t 是讓這個shell能背主機捕捉到,可以在主機上操作該shell。通過這個命令,就可以對容器進行相關的操作了,如進行容器的配置、應用程序的配置等。

注意:這個方式和attach不同。attach綁定的shell退出后容器會退出。這種方式不會。

 

九、刪除容器

命令:docker rm ID/NAME

注意,運行中的容器是無法被刪除的。

注意:在利用docker run創建容器時,可以加上標識 --rm,會在容器運行完畢后,自動刪除容器,相當於創建的是一個一次性容器。如:

docker run --rm  .......

這個尤其在練習容器的操作使用時非常使用,省去了留下一堆垃圾容器需要人工清理的工作。

 

十、查看容器的內容改變信息

創建一個容器,會在容器的對應的鏡像上增加一個可寫層,鏡像部分是只讀的。通過 diff命令可以看出改變的信息。如:

xxx@ubuntu:~$ docker diff mysqldb
A /hello
C /root
A /root/.bash_history
A /root/.mysql_history
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
A /run/mysqld/mysqld.sock.lock
C /tmp

說明:每行代表一個變動的文件或目錄。其中 A 表示新增、C表示被修改、D表示被刪除(這個例子沒有體現)。

 

十一、主機和容器之間的文件拷貝

很多場景下,我們需要從主機將文件拷貝到容器中,或從容器拷貝文件都主機。利用 cp命令即可,語法格式如下:

docker cp  主機路徑    ID/NAME:容器路徑        //這是從主機拷貝文件到容器

docker cp   ID/NAME:容器路徑    主機路徑        //這是從容器拷貝文件到主機

 

十二、創建容器

我們上面的介紹都是用 docker run 創建容器,並在創建成功后立即啟動該容器。

還有另外一個docker create命令,該命令使用格式同run命令,但它只創建容器,不會立即啟動。要想運行容器,需要單獨再執行啟動命令。

 需要注意的是,使用docker create創建守護容器時,不能帶-d標識符。

實際上無論是 run ,還是create命令,都有大量可選的參數,我們這里只是介紹最基本的使用方式(也就是說使用盡量少的參數)。在實際生產環境中,往往會更加復雜。

 

十三、重命名容器

每個一個容器除了ID外,都有一個name(可以在創建時指定,也可以不指定,由系統自動分配)。

當容器創建后,也可以通過rename命令給容器重命名。重命名時,容器處於運行或停止狀態都允許修改。

語法格式: docker rename oldname newname

這個命令還是挺有用的,當一個容器的name不適合時,就需要重新創建,只需修改名稱即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM