docker 基礎

1、Docker 是什麼html

  • 使用最普遍的開源容器引擎
  • 一種才作系統級別的虛擬化技術
  • 依賴於linux內核:Namespace(資源隔離)和Cgroups(資源限制
  • 一個簡單的應用程序打包工具

2、Docker基本組成linux

  • Docker Client:客戶端
  • Ddocker Daemon:守護進程
  • Docker Images:鏡像
  • Docker Container:容器
  • Docker Registry:鏡像倉庫

 

容器VS虛擬機nginx

 

鏡像是什麼docker

  • 一個分層存儲的文件
  • 一個軟件的環境
  • 一個鏡像能夠建立N個容器
  • 一種標準化的交付
  • 一個不包含Linux內核而又精簡的Linux操做系統

管理鏡像經常使用命令網絡

指令            描述
ls              列出鏡像
build           構建鏡像來自Dockerfile
history         查看鏡像歷史
inspect         顯示一個或多個鏡像詳細信息
pull            從鏡像倉庫拉取鏡像
push            推送一個鏡像到鏡像倉庫
rm              移除一個或多個鏡像
prune           移除未使用的鏡像。沒有被標記或被任何容器引用的。
rm              建立一個引用源鏡像標記目標鏡像
export          導出容器文件系統到tar歸檔文件
import          導入容器文件系統tar歸檔文件建立鏡像
save            保存一個或多個鏡像到一個tar歸檔文件
load            加載鏡像來自tar歸檔或標準輸入

 

 建立容器經常使用選項app

容器資源限制工具

 

 

示例:
內存限額:
容許容器最多使用500M內存和100M的Swap,並禁用OOM Killer:
docker run -d --name nginx03 --memory="500m" --memory-swap=「600m" --oom-kill-disable nginx
CPU限額:
容許容器最多使用一個半的CPU:
docker run -d --name nginx04 --cpus="1.5" nginx
容許容器最多使用50%的CPU:
docker run -d --name nginx05 --cpus=".5" nginx

將數據從宿主機掛載到容器中的三種方式

Docker提供三種方式將數據從宿主機掛載到容器中:
•volumes:Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)。保存數據的最佳方式。
•bind mounts:將宿主機上的任意位置的文件或者目錄掛載到容器中。
•tmpfs:掛載存儲在主機系統的內存中,而不會寫入主機的文件系統。若是不但願將數據持久存儲在任何位置,可使用tmpfs,同時避免寫入容器可寫層提升性能。

 

  

Volume
管理卷:
# docker volume create nginx-vol
# docker volume ls
# docker volume inspect nginx-vol
用卷建立一個容器:
# docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
# docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx
清理:
# docker stop nginx-test
# docker rm nginx-test
# docker volume rm nginx-vol

Bind Mounts
卷建立一個容器:

# docker run -d -it --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
# docker run -d -it --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx
驗證綁定:
# docker inspect nginx-test
清理:
# docker stop nginx-test
# docker rm nginx-test
注意:
1.若是源文件/目錄沒有存在,不會自動建立,會拋出一個錯誤。
2.若是掛載目標在容器中非空目錄,則該目錄現有內容將被隱藏。

Volume特色:

•多個運行容器之間共享數據。
•當容器中止或被移除時,該卷依然存在。
•多個容器能夠同時掛載相同的卷。
•當明確刪除卷時,卷纔會被刪除。
•將容器的數據存儲在遠程主機或其餘存儲上
•將數據從一臺Docker主機遷移到另外一臺時,先中止容器,而後備份卷的目錄(/var/lib/docker/volumes/)

Bind Mounts特色:

•從主機共享配置文件到容器。默認狀況下,掛載主機/etc/resolv.conf到每一個容器,提供DNS解析。
•在Docker主機上的開發環境和容器之間共享源代碼。例如,能夠將Maven target目錄掛載到容器中,每次在Docker主機上構建Maven項目時,容器均可以訪問構建的項目包。
•當Docker主機的文件或目錄結構保證與容器所需的綁定掛載一致時

 

網絡模式

•bridge
–net=bridge
默認網絡,Docker啓動後建立一個docker0網橋,默認建立的容器也是添加到這個網橋中。

•host
–net=host
容器不會得到一個獨立的network namespace,而是與宿主機共用一個。這就意味着容器不會有本身的網卡信息,而是使用宿主機的。容器除了網絡,其餘都是隔離的。

•none
–net=none
獲取獨立的network namespace,但不爲容器進行任何網絡配置,須要咱們手動配置。

•container
–net=container:Name/ID
與指定的容器使用同一個network namespace,具備一樣的網絡配置信息,兩個容器除了網絡,其餘都仍是隔離的。

•自定義網絡
與默認的bridge原理同樣,但自定義網絡具有內部DNS發現,能夠經過容器名或者主機名容器之間網絡通訊。

 

 

自定義網絡
docker network create test

docker network ls
NETWORK ID          NAME                   DRIVER              SCOPE
892f284d3c84         bridge                bridge               local
e43f2286f333         harbor_harbor         bridge               local
25ccb83dc920         host                  host                 local
c6a5fed5ccd4         one                   null                 local
1d4d8f5c5b91         test                  bridge               local

docker network inspect test

建立啓動兩個容器
docker run  -itd --name busy1 --net=test busybox
docker run  -itd --name busy2 --net=test busybox

進入busy1容器
docker exec -it 9a112845 sh
ping busy2  ping通正常,不通則建立有問題

 

  

  

Dockerfile 指令性能

Bulid鏡像ui

Usage: docker build [OPTIONS] PATH | URL | -[flags]Options:
-t, --tag list # 鏡像名稱
-f, --file string # 指定Dockerfile文件位置
# docker build .
# docker build -t shykes/myapp .
# docker build -t shykes/myapp -f /path/Dockerfile /path
# docker build -t shykes/myapp http://www.example.com/Dockerfilespa

相關文章
相關標籤/搜索