前言
容器是Docker的三大核心概念之一。簡單地說,容器是獨立運行的一個或一組應用,以及它們的運行態環境。對應的,虛擬機可以理解為模擬運行的一整套操作系統(提供了運行態環境和其他系統環境)和跑在上面的應用。通過這篇文章,我們來講講Docker容器的一些常用命令,如創建,停止,重啟,暫停等等。
原創聲明
本文發布於掘金號【Happyjava】。Happy的掘金地址:https://juejin.im/user/5cc2895df265da03a630ddca,Happy的個人博客:http://blog.happyjava.cn。歡迎轉載,但須保留此段聲明。
創建容器
新建容器
命令如下:
docker create <image>
使用create 命令創建的容器,默認處於停止狀態,需要我們手動去啟動容器。
新建並運行容器
命令如下:
docker run <image>
通過run命令創建的容器,默認是會運行的。
常用參數如下:
-i 讓容器的標准輸入保持打開
-t 分配一個偽終端
-d 容器處於守護進程運行
--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 命令使用如下:
docker attach <container_name/id>
如,我這里連接創建的名為 my_ubuntu 的容器。
docker attach my_ubuntu
進入容器后,其實就跟ssh登錄服務器效果似乎一樣的:
docker attach連接容器,有一個致命的缺點,那就是當多個窗口同時attach到同一個容器時,所有窗口都會同步顯示,當某個窗口阻塞了,那么所有的窗口都會被阻塞掉。例如,我通過兩個終端attach到這個my_ubuntu容器,所有的操作都會被同步:
我在一個窗口輸入東西,另外一個窗口也會同步。
也是因為這樣,所以attach命令是比較少用的。
docker exec 命令
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等視頻資料