簡明docker教程

<!-- TOC -->

<!-- /TOC -->

有收穫的話請加顆小星星,沒有收穫的話可以 反對 沒有幫助 舉報三連

一、什麼是docker

Docker是一個開放源代碼軟件項目,讓應用程序佈署在軟件貨櫃下的工作可以自動化進行,藉此在Linux操作系統上,提供一個額外的軟件抽象層,以及操作系統層虛擬化的自動管理機制。

Docker利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心名字空間(namespaces),來創建獨立的容器(containers)。這可以在單一Linux實體下運作,避免啓動一個虛擬機造成的額外負擔。Linux核心對名字空間的支持完全隔離了工作環境中應用程序的視野,包括進程樹、網絡、用戶ID與掛載文件系統,而核心的cgroup提供資源隔離,包括CPU、存儲器、block I/O與網絡。從0.9版本起,Dockers在使用抽象虛擬是經由libvirt的LXC與systemd - nspawn提供界面的基礎上,開始包括libcontainer庫做爲以自己的方式開始直接使用由Linux核心提供的虛擬化的設施,

上面都是廢話,簡言之Docker的思想來自於集裝箱,集裝箱解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱裏封裝的好好的,那我就可以用一艘大船把他們都運走。

二、docker與虛擬機比較

特性 容器 虛擬機
啓動 秒級 分鐘級
硬盤使用 一般爲 MB 一般爲 GB
性能 接近原生 弱於
系統支持量 單機支持上千個容器 一般幾十個

三、安裝docker

我自己用的是Docker for Mac

其它系統可以參考 http://docker_practice.gitee....

四、基本概念

  • 鏡像(Image)

Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

  • 容器(Container)

鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。

  • 倉庫(Repository)

鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。

一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標籤(Tag);每個標籤對應一個鏡像。

通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標籤就常用於對應該軟件的各個版本。我們可以通過 <倉庫名>:<標籤> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標籤,將以 latest 作爲默認標籤。

1、鏡像

# 獲取鏡像
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

2、容器

# 啓動以守護模式創建的名字爲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

3、數據卷

# 創建數據卷
docker volume create

# 列出數據卷
docker volume ls

# 刪除數據卷
docker volume rm

# 清除沒用的數據卷
docker volume prune

4、掛載

也就是目錄共享,兩種方式:

  • -v
  • --mount 推薦
# 使用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

五、參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章