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