Docker容器技術入門(一)面試
收錄於話題 #Docker 專輯 9個
DOCKER是一個基於LXC技術之上構建的container容器引擎,經過內核虛擬化技術(namespace及cgroups)來提供容器的資源隔離與安全保障,KVM是經過硬件實現的虛擬化技術,它是經過系統來實現資源隔離與安全保障,佔用系統資源比較小
官方網站:https://www.docker.com/
Docker組成:
客戶端與服務端
Docker組件:
鏡像
容器
倉庫docker
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)須要快速部署與環境一致性centos
安裝Docker服務安全
root@centos7 ~]# yum install docker -y [root@centos7 ~]# systemctl start docker
下載鏡像文件bash
[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)建立容器
方法一:ide
[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
這裏沒有指定容器名稱,自動命名,狀態是自動退出oop
方法二:建立一個自定義名稱的容器性能
[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) ##刪除正在運行的容器
推薦閱讀
[強烈推薦]精心整理|公衆號文章目錄大全
TB級(小白到大牛之路)技術視頻資源福利大放送
圖解菜鳥到大拿實現財務自由走向人生巔峯之路
史上最全的技術類視頻資源在這裏!!!
「金三銀四」的折騰之聊一聊面試
或許這些你會感興趣??
民工哥 「有問必答」 專欄開通,歡迎來撩
2017年整年公衆號文章彙總