1. 程式人生 > 其它 >docker-01

docker-01




Docker介紹

1 什麼是容器?

Docker 是一個開源的應用容器引擎,基於Go 語言並遵從 Apache2.0 協議開源

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化

容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低

Docker 從 17.03 版本之後分為 CE(Community Edition: 社群版) 和 EE(Enterprise Edition: 企業版),我們用社群版就可以了

2 容器的前世

FreeBASE jail   ------> Linux vserver
chroot          ------> 完整的根檔案系統(FHS)標準的
namespaces      ------> UTS Mount IPC PID user network
cgroup	        ------> 資源的分配和監控

通過比較複雜的程式碼開發的過程,呼叫以上三項技術
實現容器的建立   ---->  管理  ---->銷燬

3 傳統虛擬化技術和容器對比


4 容器的今生?

實現隔離能力!
LXC  (LinuXContainer)  

對於原有的常用功能進行了封裝,方便我們做容器的生命週期
-----> Docker (dotcloud)



Docker的安裝

系統版本:centos7.6
docker版本:Docker version 17.06.2-ce, build cec0b72


安裝教程
http://www.mamicode.com/info-detail-2835106.html  


1 yum源準備
#curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo


2 安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r


3 安裝docker-ce
yum install -y docker-ce
或者指定docker版本:
yum install -y --setopt=obsoletes=0 docker-ce-17.06.2.ce-1.el7.centos.x86_64 docker-ce-selinux-17.06.2.ce-1.el7.centos.noarch


4 啟動Docker服務
systemctl daemon-reload
systemctl restart docker
docker version
docker  info


5 配置映象加速(需要自己進入阿里雲註冊然後加速)
阿里雲Docker-hub
https://cr.console.aliyun.com/cn-hangzhou/mirrors

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://yown2gka.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
	  	  
或者:
vim   /etc/docker/daemon.json

	{
		 "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
	}	




Doocker體系結構




Docker映象的基礎管理

1  獲取映象
基礎映象拉取
docker search centos
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx


