docker容器實戰-----初級<2>
第二章 docker容器
1. Docker是通過核心虛擬化技術(namespaces及cgroups cpu、記憶體、磁碟io等)來提供容器的資源隔離與安全保障等。由於Docker通過作業系統層的虛擬化實現隔離,所以Docker容器在執行時,不需要類 似虛擬機器(VM)額外的作業系統開銷,提高資源利用率。
2. docker的主要目標是"Build,Ship and Run any App,Angwhere",構建,運輸,處處執行。(構建:做一個docker映象 執行:啟動一個容器 每一個容器,他都有自己的檔案系統rootfs.)
3. docker是一種軟體的打包技術。
4. docker的主要組成部分,docker是傳統的CS架構分為docker client和docker server,像mysql一樣
2.1 docker與kvm
1. kvm解決了硬體和作業系統之間的依賴
2. kvm獨立的虛擬磁碟,xml檔案
1. docker解決了軟體和操作環境之間的依賴,能夠讓獨立服務或應用程式在不同的環境中,得到相同的執行結果。
2. docker映象有自己的檔案系統。
3. docker容器是一種輕量級、可移植、自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式執行。開發人員在自己筆記本上建立並測試好的容器,無需任何修改就能夠在生產系統的虛擬機器、物理伺服器或公有云主機上執行。(一次構建,到處執行)
2.2 docker重要的基礎命令
2.2.1 容器生命週期管理
一. run命令
1. docker run:建立一個新的容器並執行一個命令
語法:docker run [options] IMAGE [command] [APG…]
options說明:
-d:後臺執行容器,並返回容器ID;
-i:以互動模式執行容器,通常與-t同時使用;
-p:埠對映,格式為:主機(宿主)埠:容器埠
-t:為容器重新分配一個偽輸入終端,通常與-i一起使用;
--name="nginx-lb": 為容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的DNS伺服器,預設和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 設定環境變數;
-m :設定容器使用記憶體最大值;
2.例項:
1)使用docker映象nginx:latest以後臺模式啟動一個容器,並將容器命名為mynginx。
docker run –-name mynginx -d nginx:latest
2)使用映象nginx:latest以後臺模式啟動一個容器,並將容器的80埠對映到主機隨機埠。
docker run -P -d nginx:latest
3)使用映象 nginx:latest,以後臺模式啟動一個容器,將容器的 80 埠對映到主機的 80 埠,主機的目錄 /data 對映到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
4)繫結容器的 8080 埠,並將其對映到本地主機 127.0.0.1 的 80 埠上。
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
5)使用映象nginx:latest以互動模式啟動一個容器,在容器內執行/bin/bash命令。
docker run -it nginx:latest /bin/bash
二. start/stop/restart命令
1. docker start:啟動一個或多個已經被停止的容器
docker stop:停止一個執行中容器
docker restart:重啟容器
語法:docker start/stop/restart [options] container [container...]
2.例項
1)啟動已被停止的容器myrunoob
docker start myrunoob
2)停止執行中的容器myrunoob
docker stop myrunoob
3)重啟容器myrunoob
docker restart myrunoob
三. kill命令
1. docker kill:殺掉一個執行中的容器
語法:docker kill [options] container [container...]
2.option說明
-s:向容器傳送一個訊號
3.例項
殺掉執行中的容器mynginx
docker kill -s kill mynginx
四. rm 命令
1. docker rm:刪除一個或多個容器
語法:docker rm [options] container [container...]
2. options說明
-f:通過sigkill訊號強制刪除一個執行中的容器(謹慎使用)
-l:移除容器間的網路連線,而非容器本身
-v:刪除與容器相關聯的卷
3.例項
1)強制刪除容器db01 db02
docker rm -f db01 db02
2)移除容器nginx01對容器db01的連線,連線名db
docker rm -l db
3)刪除容器nginx01,並刪除容器掛載的資料卷
docker rm -v nginx01
五. pause/unpause命令
1. docker pause:暫停容器中所有的程序
docker unpause:恢復容器中所有的程序
2. 語法:
docker pause [options] container [container...]
docker pause [options] container [container...]
3.例項
1)暫停資料庫容器db01提供服務。
docker pause db01
2)恢復資料庫容器db01提供服務
docker unpause db01
六. create命令
1. docker create 但是不啟動他(用法和docker run相同)
2. 例項:
使用docker映象nginx:latest建立一個容器,並將容器命名為myrunoob
docker create –name myrunoob nginx:latest
七 . exec命令
1. docker exec:在執行的容器中執行命令
語法:docker exec [options] container command [ARG...]
2. options說明
-d:分離模式,在後臺執行
-i:即使沒有附加也保持STDIN開啟
-t:分配一個偽終端
3.例項
1)在容器mynginx中以互動模式執行容器內/root/runoob.sh指令碼
docker exec -I -t mynginx /bin/bash
2.2.2 容器操作
一. ps命令
1.docker ps:列出容器
語法:docker ps [options]
2.options說明:
-a:顯示所有的容器,包括未執行的
-f:根據天健過濾顯示的內容
--format:指定返回值的模板檔案
-l:顯示最近建立的容器
-n:列出最近建立的容器
-s:顯示總的檔案大小
3.例項
1)列出所有在執行的容器資訊
docker ps
2)列出最近建立的5個容器
docker ps -n 5
3)列出所有建立的容器ID
docker ps -a -q
二 . inspect命令
1.docker inspect:獲取容器/映象的元資料
語法:docker inspect [options] name|id [name|id...]
2.options說明:
-f:指定返回值的模板檔案
-s:顯示總的檔案大小
--type:為指定型別返回JSON
3.例項
1)獲取映象mysql:5.6的元資訊。
docker inspect mysql:5.6
2) 獲取正在執行的容器mymysql的 IP。
docker inspect –format= '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql
三.top命令
1.docker top:檢視容器中執行的程序資訊,支援 ps 命令引數。
語法:docker top [options] container [ps options]
容器執行時不一定有/bin/bash終端來互動執行top命令,而且容器還不一定有top命令,可以使用docker top來實現檢視container中正在執行的程序。
2.例項
1)檢視容器mymysql的程序資訊。
docker top mysql
2)檢視所有執行容器的程序資訊
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
四. port命令
1. docker port: 列出指定的容器的埠對映,或者查詢將PRIVATE_PORT NAT到面向公眾的埠。
語法:docker port [options] container [private_port[/proto]]
2.例項
檢視容器mynginx的埠對映情況。
docker port mymysql
5. logs命令
1.docker logs:獲取容器的日誌
語法:docker logs [options] container
2.options說明:
-f:跟蹤日誌輸出
--since:顯示某個開始時間的所有日誌
-t:顯示時間戳
--tail:僅列出最新N條容器日誌
3.例項
1)跟蹤檢視容器mynginx的日誌輸出。
docker logs -f mynginx
2)檢視容器mynginx從2016年7月1日的最新日誌10條
docker logs –since=”2016-07-01” –tail=10 mynginx
2.2.3 容器rootfs命令
1. commit命令
1.docker commit:從容器建立一個新的映象
語法:docker commit [options] container [pepository[:tag]]
2.options說明
-a:提交的映象作者
-c:使用dockerfile指令來建立映象
-m:提交時的說明文字
-p:在commit時,將容器暫停
3. 例項
將容器a404c6c174a2 儲存為新的映象,並新增提交人資訊和說明資訊。
docker commit -a “runoob.com” -m “my apache” a404c6c174a2 mymysql:v1
2. cp命令
1.docker cp :用於容器與主機之間的資料拷貝
語法:docker cp [options] container:src_path dest_path|-
docker cp [options] container:src_path dest_path|-
2.options說明;
-L:保持源目標中的連結
3.例項
1)將主機/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下。
docker cp /www/runoob 96f7f14e99ab:/www
2)將主機/www/runoob目錄拷貝到容器96f7f14e99ab中,目錄重新命名為www。
docker cp /www/runoob 96f7f14e99ab:/www/
3) 將容器96f7f14e99ab的/www目錄拷貝到主機的/tmp目錄中。
docker cp 96f7f14e99ab:/www /tmp
3. diff命令
1.docker diff:檢查容器裡檔案結構的更改
語法:docker diff [options] container
2.例項
檢視容器mymysql的檔案結構更改。
docker diff mymysql
2.2.4 映象倉庫
一.login命令
1. docker login : 登陸到一個Docker映象倉庫,如果未指定映象倉庫地址,預設為官方倉庫 Docker Hub
docker logout : 登出一個Docker映象倉庫,如果未指定映象倉庫地址,預設為官方倉庫 Docker Hub
語法:docker login [options] [server]
docker logout [options] [server]
2. option說明:
-u:登入的使用者名稱
-p:登入的密碼
3.例項
1)登入到docker hub
docker login -u 使用者名稱 -p 密碼
2)登出docker hub
docker logout
二. pull命令
1. docker pull : 從映象倉庫中拉取或者更新指定映象
語法:docker pull [options] name [:tag|@digest]
2.options說明
-a:拉取所有tagged映象
--disable-content-trust :忽略映象的校驗,預設開啟
3.例項
1)從Docker Hub下載java最新版映象。
docker pull java
2) 從Docker Hub下載REPOSITORY為java的所有映象。
docker pull -a java
三 . push命令
1.docker push :將本地的映象上傳到映象倉庫,要先登陸到映象倉庫
語法:docker push [options] name [:tag]
2.option說明:
--disable-content-trust :忽略映象的校驗,預設開啟
3.例項:
上傳本地映象myapache:v1到映象倉庫中。
docker push myapache:v1
四 . search命令
1. docker search : 從Docker Hub查詢映象
語法:docker search [options] term
2.options說明
--automated :只列出 automated build型別的映象;
--no-trunc :顯示完整的映象描述;
-s :列出收藏數不小於指定值的映象。
3. 例項
從Docker Hub查詢所有映象名包含java,並且收藏數大於10的映象
docker search -s 10 java
2.2.5 本地映象管理
一 . images命令
1. docker images:列出本地映象
語法:docker images [options] [repository[:tag]]
2.options說明:
-a:列出本地所有映象(含中間映像層,預設情況下,過濾掉中間映像層)
--digests:顯示映象的摘要資訊;
-f:顯示滿足條件的映象
-q:只顯示映象ID
--no-trunc:顯示完整的映象資訊
--format:指定返回值的模板檔案
3.例項
1)檢視本地映象列表
docker images
2) 列出本地映象中REPOSITORY為ubuntu的映象列表。
docker images ubuntu
二. rmi命令
1.docker rmi : 刪除本地一個或多少映象。
語法:docker rmi [options] image [image...]
2.options說明:
-f:強制刪除
--no-prune:不移除該映象的過程映象,預設移除;
3.例項
強制刪除本地映象runoob/ubuntu:v4
docker rmi -f runoob/ubuntu:v4
三 . tag命令
1. docker tag:標記本地映象,將其歸入某一倉庫
語法:docker tag [options] image[:tag] [registryhost/][username/]name[:tag]
2.例項 將映象ubuntu:15.10標記為 runoob/ubuntu:v3 映象。
docker tag ubuntu:15:10 runoob/ubuntu:v3
四 . build命令
1.docker build命令用於使用dockerfile建立映象
語法:docker build [options] path | url | -
2. options說明:
--tag, -t: 映象的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中為一個映象設定多個標籤。
--quiet, -q :安靜模式,成功後只輸出鏡像 ID;
--pull :嘗試去更新映象的新版本;
-m :設定記憶體最大值;
-f :指定要使用的Dockerfile路徑;
--network: 預設 default。在構建期間設定RUN指令的網路模式
3.例項
1)使用當前目錄的 Dockerfile 建立映象,標籤為 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1
2) 使用URL github.com/creack/docker-firefox 的 Dockerfile 建立映象。
docker build github.com/create/docker-firefox
3) 也可以通過 -f Dockerfile 檔案的位置:
docker build -f /path/to/a/dockerfile
4)在 Docker 守護程序執行 Dockerfile 中的指令前,首先會對 Dockerfile 進行語法檢查,有語法錯誤時會返回:
五. history命令
1.docker history:檢視指定映象的建立歷史
語法:docker history [options] image
2.options說明:
-H:以可讀的格式列印映象大小和日期,預設為true;
--no-trunc:顯示完整的提交記錄
-q:僅列出提交記錄ID
3.檢視本地映象runoob/ubuntu:v3的建立歷史
docker history runoob/ubuntu:v3
六. save命令
1.docker save:將指定映象儲存成tar歸檔檔案
語法:docker save [options] image [image....]
2.options說明
-o:輸出到指定檔案
3.例項
將映象runoob/ubuntu:v3 生成my_ubuntu_v3.tar文件
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
七 . import命令
1. docker import:從歸檔檔案中建立映象
語法:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
2.option說明:
-c:應用docker指令建立映象;
-m:提交時的說明文字
3.例項
從映象歸檔檔案my_ubuntu_v3.tar建立映象,命名為runoob/ubuntu:v4
docker import my_ubuntu_v3.tar runoob/ubuntu:v4
2.2.6 info|version
1. docker info : 顯示 Docker 系統資訊,包括映象和容器數。
語法:docker info [options]
檢視docker的系統資訊
docker info
2.docker version:顯示docker的版本資訊
2.3 docker的安裝
2.3.1 yum安裝
(也可以安裝一些必要的系統工具yum install -y yum-utils device-mapper-persistent-data lvm2)
1. 安裝docker源(再裝之前,先移除舊版本yum remove docker)
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
2.如果閒速度慢,可以修改成國內清華源(不修改也可以)
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
3.安裝docker
yum install docker-ce -y
2.3.2 指令碼安裝
1. 使用 sudo 或 root 許可權登入 Centos。
2. 確保yum包更新到最新
sudo yum update
3.執行docker安裝指令碼(執行這個指令碼會新增 docker.repo 源並安裝 Docker。)
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
4. 啟動docker程序
sudo systemctl start docker
5. 驗證 docker 是否安裝成功並在容器中執行一個測試的映象。
$ sudo docker run hello-world
docker ps
2.4 映象加速
鑑於國內網路問題,後續拉取 Docker 映象十分緩慢,我們可以需要配置加速器來解決,我使用的是網易的映象地址:http://hub-mirror.c.163.com。
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 來配置 Daemon。
請在該配置檔案中加入(沒有該檔案的話,請先建一個):
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}