Docker 入門安裝
- 一、 安裝
- 二、認識 docker
- 三、docker中的鏡像
-
- 3.1 什麼是鏡像
- 3.2 如何擷取鏡像
- 3.3 鏡像分層與容器的概念
- 3.4 啟動一個容器
- 四、常用的指令
- 五、容器的管理
-
- 5.1 建立容器
- 5.2 檢視容器
- 5.3 連結到容器的标準輸入輸出
- 5.4 删除 、停止容器
- 5.5 重命名容器
- 5.6 檢視容器資訊
- 5.7 在容器中執行指令
- 5.8 檢視容器中的程序
- 5.9 複制容器與主控端的檔案
- 5.10 檢視容器與源鏡像的修改
- 5.11 檢視容器中輸出到終端的日志
- 5.12 檢視容器狀态(CPU 記憶體)
- 六、資料持久化
-
- 6.1 資料卷
- 七 常用指令
-
- 1、删除所有none鏡像
- 2、所有的容器
一、 安裝
MAC環境安裝
windows環境安裝
CentOS安裝
二、認識 docker
Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從 Apache2.0 協定開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實作虛拟化。
容器是完全使用沙箱機制,互相之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
—菜鳥教程
三、docker中的鏡像
3.1 什麼是鏡像
鏡像是不包含linux核心的精簡的作業系統
3.2 如何擷取鏡像
https://hub.docker.com/ 是一個由docker公司維護的鏡像中心。類比github
Docker鏡像加速
3.3 鏡像分層與容器的概念
鏡像與容器 就像是java中的類與對象。
鏡像是分層的。當下載下傳一個鏡像時會清楚的看到 鏡像是被分層下載下傳的。
通過鏡像建立容器時,docker會加載隻讀鏡像(dockerhub中下載下傳的源鏡像),并且在這個基礎上添加一個可讀寫的層,并且會吧鏡像中的目錄複制一份到/var/lib/docker/aufs/mnt/容器id 目錄下,修改隻是修改新增加的讀寫層。
保證源鏡像的檔案不變。
3.4 啟動一個容器
# 下載下傳centos鏡像
docker pull centos
# 啟動centos容器
docker run -itd --name mycentos centos
四、常用的指令
1. docker search [鏡像名] 在dockerhub 搜尋鏡像
2. docker pull [鏡像名]:[标簽] 拉取鏡像
3. docker iamges 檢視本地鏡像清單
4. docker run -itd --name [容器名] [鏡像名/鏡像ID] 使用鏡像啟動一個容器
5. docker exec [-it(互動方式執行)] [容器名] [shell指令] 在某個容器中執行shell指令
6. docker attach [容器名] 進入某個容器 退出目前容器 ctrl+p+q
7. docker commit [容器] [鏡像名]:[标簽] 送出容器 生成一個鏡像
8. docker ps [-a(全部)] 檢視本地容器清單
9. docker stop [容器] 停止容器運作
10. docker rm [容器] 删除容器
11. docker rmi [鏡像名|鏡像id] 删除鏡像
12. docker export [容器名] > [tar路徑eg:/home/test.tar] 導出容器生成一個tar包
13. docker import [容器tar] [鏡像名稱]:[标簽] 用容器的tar檔案導入一個鏡像,使用該鏡像生成容器時 可能需要指定要執行的shell指令 eg:/bin/bash 否則可能會報錯 No command specified.
14. docker save [容器名]:[标簽] > [tar路徑eg:/home/test.tar] 導出鏡像到tar,這個指令會導出完整的鏡像
15. docker load -i [tar路徑eg:/home/test.tar] 加載鏡像tar生成image
五、容器的管理
5.1 建立容器
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
兩個指令都會建立一個新的容器 不同點在于 run會直接啟動容器,create不會啟動容器。
一下指令選項沒有涉及 網絡 和 資料持久化
可選項:
-i , --interactive : 即使沒有attach容器,容器也可以保持輸入輸出
-d, --detach : 容器在背景運作
-t , --tty : 為容器配置設定一個僞TTY(終端操作)
--add-host [host:ip] ... :容器啟動時 為容器添加本地hosts映射
--dns [網關位址] ... :為容器設定網關位址
-e [key=value] ... :給容器這隻環境變量 eg:docker run -idt --name mycentos -e TEST=123456 centos 啟動後 進入容器 docker attath mycentos 執行指令 echo $TEST 就可以得到環境變量值
--expose [端口] :為容器聲明對外暴露的端口号。但是沒有其他意義隻是标志容器工作的端口
-h,--hostname [主機名] :為容器指定主機名 預設是容器id
--oom-kill-disable :保證容器在占用記憶體過大時不被kill
-p [主機port]:[容器port] :将主機端口通路轉發到容器中
-P :将容器expose端口 全部映射到主機端口
--restart [always(一直嘗試重新開機)|on-failure:3(嘗試重新開機3次)] :盡量保證容器中的守護程序挂掉後可以從新自啟動
強制删除所有的容器
docker rm -f $(docker ps -q -a)
5.2 檢視容器
docker ps :檢視運作的容器清單
docker ps -a :檢視全部容器清單(包含停止的容器)
docker ps -l :檢視最近啟動的容器
docker ps -q :查詢容器id
docker ps -s :檢視容器大小
5.3 連結到容器的标準輸入輸出
docker attach [容器名:容器id]
5.4 删除 、停止容器
docker stop [容器名:容器id]
docker rm [容器名:容器id]
5.5 重命名容器
docker rename [oldname] [newname]
5.6 檢視容器資訊
docker inspect [容器名|容器id]
5.7 在容器中執行指令
docker exec [-it(互動式執行)] [容器名|容器id] [shell]
5.8 檢視容器中的程序
docker top [容器名|容器id]
5.9 複制容器與主控端的檔案
複制檔案 從主控端到容器中
docker cp [主控端檔案路徑] [容器id|容器名]:[檔案路徑]
複制檔案 從容器到主控端中
docker cp [容器id|容器名]:[檔案路徑] [主控端檔案路徑]
5.10 檢視容器與源鏡像的修改
docker diff [容器id|容器名]
5.11 檢視容器中輸出到終端的日志
docker logs [容器id|容器名]
5.12 檢視容器狀态(CPU 記憶體)
docker status [--no-stream(靜态輸出一行,而不是動态互動變化)] [容器id|容器名]
六、資料持久化
6.1 資料卷
主控端中的檔案可以通過挂載的方式同步容器中的資料
資料卷挂載的特點
- 容器啟動時,如果主控端挂載目錄下有資料,則這些資料就同步到容器中。
- 同一個主控端目錄 可以同時挂載到多個容器中。
- 可以直接修改挂載資料
-
資料卷一直會存在,不會跟随容器删除。
挂載指令
docker run -idt --name 容器名 -v [主控端目錄]:[容器目錄] 鏡像名
eg:
docker run -idt --name mycentos -v /usr/tmp:/usr/tmp centos
新容器與其他容器共享資料卷
docker run -idt --name 新容器名 --volumes-from 容器名 鏡像名
eg:
docker run -idt --name mycentos2 --volumes-from mycentos centos
七 常用指令
1、删除所有none鏡像
在docker反複build後,會存留很多none鏡像,下面指令一鍵删除所有none鏡像
docker rmi `docker images | grep '<none>' | awk '{print $3}'`
2、所有的容器
docker rm -f $(docker ps -q -a)