DockHub是一個倉庫
https://hub.docker.com/
倉庫是集中存放映象檔案的場所
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
docker pull centos
docker images
Docker映象是一個特殊的檔案系統 除了執行時所需要的程式,庫 資源 設定等檔案意外,還包含了一些執行時的準備的的一些設定引數(如匿名卷、環境變數、使用者等).映象不包含任何動態資料、其內容在構建之後也不會被改變。
共用一個base映象 但是base映象不會被修改
只會修改單個容器內
這個用到了docker特性
每當一個映象被建立 就會建立一個可寫層在上方
這個可寫層又被稱為容器層 容器層的下方統一叫映象層
使用centos映象建立一個容器
sudo docker run --name centos_test -it centos /bin/bash
容器是一種輕量級,可移植,自包含的軟體打包技術 ,是一種應用程式,可以
在九乎任何地方以相同的方式執行。
開發人員在自己筆電上建立並測試好的容器,無需任何修改就能夠在生產系
統的虛擬機器器,物理伺服器或公有云主機上執行。
那為什麼需要容器 以及為什麼被稱為容器?
容器的優勢 ,對於開發人員來說,建立一次,可以在任何地方執行,對於運維人員來說,設定一次,可以執行所有應用
docker的核心元件包括:
docker使用者端,docker伺服器,docker映象,registry,docker容器
在Linux系統下,Docker Client 和Docker daemon和容器直接執行在宿主機上,這意味著容器可直接使用宿主機埠資源,不需要在容器和宿主機之間對映埠。
在Windows或Max X系統下,Docker服務執行在Linux虛擬機器裡,Dockerclient執行在宿主機下跟Docker服務通訊。,當執行容器裡,它用的埠資源是虛擬機器裡的,必須跟宿主機上的埠對映。
6.1.7 docker 服務
Docker 服務是Docker最核心的後臺程序,它負責響應來自Docker client的請求,然後將這些請求翻譯成系統呼叫完成容器管理操作。
該程序會在後臺啟動一個API Server負責接收由Docker client傳送的請求;接收到的請求將通過Docker 服務內部的一個路由分發排程,再由具體的西數來執行請求。
$ docker run -it centos /bin/sh
docker 使用者端使用docker命令來執行 run引數 表明使用者端要執行一個新的容器.
docker使用者端要執行一個容器需要告訴 docker守護行程的最小引數是:
那麼執行這個命令在底層發生了什麼?
按照順序
docker ps -a
docker stop id
docker kill id
docker attach id
docker exec -it + 短id
attach 和exec的區別
attach 和exec主要區別如下
- attach 直接進入容器啟動命令的終端,不會啟動新的程序.
- exec 則是在容器中開啟新的終端 並且可以啟動新的程序
- 如果像直接在終端檢視命令的輸出 用attach
- 其他請看用exec
# 啟動死掉的容器
docker start 短id
# 重啟 docker容器
docker restart 短id
# 暫停 docker 容器 # 不會佔用資源
docker pause 短id
# 重新執行 容器
docker unpause 短id
# 刪除docker 容器 #可以同時刪除兩個 空格隔開
docker rm 短id 短id
# 批次刪除 所有死掉的docker
docker rm -v $(docker ps -aq -f status=exited)
# 刪除映象
docker rmi hello-world
# 刪除異常停止的容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
# 刪除名稱或標籤為none的映象
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
# 清除所有無容器使用的映象 注意,此命令只要是映象無容器使用(容器正常執行)都會被刪除,包括容器臨時停止
docker system prune -a
docker 安裝apoium 巨坑!! 不建議安裝
這裡推薦另一種方式 直接從docker hub上安裝
sudo docker search appium
然後 docker pull 映象即可
sudo docker pull appium/appium
如果下載的太慢 可手動設定加速器
sudo vim /etc/docker/daemon.json
{ "registry-mirrors": ["此處寫映象源地址"]
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info
我們執行的容器可能在映象的基礎上做了一些修改,有時候我們希望儲存起來,封裝成一個更新的映象,這時候我們就需要使用 commit 命令來構建一個新的映象
docker commit -m="提交資訊" -a="作者資訊" 容器名/容器ID 提交後的映象名:Tag
我們拉取一個tomcat映象 並持久化執行 且設定與宿主機進行埠對映
docker pull tomcat
docker run -itd -p8080:8080 --name tom tomcat /bin/bash
使用 提交命令 將在執行的tomcat 容器 打包為一個全新的映象 名字為tom Tag為1.0
docker commit -a="leilei" -m="第一次打包映象,打包後直接存取還會404嗎" 231f2eae6896 tom:1.0
建立一個nginx映象
sudo docker run --name webserver -d -p 80:80 nginx
執行完命令 建立成功
然後我們存取瀏覽器
假設我們不喜歡這個頁面 想修改這個頁面
我們可以進入docker容器內
sudo docker exec -it webserver bash
然後 輸入命令
echo '<h1>hello,docker!</h1>' >/usr/share/nginx/html/index.html
然後就修改了頁面了
docker diff命令
我們修改了檔案即修改了儲存層
可以通過命令檢視剛剛有哪些操作
sudo docker diff webserver
Docker commit 命令
Docker commit 命令可以疊加內容從而重新生成一個映象
docker commit [選項]<容器ID或容器苗> [<倉庫名>][:<標籤>]
sudo docker commit --author "lzc <[email protected]>" --message "modify Default page" webserver nginx:v2
這個時候就可以通過sudo docker images
來檢視了
或者通過sudo docker histroy nginx:v2
我們再建立一個為81埠的nginx容器
sudo docker run --name web2 -d -p 81:80 nginx:v2
然後存取 192.168.2.91:81
可以發現 頁面還是一樣的 說明映象建立成功
!!!! 慎用 docker commit 命令
使用docker commit 命令雖然可以比較直觀的幫助理解映象分層的概念 但是實際開發環境不會這麼使用
因為由於命令執行了 很多檔案發生了改動 這還僅僅是簡單錯誤 如果是安裝檔案 編譯構建 那麼映象會非常臃腫,
此外 使用docker commit 意味著 所有對映象的操作都是黑箱操作,生成的映象也被稱之為 黑箱操作
什麼是dockerfile
Dockerfile 是一個文字檔案。其包含了一條一條的指令,每一條指令構建一層,因此每一條指令的內容,就是描述該層應該如何構建。
命令:
必須命名為Dockerfile
mkdir mynginx
cd mynginx
touch Dockerfile
然後編輯此檔案
FROM nginx
RUN echo '<h1>Hello,world</h1>' > /usr/share/nginx/html/index.html
然後執行命令(記住有個 點 . 代表執行dockerfile的目錄)
sudo docker build -t nginx:v3 .
我們可以把映象上傳到docker中去
https://hub.docker.com/repositories
在我們上傳映象 要確保我們的docker 賬號是登入狀態的
sudo docker login -u xxx -p xxx
sudo docker tag nginx:v3 hybpjx/nginxv3:v3
使用這個名字
然後執行
sudo docker push hybpjx/nginxv3:v3
即可完成上傳
【FROM指定基礎映象】
基礎映象是必須指定的。而FROM就是指定基礎映象,因此應該Dockfile中FROM是必備的指令。並且必須為第一條指令。
【Run指令的兩種格式】
shell 格式:RUN<命令>,就像是再命令列中輸入的命令一樣。
exec格式:RUN["可執行檔案","引數1","引數2"],這更像是函數中呼叫的格式
比如
RUN apt-get update
RUN apt-get install vim
就是建立了兩層映象 這樣毫無意義
最大不能超過127層的
正確寫法為:
RUN apt-get install \
&& apt-get install vim
注意: 任何無關的檔案都要清理