1. 程式人生 > >docker定義、安裝、映象、容器

docker定義、安裝、映象、容器

Docker是什麼

  • 使用最廣泛的開源容器引擎
  • 一種作業系統級的虛擬化技術
  • 依賴於Linux核心特性:Namespace(資源隔離)和Cgroups(資源限制)
  • 一個簡單的應用程式打包工具

Docker設計目標

  • 提供簡單的應用程式打包工具
  • 開發人員和運維人員職責邏輯分離
  • 多環境保持一致性

docker定義、安裝、映象、容器

docker定義、安裝、映象、容器

像一艘貨船,通過集裝箱把程式碼打包,分開,然後再傳輸

Docker基本組成

Docker Client:客戶端
Ddocker Daemon:守護程序
Docker Images:映象
Docker Container:容器
Docker Registry:映象倉庫

docker定義、安裝、映象、容器

容器 VS 虛擬機器

區別:
docker定義、安裝、映象、容器

傳統的vm:
底層都是基礎建設(伺服器,桌上型電腦)===》作業系統===》安裝虛擬機器軟體(vmware、esxi)===>虛擬化系統

容器:
底層都是基礎建設(伺服器,桌上型電腦)===》作業系統===》docker引擎====》容器

docker定義、安裝、映象、容器

Docker應用場景

  • 應用程式打包和釋出
  • 應用程式隔離
  • 持續整合
  • 部署微服務
  • 快速搭建測試環境
  • 提供PaaS產品(平臺即服務)

Linux安裝Docker

Docker版本

社群版(Community Edition,CE)
企業版(Enterprise Edition,EE)

官網:https://docs.docker.com/install/linux/docker-ce/centos/

支援平臺

Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
Mac
Windows

CentOS7.x安裝Docker

關閉selinux
關閉防火牆firewalld
systemctl stop firewalld
systemctl disable firewalld

#安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
#新增Docker軟體包源(安裝源,安裝阿里的)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

#安裝Docker CE
yum install -y docker-ce

#啟動Docker服務並設定開機啟動
systemctl start docker
systemctl enable docker

加速器:表示pull映象快點
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

執行後重啟:
systemctl restart docker

[[email protected] ~]# docker info
有警告
docker定義、安裝、映象、容器
解決:
在CentOS中
    vim /etc/sysctl.conf 
     net.bridge.bridge-nf-call-ip6tables = 1
     net.bridge.bridge-nf-call-iptables = 1
     net.bridge.bridge-nf-call-arptables = 1
重啟系統。

映象管理

映象是什麼

  • 一個分層儲存的檔案
  • • 一個軟體的環境
  • • 一個映象可以建立N個容器
  • • 一種標準化的交付
  • • 一個不包含Linux核心而又精簡的Linux作業系統
  • 映象不是一個單一的檔案,而是有多層構成。我們可以通過docker history <ID/NAME> 檢視映象中各層內容及大小,每層
  • 對應著Dockerfile中的一條指令。Docker映象預設儲存在/var/lib/docker/\<storage-driver\>中。

映象從哪裡來?
Docker Hub是由Docker公司負責維護的公共註冊中心,包含大量的容器映象,Docker工具預設從這個公共映象庫下載映象。
地址:https://hub.docker.com/explore

配置映象加速器:https://www.daocloud.io/mirror
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

映象與容器聯絡:
比如我從一個centos映象(大小:100M)中新建3個容器(3個容器總共大小 還是100M,因為是在容器之上進行讀寫的,大大提高磁碟利用率)
docker定義、安裝、映象、容器

管理映象常用命令:
docker定義、安裝、映象、容器

拉去映象:docker pull centos:7
例子:

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.15                e81eb098537d        9 days ago          109MB
centos              7                   75835a67d134        6 weeks ago         200MB
centos              latest              75835a67d134        6 weeks ago         200MB
匯出映象:
[[email protected] ~]# docker image save centos:7 > centos7.tar 
[[email protected] ~]# du -sh centos7.tar 
200M    centos7.tar

刪除映象:
[[email protected] ~]# docker image rm centos:7
Untagged: centos:7
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.15                e81eb098537d        9 days ago          109MB
centos              latest              75835a67d134        6 weeks ago         200MB

映象匯入:
[[email protected] ~]# docker image load < centos7.tar 

容器管理

建立容器常用選項
docker定義、安裝、映象、容器

錯誤:
WARNING: IPv4 forwarding is disabled. Networking will not work.
解決:
[[email protected] ~]# echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/00-system.conf
[[email protected] ~]# systemctl restart network && systemctl restart docker

建立容器:
[[email protected] ~]# docker run -d -p 88:80 --name=php-icar -h icar1 nginx
-p 宿主機埠:容器埠
--name=php-icar :容器的名稱
-h icar1:表示容器主機的名稱
nginx:映象

訪問:curl 192.168.1.13:88

檢視日誌:
[[email protected] ~]# docker logs php-icar -f
[[email protected] ~]# docker logs 2298942019ef -f

![](http://i2.51cto.com/images/blog/201811/26/ab56f940a4acfd0e35310e59f7348775.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

容器資源限制
可以限制下,以免一臺機資源佔用過多

docker定義、安裝、映象、容器

[[email protected] ~]# docker image inspect centos 映象資訊
記憶體限額:
允許容器最多使用500M記憶體和600M的Swap,並禁用 OOM Killer:

CPU限額:
允許容器最多使用一個半的CPU:
docker run -d --name nginx04 --cpus="1.5" nginx
允許容器最多使用50%的CPU:
docker run -d --name nginx05 --cpus=".5" nginx

**
[[email protected] ~]# docker run -d --name nginx07 -m 1G --memory-swap="600m" --cpus=".1" --oom-kill-disable nginx

[[email protected] ~]# docker stats nginx08 --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
9cbd71b8d7ce nginx08 0.00% 3.742MiB / 1GiB 0.37% 648B / 0B 0B / 0B 2**

[[email protected] ~]# docker top nginx08 檢視完整命令
UID PID PPID C STIME TTY TIME CMD
root 6107 6083 0 12:15 ? 00:00:00 nginx: master process nginx -g daemon off;
101 6142 6107 0 12:15 ? 00:00:00 nginx: worker process

進入容器:[[email protected] ~]# docker exec -it nginx08 bash