docker鏡像與命令


目錄

1.1 docker 鏡像 

1.2 docker 命令

1.1 docker鏡像

1. 什么是docker鏡像?

  docker鏡像不包含Linux內核而有精簡的Linux操作系統

    •   大白話

    •   我么安裝操作系統ISO就可以理解為用C語言寫的安裝包(例如,微信安裝包)

    •   我們安裝操作系統就好像我們安裝微信一樣

    •   docker鏡像也像ISO安裝包,但是因為操作系統已將安裝Linux內核,所以安裝包可以直接使用

           ( 這個安裝包只有Linux文件系統,而內核直接使用Linux系統本身就行)

  docker 鏡像是docker容器的靜態視角,docker容器是docker鏡像的運行狀態

    •   程序和進程的區別

    •   docker鏡像--->程序(存儲在硬盤里的代碼)

    •   進程-----> 把我們硬盤里的代碼加載到內存運行

  容器是docker鏡像的引用,如何docker鏡像刪除,次鏡像創建的容器也會失效

2.容器讀寫層(本質)

  1. 容器其實是在鏡像的最上面加了一層讀寫層,在運行容器里文件改動時,會先從鏡像里要寫的文件復制到容器自己的文件系統中(讀寫層)。

  2. 如果容器刪除了,最上面的讀寫層也就刪除了,改動也就丟失了

  3. 所以無論多少個容器共享一個鏡像,所做的寫操作都是從鏡像的文件系統中復制過來操作的,並不會修改鏡像的源文件

  4. 若想持久化這些改動,可以通過docker commit 將容器保存成一個新鏡像

  

 

   

 

   

3.查看docker容器的工作目錄

 1 [root@linux-node4 diff]# docker run -itd --name=web1 -p 192.168.56.14:81:80 nginx:latest
 2 [root@linux-node4 diff]# docker inspect web1
 3 [
 4     {
 5         # 存儲驅動
 6         "GraphDriver": {
 7             "Data": {
 8                 "LowerDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13-init/diff:/var/lib/docker/overlay2/09fa1314e484781dfc1fb25a6cf5df2502fe35dea9025a373a3cb0202732ccce/diff:/var/lib/docker/overlay2/162ec5c9be56e5d718011c09ed087eda04b755e1a68bd1953c60f175e6635e68/diff:/var/lib/docker/overlay2/7c1b27ff59a397ae7d6bd106db579e90476f57bb1ecef9fcb1a6f1ad5ce43b7c/diff",
 9                 "MergedDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/merged",
10                 "UpperDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/diff",
11                 "WorkDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/work"
12             },
13             "Name": "overlay2"
14         },
15         "NetworkSettings": {
16             "Ports": {
17                 "80/tcp": [
18                     {
19                         "HostIp": "192.168.56.14",
20                         "HostPort": "81"
21                     }
22                 ]
23             },
24             "MacAddress": "02:42:ac:11:00:02",
25             "Networks": {
26                 "bridge": {
27                     "Gateway": "172.17.0.1",
28                     "IPAddress": "172.17.0.2",
29                     "IPPrefixLen": 16,
30                 }
31             }
32         }
33     }
34 ]
35 [root@linux-node4 diff]# cd /var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13
36 [root@linux-node4 51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13]# ll    # 查看docker工作目錄都哪些內容
37 diff  link  lower  merged  work
38 diff      # 讀寫層的差異(在讀寫層做的操作由這個容器單獨管理)
39 merged    # 引用docker進行中的文件系統
40 work      # 項目工作目錄
View Code

1.2 常用命令

1. docker 普通命令

 1 docker ps                 # 僅列出當前運行的容器
 2 docker ps -l              # 列出最新創建得容器
 3 docker ps -a              # 列出素有容器(包括 未運行的)
 4 docker inspect web4       # 列出指定容器的詳細信息
 5 
 6 #### 持久化容器
 7 
 8 docker exec -it web4 bash                     # 進入容器web4中
 9 touch 1.txt 2.txt                             # 對容器進行修改
10 docker commit web4 nginx:web4                 # 將修改后的web4容器提交為一個新鏡像 nginx:web4
11 docker images                                 # 可以看到 多了一個 TAG標記為 web4 的鏡像
12 docker run -d --name web4-1 nginx:web4        # 使用剛剛提交的鏡像web4創建一個容器web4-1
13 docker exec -it web4-1 bash                   # 進入web4-1的bash環境
14 
15 #### 從宿主機復制文件到docker容器
16 docker cp nginx.tar web4-1:/home              # 將宿主機nginx.tar文件拷貝到容器web4-1的/home目錄中
17 docker exec -it web4-1 ls /home               # 在容器web4-1中執行 "ls /home" 命令
18 
19 #### 容器常用查詢命令
20 docker logs web4-1                            # 查看web4-1中控制台日志
21 docker port 55f870061ed9                      # 查看指定容器端口映射
22 docker top 00f7ddc96622                       # 查看容器中有哪些進程
23 docker stats 00f7ddc96622                     # 查看容器資源使用情況
24 
25 ##### 啟動、停止、刪除 容器
26 docker ps -a                                  # 列出素有容器(包括 未運行的)
27 docker start web                              # 啟動容器web      
28 docker stop web                               # 停止容器web
29 docker rm web                                 # 刪除容器web

