Docker介紹及常用操作演示--技術流ken
Docker簡介
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。
一個完整的Docker有以下幾個部分組成:
- dockerClient客戶端
- Docker Daemon守護程序
- Docker Image映象
- DockerContainer容器
--摘自360百科
容器:
儲存、運輸工具
實現對容器內部的物品實現包含(實現了一個相對隔離的環境)
容器:模擬(虛擬)出一個相對隔離的空間
映象:
用來建立容器的模版,放在映象倉庫中,例如nginx,redis,httpd等
Docker與Kvm的對比
kvm:
1. 虛擬機器
2. 使用複雜
3. 啟動過程相對慢(分鐘)
4. 模版檔案較大
5. 和物理完全隔離
6. 模擬的是一個完整系統,可以登入並實現管理
docker:
1. 直接虛擬出來一個使用者空間
2. 使用簡單
3. 啟動非常塊(秒級)
4. 模版檔案很小
5. 在一定程度上和物理機隔離
6. 僅僅是模擬一部分使用者空間,不方便管理
Docker使用理由
1. 快速部署服務
2. 多租戶
3. 實現隔離
4. 讓一個主機執行多個容器
5. 提高開發效率
6. 簡化配置過程
7. 實現軟體的跨平臺
Docker映象加速配置
第一步:開啟阿里雲網站
https://www.aliyun.com/?utm_content=se_1000301910
第二步:進行阿里雲註冊
略
第三步:點選控制檯
第四步:點選產品與服務>映象與服務
第五步:點選映象加速器,記住自己的加速器地址
Docker的安裝與配置
安裝docker需要配置網路yum源,centos7自帶的版本太低了
第一步:使用yum即可進行安裝
docker-ce是社群版,是免費的
docker-ee是企業版,是收費的
這裡我們下載社群版的
[root@ken ~]# yum install docker-ce -y
第二步:新增加速器地址
把剛才註冊得到的映象加速地址如下步驟填寫進去
[root@ken ~]# mkdir /etc/docker [root@ken ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://XXX.mirror.aliyuncs.com"] }
第三步:重啟docker
[root@ken ~]# systemctl restart docker
Docker有關映象的操作命令詳解
第一步:獲取映象的使用幫助
[root@ken ~]# docker image --help Usage:docker image COMMAND Manage images
第二步:docker映象的使用命令詳解
build從docker檔案裡面建立映象 history顯示一個映象的歷史 import從tarball匯入內容以建立檔案系統映像 inspect顯示一個一個或多個映象的詳細資訊 load載入一個映象從tar壓縮包或者標準輸入 ls列出映象 prune移除沒有被使用的映象 pull從註冊處拉取一個映象或者映象庫 push把一個映象或者映象庫推送至註冊處 rm移除一個或多個映象 save儲存一個或者多個映象到tar壓縮包,預設情況下流式傳輸到 tag建立一個引用SOURCE_IMAGE的標記TARGET_IMAGE
Docker映象的操作命令演示
一. 檢視登錄檔中是否有nginx映象
[root@ken ~]# docker search nginx NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED nginxOfficial build of Nginx.10326[OK] jwilder/nginx-proxyAutomated Nginx reverse proxy for docker con??1471[OK] richarvey/nginx-php-fpmContainer running Nginx + PHP-FPM capable of??650[OK] jrcs/letsencrypt-nginx-proxy-companionLetsEncrypt container to use with nginx as p??441[OK] kongOpen-source Microservice & API Management la??249[OK] webdevops/php-nginxNginx with PHP-FPM117[OK] kitematic/hello-world-nginxA light-weight nginx container that demonstr??112 ...
二.下載nginx映象
[root@ken ~]# docker image pull nginx
三:檢視本地映象
[root@ken ~]# docker image ls REPOSITORYTAGIMAGE IDCREATEDSIZE nginxlateste81eb098537d10 days ago109MB
四:匯入映象
這裡我準備了一個redis的映象壓縮包
這樣就獲取到了redis的映象
壓縮包不需要解壓
[root@ken ~]# docker image load < redis_img.tar.gz d626a8ad97a1: Loading layer [==================================================>]58.46MB/58.46MB fd0ff4158c63: Loading layer [==================================================>]338.4kB/338.4kB f1e69ab74fb6: Loading layer [==================================================>]3.034MB/3.034MB 5935063a73de: Loading layer [==================================================>]24.83MB/24.83MB 72ebea29957d: Loading layer [==================================================>]1.536kB/1.536kB 56631ad86187: Loading layer [==================================================>]3.584kB/3.584kB Loaded image: redis:latest [root@ken ~]# docker image ls REPOSITORYTAGIMAGE IDCREATEDSIZE nginxlateste81eb098537d10 days ago109MB redislatest55cb7014c24f5 months ago83.4MB [root@ken ~]#
五:映象匯出
寫成壓縮包的形式
[root@ken ~]# docker image savenginx > /tmp/nginx.tar.gz [root@ken ~]# ls /tmp/nginx.tar.gz /tmp/nginx.tar.gz
六:顯示nginx映象的詳細資訊
[root@ken ~]# docker inspect nginx [ { "Id": "sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991" ], "Parent": "", "Comment": "", "Created": "2018-11-16T13:32:10.147294787Z", "Container": "d4fa15093ad8ad3df60d7403c1752a379503686e32a76b70771b3ea268ec5d66", "ContainerConfig": { "Hostname": "d4fa15093ad8", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { ...
七:刪除nginx的映象
[root@ken ~]# docker image rm nginx Untagged: nginx:latest Untagged: nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991 Deleted: sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a Deleted: sha256:7055505a92c39c6f943403d54a1cda020bfeb523b55d9d78bfe1dad0dd32bb2d Deleted: sha256:378a8fcc106dc4d3a9f2dc0b642b164e25de3aab98a829e72b2d8c0cf0bad8ee Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3 [root@ken ~]# docker image ls REPOSITORYTAGIMAGE IDCREATEDSIZE redislatest55cb7014c24f5 months ago83.4MB
Docker有關容器的操作命令詳解
第一步:獲取容器的命令的使用幫助
[root@ken ~]# docker container --help Usage:docker container COMMAND Manage containers
第二步:docker容器的使用命令詳解
attach將本地標準輸入,輸出和錯誤流附加到正在執行的容器 commit根據容器的更改建立新映象 cp在容器和本地檔案系統之間複製檔案/資料夾 create建立一個新的容器 diff檢查容器檔案系統上的檔案或目錄的更改 exec在正在執行的容器中執行命令 export將容器的檔案系統匯出為tar存檔 inspect顯示一個或多個容器的詳細資訊 kill殺死一個或多個正在執行的容器 logs獲取容器的日誌 ls列出容器 pause暫停一個或多個容器中的所有程序 port列出埠對映或容器的特定對映 prune刪除所有已停止的容器 rename重新命名容器 restart重啟一個或多個容器 rm刪除一個或多個容器 run在新容器中執行命令 start啟動一個或多個已停止的容器 stats顯示容器資源使用情況統計資訊的實時流 stop停止一個或多個正在執行的容器 top顯示容器的執行程序 unpause取消暫停一個或多個容器中的所有程序 update更新一個或多個容器的配置 wait等待,直到一個或多個容器停止,然後列印退出程式碼
Docker容器的操作命令演示
一.啟動redis容器
--name:指定容器名字
-d:表示後臺執行
[root@ken ~]# docker containerrun --name redis1 -d redis 4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd
二.檢視容器
使用ls
[root@ken ~]# docker container ls CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 4cd31fa09d48redis"docker-entrypoint.s??39 seconds agoUp 38 seconds6379/tcpredis1
三.檢視所有的容器
ps -a: 列出所有的容器包括執行和停止的
ps: 僅僅列出正在執行的
[root@ken ~]# docker container ps -a CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 4cd31fa09d48redis"docker-entrypoint.s??About a minute agoUp About a minute6379/tcpredis1 054bc8b8aab7redis"docker-entrypoint.s??2 minutes agoExited (0) 2 minutes agoconfident_goldstine
四.檢視容器的詳細資訊
inspect後面加上容器名字即可獲取有關容器的詳細資訊
[root@ken ~]# docker containerinspect redis1 [ { "Id": "4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd", "Created": "2018-11-26T20:22:23.099937767Z", "Path": "docker-entrypoint.sh", "Args": [ "redis-server" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, ...
五.停止容器
使用stop
[root@ken ~]# docker container stop redis1 redis1 [root@ken ~]# docker container ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
六.啟動容器
使用start
[root@ken ~]# docker container start redis1 redis1 [root@ken ~]# docker container ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 4cd31fa09d48redis"docker-entrypoint.s??8 minutes agoUp 1 second6379/tcpredis1
七.登入容器
第一種方法:
exec -it 容器名 /bin/sh
-i: 表示啟動為互動模式
-t:表示分配一個終端
登入進去之後發現我們可以執行有掛redis的命令了
[root@ken ~]# docker container exec -i -t redis1 /bin/sh # # # redis-cli 127.0.0.1:6379> set ken 520 OK 127.0.0.1:6379> get ken "520"
退出之後容器沒有停止
[root@ken ~]# docker container ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 4cd31fa09d48redis"docker-entrypoint.s??13 minutes agoUp 4 minutes6379/tcpredis1
第二種方法:
attach :會導致當退出的時候,自動停止容器
不建議使用
[root@ken ~]# docker container attach redis1 ^C1:signal-handler (1543264604) Received SIGINT scheduling shutdown... 1:M 26 Nov 20:36:44.315 # User requested shutdown... 1:M 26 Nov 20:36:44.315 * Saving the final RDB snapshot before exiting. 1:M 26 Nov 20:36:44.327 * DB saved on disk 1:M 26 Nov 20:36:44.327 # Redis is now ready to exit, bye bye... [root@ken ~]# docker container ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
第三種方法:
基於 nsenter 進入
第一步:啟動容器
[root@ken ~]# docker container start redis1 redis1 [root@ken ~]# docker container ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 4cd31fa09d48redis"docker-entrypoint.s??16 minutes agoUp 6 seconds6379/tcpredis1
第二步:獲取容器的pid
[root@ken ~]# docker container inspect -f '{{.State.Pid}}' redis1 6036
第三步:登入容器
-t: 從中獲取名稱空間的目標程序
-u: 輸入UTS名稱空間(主機名等)
-i: 進入System V IPC名稱空間
-n: 輸入網路名稱空間
-p:輸入pid名稱空間
[root@ken ~]#nsenter -t 6036 -u -i -n -p [root@4cd31fa09d48 ~]# ps PID TTYTIME CMD 2595 pts/000:00:01 bash 6216 pts/000:00:00 nsenter 6217 pts/000:00:00 bash 6250 pts/000:00:00 ps
退出時不會停止容器
[root@4cd31fa09d48 ~]# exit logout [root@ken ~]# docker container ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 4cd31fa09d48redis"docker-entrypoint.s??23 minutes agoUp 6 minutes6379/tcpredis1
八.刪除容器
第一步:需要停止容器
[root@ken ~]# docker container stop redis1 redis1 [root@ken ~]# docker container ps CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
第二步:刪掉容器
[root@ken ~]# docker container rm redis1 redis1 [root@ken ~]# docker container ls CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES