Docker 是一個開源的應用容器引擎,讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的Linux機器上,也能夠實現虛擬化。容器是徹底使用沙箱機制,相互之間不會有任何接口。php
一個完整的Docker有如下幾個部分組成:linux
存儲、運輸工具nginx
實現對容器內部的物品實現包含(實現了一個相對隔離的環境)web
容器:模擬(虛擬)出一個相對隔離的空間redis
用來建立容器的模版,放在鏡像倉庫中,例如nginx,redis,httpd等docker
1. 虛擬機json
2. 使用複雜centos
3. 啓動過程相對慢(分鐘)bash
4. 模版文件較大網絡
5. 和物理徹底隔離
6. 模擬的是一個完整系統,能夠登陸並實現管理
1. 直接虛擬出來一個用戶空間
2. 使用簡單
3. 啓動很是塊(秒級)
4. 模版文件很小
5. 在必定程度上和物理機隔離
6. 僅僅是模擬一部分用戶空間,不方便管理
1. 快速部署服務
2. 多租戶
3. 實現隔離
4. 讓一個主機運行多個容器
5. 提升開發效率
6. 簡化配置過程
7. 實現軟件的跨平臺
第一步:打開阿里雲網站
https://www.aliyun.com/?utm_content=se_1000301910
第二步:進行阿里雲註冊
略
第三步:點擊控制檯
第四步:點擊產品與服務>鏡像與服務
第五步:點擊鏡像加速器,記住本身的加速器地址
安裝docker須要配置網絡yum源,centos7自帶的版本過低了
第一步:下載阿里雲的docker安裝包
在yum倉庫的目錄之下
[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
還須要使用到extra和epel源
[extra] name=centos extra enabled=1 gpgcheck=0 baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/ [epel] name=epel enabled=1 gpgcheck=0 baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
第二步:使用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
第一步:獲取鏡像的使用幫助
[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
一. 查看註冊表中是否有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
第一步:獲取容器的命令的使用幫助
[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 等待,直到一個或多個容器中止,而後打印退出代碼
一.啓動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
補充:一次性刪除所有已經退出的容器
[root@ken1 ~]# docker rm $(docker ps -aq)