概述
起源
2013 年由 DotCloud 公司開源出來的容器管理工具
DotCloud 公司是一家 PAAS 服務提供商,從 docker 的出身也可以看出它的主要功能和方向
技術原理
開始時是基于 LXC 容器技術
cgroup: 將任意進程進行分組化管理,同時還可以控制進程的資源占用(CPU, 內存等等)情況
namespace: 讓每個進程組有獨立的 PID, IPC 和網絡空間
解決的痛點
打包部署
運行環境標準化
更加高效的利用物理機
docker 基本命令
容器的一個標準的生命周期包括:創建,啟動,停止,終止和移除
docker pull busybox # 遠程下載 images
docker run -it –rm –name busybox busybox # 創建容器,名稱為 busybox
docker stop/kill busybox # 停止/強行停止 容器
docker start/restart busybox # 啟動/重新啟動 容器
docker rm busybox # 移除容器
常用命令
docker exec 可以運行 容器中的命令
docker cp 可以在主機和容器之間復制文件
docker inspect 查看容器的詳細信息,也可以查看鏡像詳細信息
docker stats 容器的資源占用信息
docker events 返回 docker 主機上發生的所有 docker 事件流
docker logs 監控容器的日志
docker top 查看容器內運行的進程
docker 使用示例(busybox)
docker 容器是完全隔離的運行環境,但實際使用中,難免需要和外部或者 docker 容器進行交互。
比較常用的交互主要有 環境變量,磁盤,網絡
環境變量
docker run -it --rm -e MY_NAME=wangyubin busybox env
外部的環境變量可以在容器啟動的時候注入到容器中
磁盤
容器會共享鏡像中的內容,容器自己的狀態才會保存在磁盤上。
docker volume ls # 查看所有容器占用的磁盤名稱 docker volume inspect VOL_NAME # 查看具體的磁盤信息
容器中的文件,不會改變 image
在一個容器中創建文件(test.txt)
$ docker run -it --rm busybox / # touch test.txt / # ls bin etc proc sys tmp var dev home root test.txt usr
重新啟動的容器中是不包含這個文件的
$ docker run -it --rm busybox / # ls bin dev etc home proc root sys tmp usr var
容器掛載外部的文件系統
如果希望容器之間共享文件,或者將文件放在容器之外來管理,可采用如下方式 容器啟動時掛載外部文件夾
docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox cd share-dir touch test.txt
另一個容器也掛載這個文件夾
docker run -it --rm -v /home/wangyubin/tmp/volume:/share-dir busybox / # ls share-dir test.txt
網絡
容器中的服務默認只有當前容器可以訪問,容器的宿主和其他容器都是無法訪問的。
通過暴露端口,讓宿主可以訪問容器內服務
通過 nc 命令模擬一個服務
$ docker run -it -p 1234:1234 --rm busybox / # nc -l -p 1234
在宿主機上可以通過 docker ps 命令看到暴露的端口
docker ps nc localhost 1234 # 連接上本地的 1234 端口,就可以和 docker 容器互發消息
容器創建在同一網絡上
創建容器運行的網絡,然后將 2 個容器啟動到同一個網絡上
$ docker network create test a85b5589234b701b1237a364f7796b47e2d1ba4506740767c581a3d62d9e8f48 $ docker network ls NETWORK ID NAME DRIVER SCOPE a85b5589234b test bridge local ... ...
啟動第一個 docker,name 為 test01,并在容器中用 nc 命令模擬一個服務
$ docker run -it --rm --name test01 --network test busybox / # nc -l -p 1234
啟動第二個 docker,name 為 test02,和 test01 在同一個網絡上
$ docker run -it --rm --name test02 --network test busybox / # nc test01 1234 hello
由于在同一個網絡上,可以通過 test01 這個名稱直接連接另一個容器
啟動第三個 docker,name 為 test03,使用默認的網絡
$ docker run -it --rm --name test03 busybox / # nc test01 1234 nc: bad address 'test01'
由于 test03 和 test01 不在一個網絡上,所以無法互通
鏈接:https://www.cnblogs.com/wang_yb/p/8625003.html
-
內存
+關注
關注
8文章
3034瀏覽量
74131 -
容器
+關注
關注
0文章
496瀏覽量
22074 -
Docker
+關注
關注
0文章
477瀏覽量
11871
原文標題:docker 使用示例(busybox)
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論