Docker容器技術入門(一)

Docker容器技術入門(一)面試

收錄於話題
#Docker 專輯
9個

1 Docker技術介紹

DOCKER是一個基於LXC技術之上構建的container容器引擎,經過內核虛擬化技術(namespace及cgroups)來提供容器的資源隔離與安全保障,KVM是經過硬件實現的虛擬化技術,它是經過系統來實現資源隔離與安全保障,佔用系統資源比較小
官方網站:https://www.docker.com/
Docker組成:
客戶端與服務端
Docker組件:
鏡像
容器
倉庫docker

2 Docker與Openstack對比

Docker容器技術入門(一)

3 Docker 的優勢

1)簡化程序:
Docker 讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的 Linux 機器上,即可以實現虛擬化。Docker改變了虛擬化的方式,在Docker容器的處理下,只須要數秒就能完成。
2)多樣性:
Docker 幫你打包你的糾結!好比 Docker 鏡像;Docker 鏡像中包含了運行環境和配置,因此 Docker 能夠簡化部署多種應用實例工做。好比 Web 應用、後臺應用、數據庫應用、大數據應用好比 Hadoop 集羣、消息隊列等等均可以打包成一個鏡像部署。
3)節省開支:
雲計算時代到來,使開發者沒必要爲了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思惟定勢。Docker 與雲的結合,讓雲空間獲得更充分的利用。不只解決了硬件管理的問題,也改變了虛擬化的方式。數據庫

4 Docker的應用場景

1)須要簡化配置(測試環境與生產環境不一樣)
2)代碼管理(代碼上傳與下載)
3)提高開發效率(開發環境配置的安裝和openstack kvm相同)
4)應用隔離
5)服務器整合
6)調試
7)多終端、多租戶
8)須要快速部署與環境一致性centos

5 Docker安裝與配置

安裝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

6 Docker容器建立與管理

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年整年公衆號文章彙總
Docker容器技術入門(一)

相關文章
相關標籤/搜索