DOCKER是一個基於LXC技術之上構建的container容器引擎,經過內核虛擬化技術(namespace及cgroups)來提供容器的資源隔離與安全保障,KVM是經過硬件實現的虛擬化技術,它是經過系統來實現資源隔離與安全保障,佔用系統資源比較小docker
官方網站:https://www.docker.com/數據庫
Docker組成:centos
客戶端與服務端安全
Docker組件:bash
鏡像服務器
容器oop
倉庫性能
1)簡化程序:
Docker 讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。Docker改變了虛擬化的方式,在Docker容器的處理下,只須要數秒就能完成。測試
2)多樣性:
Docker 幫你打包你的糾結!好比 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,因此 Docker 能夠簡化部署多種應用實例工做。好比 Web 應用、後臺應用、數據庫應用、大數據應用好比 Hadoop 集羣、消息隊列等等均可以打包成一個鏡像部署。大數據
3)節省開支:
雲計算時代到來,使開發者沒必要爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思惟定勢。Docker 與雲的結合,讓雲空間獲得更充分的利用。不只解決了硬件管理的問題,也改變了虛擬化的方式。
1)須要簡化配置(測試環境與生產環境不一樣)
2)代碼管理(代碼上傳與下載)
3)提高開發效率(開發環境配置的安裝和openstack kvm相同)
4)應用隔離
5)服務器整合
6)調試
7)多終端、多租戶
8)須要快速部署與環境一致性
安裝Docker服務
root@centos7 ~]# yum install docker -y [root@centos7 ~]# systemctl start docker
下載鏡像文件
[root@centos7 ~]# docker pull centos:latest Trying to pull repository docker.io/library/centos ... centos7: Pulling from docker.io/library/centos 93857f76ae30: Pull complete Digest: sha256:4eda692c08e0a065ae91d74e82fff4af3da307b4341ad61fa61771cc4659af60 [root@centos7 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos centos7 a8493f5f50ff 3 days ago 192.5 MB
刪除鏡像
[root@centos7 ~]# docker rmi a8493f5f50ff ##容器ID
1)建立容器
方法一:
[root@centos7 ~]# docker run centos /bin/echo "nihao" ##建立容器 nihao [root@centos7 ~]# docker ps -a ##查看全部容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c113f9a4f1b centos "/bin/echo nihao" 43 seconds ago Exited (0) 41 seconds ago boring_liskov
這裏沒有指定容器名稱,自動命名,狀態是自動退出
方法二:建立一個自定義名稱的容器
[root@centos7 ~]# docker run --name mgg -t -i centos /bin/bash 名稱 分配僞終端 -i 處於打開狀態 [root@2db7f1389dbd /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 22:46 ? 00:00:00 /bin/bash root 13 1 0 22:49 ? 00:00:00 ps -ef [root@centos7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2db7f1389dbd centos "/bin/bash" 4 minutes ago Up 4 minutes mgg
docker ps -a是顯示全部容器包括沒有運行的(同virsh list --all)
2)進入、退出、啓動容器
[root@2db7f1389dbd /]# exit ##退出容器 exit [root@centos7 ~]# docker start 2db7f1389dbd ##啓動容器 2db7f1389dbd [root@centos7 ~]# docker attach 2db7f1389dbd ##進入容器(必須是啓動狀態下) [root@2db7f1389dbd /]# hostname 2db7f1389dbd
這種進入方式,退出後容器就進入Down狀態,以下
[root@2db7f1389dbd /]# exit exit [root@centos7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3)使用nsenter命令進入容器
[root@centos7 ~]# nsenter --help Usage: nsenter [options] <program> [<argument>...] Run a program with namespaces of other processes. Options: -t, --target <pid> target process to get namespaces from -m, --mount[=<file>] enter mount namespace -u, --uts[=<file>] enter UTS namespace (hostname etc) -i, --ipc[=<file>] enter System V IPC namespace -n, --net[=<file>] enter network namespace -p, --pid[=<file>] enter pid namespace -U, --user[=<file>] enter user namespace -S, --setuid <uid> set uid in entered namespace -G, --setgid <gid> set gid in entered namespace --preserve-credentials do not touch uids or gids -r, --root[=<dir>] set the root directory -w, --wd[=<dir>] set the working directory -F, --no-fork do not fork before exec'ing <program> -Z, --follow-context set SELinux context according to --target PID -h, --help display this help and exit -V, --version output version information and exit 獲取容器的PID [root@centos7 ~]# docker inspect --format "{{.State.Pid}}" 2db7f1389dbd 4580 [root@centos7 ~]# nsenter -t 4580 -u -i -n -p [root@2db7f1389dbd ~]# hostname 2db7f1389dbd [root@2db7f1389dbd ~]# exit logout [root@centos7 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2db7f1389dbd centos "/bin/bash" 22 minutes ago Up 7 minutes mgg
4)刪除容器
[root@centos7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2db7f1389dbd centos "/bin/bash" 31 minutes ago Up 16 minutes mgg 3c113f9a4f1b centos "/bin/echo nihao" 38 minutes ago Exited (0) 38 minutes ago boring_liskov [root@centos7 ~]# docker rm 3c113f9a4f1b ##接名稱也能夠,刪除一箇中止的容器 3c113f9a4f1b [root@centos7 ~]# docker rm -f 3c113f9a4f1b ##刪除一個正在運行的容器 [root@centos7 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2db7f1389dbd centos "/bin/bash" 31 minutes ago Up 16 minutes mgg [root@centos7 ~]# docker run --rm centos /bin/echo "hello" ##建立時自動刪除,用於測試 [root@centos7 ~]#docker --kill $(docker ps -a -q) ##刪除正在運行的容器