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 NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 10326 [OK] jwilder/nginx-proxy Automated Nginx reverse proxy for docker con?? 1471 [OK] richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of?? 650 [OK] jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p?? 441 [OK] kong Open-source Microservice & API Management la?? 249 [OK] webdevops/php-nginx Nginx with PHP-FPM 117 [OK] kitematic/hello-world-nginx A light-weight nginx container that demonstr?? 112 ...
二.下載nginx鏡像
[root@ken ~]# docker image pull nginx
三:查看本地鏡像
[root@ken ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest e81eb098537d 10 days ago 109MB
四:導入鏡像
這裏我準備了一個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 REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest e81eb098537d 10 days ago 109MB redis latest 55cb7014c24f 5 months ago 83.4MB [root@ken ~]#
五:鏡像導出
寫成壓縮包的形式
[root@ken ~]# docker image save nginx > /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 REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 55cb7014c24f 5 months ago 83.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 container run --name redis1 -d redis
4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd
二.查看容器
使用ls
[root@ken ~]# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cd31fa09d48 redis "docker-entrypoint.s?? 39 seconds ago Up 38 seconds 6379/tcp redis1
三.查看所有的容器
ps -a: 列出所有的容器包括運行和停止的
ps: 僅僅列出正在運行的
[root@ken ~]# docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cd31fa09d48 redis "docker-entrypoint.s?? About a minute ago Up About a minute 6379/tcp redis1 054bc8b8aab7 redis "docker-entrypoint.s?? 2 minutes ago Exited (0) 2 minutes ago confident_goldstine
四.查看容器的詳細信息
inspect後面加上容器名字即可獲取有關容器的詳細信息
[root@ken ~]# docker container inspect 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 ID IMAGE COMMAND CREATED STATUS PORTS NAMES
六.啟動容器
使用start
[root@ken ~]# docker container start redis1 redis1 [root@ken ~]# docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cd31fa09d48 redis "docker-entrypoint.s?? 8 minutes ago Up 1 second 6379/tcp redis1
七.登錄容器
第一種方法:
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 ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cd31fa09d48 redis "docker-entrypoint.s?? 13 minutes ago Up 4 minutes 6379/tcp redis1
第二種方法:
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 ID IMAGE COMMAND CREATED STATUS PORTS NAMES
第三種方法:
基於nsenter進入
第一步:啟動容器
[root@ken ~]# docker container start redis1 redis1 [root@ken ~]# docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cd31fa09d48 redis "docker-entrypoint.s?? 16 minutes ago Up 6 seconds 6379/tcp redis1
第二步:獲取容器的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 TTY TIME CMD 2595 pts/0 00:00:01 bash 6216 pts/0 00:00:00 nsenter 6217 pts/0 00:00:00 bash 6250 pts/0 00:00:00 ps
退出時不會停止容器
[root@4cd31fa09d48 ~]# exit logout [root@ken ~]# docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4cd31fa09d48 redis "docker-entrypoint.s?? 23 minutes ago Up 6 minutes 6379/tcp redis1
八.刪除容器
第一步:需要停止容器
[root@ken ~]# docker container stop redis1 redis1 [root@ken ~]# docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
第二步:刪掉容器
[root@ken ~]# docker container rm redis1 redis1 [root@ken ~]# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker介紹及常用操作演示--技術流ken