<!-- TOC -->php
<!-- /TOC -->web
有收穫的話請加顆小星星,沒有收穫的話能夠 反對 沒有幫助 舉報三連docker
Docker是一個開放源代碼軟件項目,讓應用程序佈署在軟件貨櫃下的工做能夠自動化進行,藉此在Linux操做系統上,提供一個額外的軟件抽象層,以及操做系統層虛擬化的自動管理機制。ubuntu
Docker利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心名字空間(namespaces),來建立獨立的容器(containers)。這能夠在單一Linux實體下運做,避免啓動一個虛擬機形成的額外負擔。Linux核心對名字空間的支持徹底隔離了工做環境中應用程序的視野,包括進程樹、網絡、用戶ID與掛載文件系統,而核心的cgroup提供資源隔離,包括CPU、存儲器、block I/O與網絡。從0.9版本起,Dockers在使用抽象虛擬是經由libvirt的LXC與systemd - nspawn提供界面的基礎上,開始包括libcontainer庫作爲以本身的方式開始直接使用由Linux核心提供的虛擬化的設施,瀏覽器
上面都是廢話,簡言之Docker的思想來自於集裝箱,集裝箱解決了什麼問題?在一艘大船上,能夠把貨物規整的擺放起來。而且各類各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那麼我就不須要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱裏封裝的好好的,那我就能夠用一艘大船把他們都運走。bash
特性 | 容器 | 虛擬機 |
---|---|---|
啓動 | 秒級 | 分鐘級 |
硬盤使用 | 通常爲 MB | 通常爲 GB |
性能 | 接近原生 | 弱於 |
系統支持量 | 單機支持上千個容器 | 通常幾十個 |
我本身用的是Docker for Mac服務器
其它系統能夠參考 http://docker_practice.gitee....網絡
Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建以後也不會被改變。
鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的 類 和 實例 同樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器能夠被建立、啓動、中止、刪除、暫停等。
鏡像構建完成後,能夠很容易的在當前宿主機上運行,可是,若是須要在其它服務器上使用這個鏡像,咱們就須要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。
一個 Docker Registry 中能夠包含多個倉庫(Repository);每一個倉庫能夠包含多個標籤(Tag);每一個標籤對應一個鏡像。
一般,一個倉庫會包含同一個軟件不一樣版本的鏡像,而標籤就經常使用於對應該軟件的各個版本。咱們能夠經過 <倉庫名>:<標籤> 的格式來指定具體是這個軟件哪一個版本的鏡像。若是不給出標籤,將以 latest 做爲默認標籤。
# 獲取鏡像 docker pull ubuntu:14.04 # 以ubuntu:14.04鏡像爲基礎啓動並運行一個容器 docker run -it --rm \ ubuntu:14.04 \ bash -it:這是兩個參數,一個是 -i:交互式操做,一個是 -t 終端。咱們這裏打算進入 bash 執行一些命令並查看返回結果,所以咱們須要交互式終端。 --rm:這個參數是說容器退出後隨之將其刪除。默認狀況下,爲了排障需求,退出的容器並不會當即刪除,除非手動 docker rm。咱們這裏只是隨便執行個命令,看看結果,不須要排障和保留結果,所以使用 --rm 能夠避免浪費空間。 ubuntu:14.04:這是指用 ubuntu:14.04 鏡像爲基礎來啓動容器。 bash:放在鏡像名後的是命令,這裏咱們但願有個交互式 Shell,所以用的是 bash。 # 列出鏡像 docker image ls docker images # 鏡像佔用 docker system df # 清楚懸掛鏡像 docker image prune # 刪除鏡像 docker image rm docker rmi
# 啓動以守護模式建立的名字爲demo-u的容器,並以交互模式進入容器 docker run --name demo-u -t -i -d ubuntu:14.04 bash # 運行後就能夠經過ID或名字進入容器,並輸出hello world docker exec -it demo-u /bin/sh -c "echo hello world" # 查看運行中的容器 docker container ls docker ps # 全部容器 docker container ls -a docker ps -a # 查看容器日誌 docker container logs demo-u docker logs demo-u # 終止容器 docker container stop demo-u docker stop demo-u # 啓動容器 docker container start demo-u docker start demo-u # 重啓容器 docker container restart demo-u docker restart demo-u # 進入容器,退出後容器也中止 docker attach demo-u # 導出容器 docker export # 導入容器 docker import # 刪除容器 docker container rm docker rm # 清除全部容器 docker container prune
# 建立數據卷 docker volume create # 列出數據卷 docker volume ls # 刪除數據卷 docker volume rm # 清除沒用的數據卷 docker volume prune
也就是目錄共享,兩種方式:
# 使用php本地服務器查看php環境,加載主機的 ~/web 目錄到容器的 /var/www/web目錄 mkdir -p ~/web && cd ~/web && echo "<?php phpinfo();" > index.php docker run -d \ --name web \ -p 8080:8080 \ --mount type=bind,source=`pwd`,target=/var/www/web \ php:7.2-fpm \ /bin/sh -c "cd /var/www/web && php -S 0.0.0.0:8080" 或者 docker run -d \ --name web \ -p 8080:8080 \ -v `pwd`:/var/www/web \ php:7.2-fpm \ /bin/sh -c "cd /var/www/web && php -S 0.0.0.0:8080" 打開瀏覽器 0.0.0.0:8080 # 查看數據卷 docker volume inspect web