2 映象基本檢視
[root@docker ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos             	6.8                 82f3b5f3c58f        4 months ago        195 MB
centos              	6.9                 2199b8eb8390        4 months ago        195 MB
centos              	7.5.1804            cf49811e3cdb        4 months ago        200 MB
centos              	7.6.1810            f1cb7c7d58b7        4 months ago        202 MB
oldguo/centos_sshd  v1.0
oldguo/centos_sshd  v2.0
oldguo/centos_sshd  v3.0

標識映象唯一性的方法:
2.1. REPOSITORY:TAG
centos:7.5.1804 

2.2. IMAGE ID (sha256:64位的號碼,預設只擷取12位)
82f3b5f3c58    

[root@docker /]# docker image ls --no-trunc 


3 映象詳細資訊檢視
[root@docker /]# docker image inspect centos:6.9
[root@docker /]# docker image inspect 82f3b5f3c58f


4 只檢視映象ID 
[root@docker ~]# docker image ls -q


5 映象的匯入和匯出
[root@docker ~]# docker image save 3556258649b2 >/tmp/ubu.tar
[root@docker ~]# docker image rm 3556258649b2
[root@docker ~]# docker image load -i /tmp/ubu.tar
[root@docker ~]# docker image tag 3556258649b2 oldguo/ubu:v1 


6 映象的刪除 
[root@docker ~]# docker image rm -f 3556258649b2
[root@docker ~]# docker image rm -f `docker image ls -q`



容器的管理

1 執行第一個容器

1.1 互動式的容器
[root@docker ~]# docker container run -it  9f38484d220f
[root@docker /]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4d1ef5a6ecfc        9f38484d220f        "/bin/bash"         5 minutes ago       Up 5 minutes                            nervous_alle

CONTAINER ID : 容器的唯一號碼(自動生成的)
NAMES		  : 容器的名字(可以自動,也可以手工指定)


例子: 手工指定容器名啟動
[root@docker /]# docker container run -it --name="oldguo_cent76" 9f38484d220f
[root@docker /]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
ef45b19d8c7b        9f38484d220f        "/bin/bash"         About a minute ago   Exited (0) 5 seconds ago                       oldguo_cent76
4d1ef5a6ecfc        9f38484d220f        "/bin/bash"         9 minutes ago        Up 9 minutes                                   nervous_allen

STATUS	     : 容器的執行狀態  ( Exited , Up)



1.2 守護式容器
[root@docker /]# docker run -d --name="oldguo_nginx" nginx:1.14
查詢容器的詳細資訊:
[root@docker /]# docker container inspect oldguo_nginx



1.3 容器的應用場景
互動式的容器: 工具類: 開發,測試,臨時性的任務()
[root@docker ~]# docker container run -it --name="oldguo_cent76"  --rm 9f38484d220f

守護式容器: 網路服務
[root@docker /]# docker run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14



1.4 容器的啟動\關閉\連線
守護式容器的關閉和啟動
[root@docker /]# docker container stop oldguo_nginx_80
[root@docker /]# docker container start oldguo_nginx_80

互動式的容器的關閉和啟動
[root@docker /]# docker container stop nervous_allen
[root@docker /]# docker container start -i  nervous_allen

容器的連線方法:
[root@docker /]# docker container attach nervous_allen

子程序的方式登入(在已有工作容器中生成子程序,做登入.可以用於進行容器的除錯,退出時也不會影響到當前容器)
[root@docker ~]# docker container exec -it nervous_allen /bin/bash

容器的後臺及前臺執行:
1. ctrl + P, Q   
attach 呼叫到前臺
2. 死迴圈 
3. 讓程式前臺一直允許(夯在前臺)
製作守護式容器時,常用的方法

2 docker容器的網路訪問

指定對映(docker 會自動新增一條iptables規則來實現埠對映)
    -p hostPort:containerPort
    -p ip:hostPort:containerPort 
    -p ip::containerPort(隨機埠:32768-60999)
    -p hostPort:containerPort/udp
    -p 81:80 –p 443:443	兩個服務
隨機對映
    docker run -P 80(隨機埠)	

[root@docker ~]# docker container run -d -p 8080:80 --name='n2' nginx:1.14    *****
[root@docker ~]# docker container run -d -p 10.0.0.100:8081:80 --name='n3' nginx:1.14  *****
[root@docker ~]# docker container run -d -p 80 --name='n5' nginx:1.14
[root@docker ~]# docker container run -d -p 172.16.1.200::80 --name='n6' nginx:1.14

3 容器的其他管理

# 檢視所有容器的CONTAINER ID (不管是up 的還是exited的都會顯示)
docker ps -a  -q 
等價於:
docker container ls -a -q

# 檢視正在執行的容器裡的程序
[root@docker ~]# docker  top  ba9143bcaf74
等價於:
[root@docker ~]# docker  container top  ba9143bcaf74

檢視日誌:
[root@oldboy docker]# docker logs 213e54a2aefa
[root@oldboy docker]# docker logs -tf alnk_nginx8080

[root@oldboy docker]# docker logs -t testxx
[root@oldboy docker]# docker logs -tf  --tail 10 testxx
[root@oldboy docker]# docker logs -tf  --tail 0 testxx

4 小結

1. 映象類:
	docker image 
				search 
				pull 
				ls        *****
				inspect   *****
				rm        ****
				save 
				load 


2. 容器類
    docker container 
				run 		*****
				start       ****
				stop 		****
				restart     
				kill 
				attach 
				exec 	    *****
				ls          *****
				top         ****
				logs 
				inspect     ****

5 docker的資料卷實現持久化儲存

1. 手工互動資料:
[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/html/
[root@docker opt]# docker container cp n1:/usr/share/nginx/html/50x.html ./


2. Volume實現宿主機和容器的資料共享
作用: 資料持久化
[root@docker opt]# mkdir -p /opt/html
[root@docker ~]# docker run -d --name="nginx_3" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx


3. 例子:  開啟兩個nginx容器(90,91),共同掛載一個數據卷,實現靜態資源共享
[root@docker html]# docker run -d --name="nginx_4" -p 84:80 -v /root/html/:/usr/share/nginx/html   nginx
[root@docker html]# docker run -d --name="nginx_5" -p 85:80 -v /root/html/:/usr/share/nginx/html   nginx
[root@docker html]# pwd
/root/html
[root@docker html]# ll
total 4
-rw-r--r-- 1 root root 9 Jan  3 17:15 index.html
[root@docker html]# echo xxxx >index.html 
# web介面訪問 IP:85 


4. 資料卷容器
(1)宿主機模擬資料目錄
mkdir -p /opt/Volume/a
mkdir -p /opt/Volume/b
touch /opt/Volume/a/a.txt
touch /opt/Volume/b/b.txt

(2)啟動資料卷容器
docker run -it  --name "nginx_volumes" -v /opt/Volume/a:/opt/a  -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash
ctrl p q

(3)使用資料卷容器
docker run -d  -p 8085:80 --volumes-from  nginx_volumes --name "n8085"  nginx
docker run -d  -p 8086:80 --volumes-from  nginx_volumes --name "n8086"  nginx

驗證
[root@docker opt]# docker container exec -it n8086 /bin/bash
root@81a12c677b02:/# ls /opt/a/a.txt 
/opt/a/a.txt
root@81a12c677b02:/# 

作用:  在集中管理叢集中,大批量的容器都需要掛載相同的多個數據卷時,可以採用數卷容器進行統一管理


轉載請註明出處喲~ https://www.cnblogs.com/lichengguo