容器是Docker的三大核心概念之一。簡單地說,容器是獨立運行的一個或一組應用,以及它們的運行態環境。對應的,虛擬機能夠理解爲模擬運行的一整套操做系統(提供了運行態環境和其餘系統環境)和跑在上面的應用。經過這篇文章,咱們來說講Docker容器的一些經常使用命令,如建立,中止,重啓,暫停等等。java
本文發佈於掘金號【Happyjava】。Happy的掘金地址:juejin.im/user/5cc289…,Happy的我的博客:blog.happyjava.cn。歡迎轉載,但須保留此段聲明。nginx
命令以下:git
docker create <image>
複製代碼
使用create 命令建立的容器,默認處於中止狀態,須要咱們手動去啓動容器。docker
命令以下:shell
docker run <image>
複製代碼
經過run命令建立的容器,默認是會運行的。ubuntu
經常使用參數以下:bash
-i 讓容器的標準輸入保持打開服務器
-t 分配一個僞終端app
-d 容器處於守護進程運行ssh
--name 設置容器的名字
-p 能夠映射宿主機端口至容器端口,如 -p 8080:8081 ,左邊爲宿主機端口,右邊爲容器端口
-v 能夠掛在宿主機目錄至容器目錄,如-v /data:/tmp/data,左邊爲宿主機目錄,右邊爲容器目錄。
如,一條實際運行容器的命令:
docker run -it -d --name my_ubuntu -p 8088:22 -v /root/ubuntu_data:/data ubuntu:latest /bin/bash
複製代碼
命令以下:
docker ps
複製代碼
docker ps 是查看正在運行的容器,能夠添加-a 參數,查看全部容器的信息。
中止容器的命令:
docker stop <container_name/id>
複製代碼
docker start <container_name/id>
複製代碼
docker restart <container_name/id>
複製代碼
命令以下:
docker rm <container_id/name>
複製代碼
若是是正在運行的容器,會提示刪除失敗,能夠經過 -f 參數強制刪除。例如,刪除正在運行的 my_ubuntu 容器:
docker rm -f my_ubuntu
複製代碼
能夠經過以下命令查看容器的日誌:
docker logs <id/name>
複製代碼
docker pause <id/name>
複製代碼
經過docker ps 命令能夠查看到容器的狀態
docker unpause <id/name>
複製代碼
若是咱們建立容器時,使用了 -d 參數,那麼容器就會在後臺運行。那麼,咱們能夠經過 docker attach 命令和 docker exec 命令鏈接到容器。
docker attach 命令使用以下:
docker attach <container_name/id>
複製代碼
如,我這裏鏈接建立的名爲 my_ubuntu 的容器。
docker attach my_ubuntu
複製代碼
進入容器後,其實就跟ssh登陸服務器效果彷佛同樣的:
docker attach鏈接容器,有一個致命的缺點,那就是當多個窗口同時attach到同一個容器時,全部窗口都會同步顯示,當某個窗口阻塞了,那麼全部的窗口都會被阻塞掉。例如,我經過兩個終端attach到這個my_ubuntu容器,全部的操做都會被同步:
我在一個窗口輸入東西,另一個窗口也會同步。
也是由於這樣,因此attach命令是比較少用的。
docker exec 本質上不是鏈接容器,而是在容器中執行命令,其用法以下:
docker exec -it <container_name/id> <exec>
複製代碼
其中<exec>是須要執行的命令,如在my_ubuntu容器下執行 /bin/bash 命令:
docker exec -it my_ubuntu /bin/bash
複製代碼
執行結果:
/bin/bash 這個命令,其實就是運行一個bash終端,因此咱們就能夠經過在容器中執行 /bin/bash命令來鏈接容器。
容器也是支持查看變動的內容的,命令以下:
docker diff <name/id>
複製代碼
如,查看my_ubuntu的變動:
有三個符號,它們分別是:
Docker也能夠像git同樣,能夠把變更提交爲新的鏡像。命令以下:
docker commit <container_id/name> repo/name:tag
複製代碼
如,我把本地的my_ubuntu提交:
docker commit my_ubuntu test/ubuntu:personal
複製代碼
而後查看鏡像:
提交後的鏡像,能夠推送到倉庫上,方便測試部署等。
容器做爲Docker的三大核心概念之一,其有不少操做,本文也難以一一列舉,只是列舉出了本人認爲比較經常使用的一些命令。
搜索公衆號【Happyjava】,回覆【電子書】和【視頻】,便可獲取大量優質電子書和大數據、kafka、nginx、MySQL等視頻資料