2. 鏡像常用命令

1 [root@linux-node4 diff]# docker help                           # 查看docker幫助
2 [root@linux-node4 diff]# docker image --help                   # 查看 docker中 鏡像相關幫助
3 [root@linux-node4 diff]# docker image ls                       # 查看當前所有鏡像
4 [root@linux-node4 diff]# docker image inspect nginx            # 查看指定鏡像(nginx鏡像)詳細信息
5 [root@linux-node4 diff]# docker pull nginx:1.14                # 下載指定版本鏡像 nginx
6 [root@linux-node4 diff]# docker image rm nginx:1.14            # 刪除nginx 1.14版本
7 [root@linux-node4 diff]# docker image save nginx > nginx.tar   # 導出niginx鏡像
1 -d   # 后台運行容器,並返回容器ID;
2 -i   # 以交互模式運行容器,通常與 -t 同時使用;
3 -t   # 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
4 -P   # 隨機端口映射,容器內部端口隨機映射到主機的高端口
5 -p   # 指定端口映射,格式為:主機(宿主)端口:容器端口
6 --name="nginx-lb"   # 為容器指定一個名稱;
7 --dns 8.8.8.8       # 指定容器使用的DNS服務器,默認和宿主一致;
8 
9 docker run 常用參數
docker run 常用參數
 1 --dns-search example.com: 指定容器DNS搜索域名,默認和宿主一致;
 2 
 3 -h "mars": 指定容器的hostname;
 4 
 5 -e username="ritchie": 設置環境變量;
 6 
 7 --env-file=[]: 從指定文件讀入環境變量;
 8 
 9 --cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;
10 
11 -m :設置容器使用內存最大值;
12 
13 --net="bridge": 指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型;
14 
15 --link=[]: 添加鏈接到另一個容器;
16 
17 --expose=[]: 開放一個端口或一組端口;
18 
19 --volume , -v:    綁定一個卷
20 
21 -a stdin: 指定標准輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項;
22 
23 docker run其他參數
docker run 其他參數

3. 運行容器常用命令

[root@linux-node4 ]# docker run --help                              # 查看創建容器幫助
[root@linux-node4 ]# docker run -it centos                          # 創建centos鏡像並進入終端
[root@linux-node4 ]# docker run -d nginx                            # 后台啟動nginx容器
[root@linux-node4 ]# docker stop 6bb09dce461f                       # 關閉一個容器
[root@linux-node4 ]# docker ps -l                                         # 查看最近運行的容器
[root@linux-node4 ]# docker run -itd centos                         # 啟用一個偽終端守護centos容器
[root@linux-node4 ]# docker container run -d --name web3 -e test=123456 -p 8800:80 -h webhostname --restart always nginx
-d                   # 后台啟動nginx容器
--name web3          # 自定義容器名字(默認會是一段隨機字符串)
-e test=123456       # 啟動容器添加變量 test=123456 (echo $test)
-p 8800:80           # 宿主機的8800端口映射到docker容器的80端口中
-h webhostname       # docker容器主機名 (a300f394af88)
--restart always     # 宿主機重啟自動拉起這個docker容器
nginx                # 使用這個nginx鏡像啟動容器
注:http://192.168.56.12:8800/     訪問這個docker  nginx
[root@linux-node4 ]# docker logs web                                 # 查看上面啟動的web容器的日志
[root@linux-node4 ]# docker exec -it web bash                        # 進入容器web

 

 1 [root@linux-node1 /]# docker run -itd nginx          # 在后台啟動一個docker容器
 2 [root@linux-node1 /]# docker inspect 5a3ad030a621    # 查看docker運行容器的詳細信息
 3 [root@linux-node1 /]# curl http://172.17.0.2         # 
 4 [root@linux-node1 /]# docker run -itd --name=web2 -p 192.168.56.11:8800:80 nginx
 5 使用--itd參數(指定后台啟動這個容器),--name=web2(指定這個web容器的名字叫web2) 
 6 
 7         
 8 -d:   后台運行容器,並返回容器ID;
 9 -i:   以交互模式運行容器,通常與 -t 同時使用;
10 -t:   為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
11 -P:   隨機端口映射,容器內部端口隨機映射到主機的高端口
12 -p:   指定端口映射,格式為:主機(宿主)端口:容器端口
13 --name="nginx-lb":   為容器指定一個名稱
14 --dns 8.8.8.8:   指定容器使用的DNS服務器,默認和宿主一致;
15 [root@linux-node1 /]# docker exec -it c9b7a480ee68 bash    # 進入docker環境

 停止運行容器,刪除運行容器,刪除鏡像

# 停止容器運行(CONTAINER ID)
docker stop 容器ID 

# 刪除 容器(CONTAINER ID)
docker rm 容器ID

# 刪除 鏡像(IMAGE ID)
docker images 鏡像ID

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM