docker容器初探—基本概念和基礎命令用法

                    docker容器初探—基本概念和基礎命令用法
linux

-------------------------------------------------------------------------------------------------------------------------------------------
web

1、基本概念docker

一、LXC:Linux Container,針對於Linux內核容器功能的用戶空間接口,docker剛問世時基於LXC之上,後期發展摒棄了LXC,lxc -> libcontainer -> runCvim

二、docker:也是基於c/s架構centos

容器基於鏡像啓動,若是本地沒有,docker會去ftp倉庫拉取鏡像到本地bash

基於本身開發的libcontainer服務器

三、Cgroups和namespace是docker的核心技術網絡

(1)docker的kernel namespace(內核名稱空間)六個重要元素:ipc uts mount pid network user架構

image.png

(2)Cgroups:control groupsapp

blkio:塊設備IO

cpu CPU

cpuacct CPU資源使用報告

cpuset 多處理器平臺上的CPU集合

devices 設備訪問

freezer 掛起或恢復任務

memory 內存用量及報告

perf_event 對cgroup中的任務進行統一性能測試

net_cls cgroup中的任務建立的數據報文的類別標識符

OCI:Open Container Initiative,旨在圍繞容器格式和運行時制定一個開放的工業化標準

四、鏡像是分層構建的

docker image的使用

image.png 

聯合掛載:上3層均可以看到底層的/var/log,假設當第二層執行rm /tmp/a.txt後,上3層看不到/tmp/a.txt,但底層的/tmp/a.txt依然在。最上一層爲可寫層(其它層只讀),平時修改操做都在可寫層進行,因此修改完成後底層鏡像沒有變更,變更的只是可寫層

五、docker怎樣運行的

image.png

aufs:advanced multi-layered unification filesystem:高級多層統一文件系統,用於爲Linux文件系統實現聯合掛載

overlayfs:aufs的競爭產品,自從3.18版本被合併到Linux內核,也就是說CentOS7內核版本3.10未打補丁是不支持的,用的仍是devicemapper,雖然說redhat給內核打了補丁,不過支持度確定仍是遠不如Ubuntu默認的aufs

六、特色:

(1)基於一個鏡像,能夠啓動多個容器,供多個容器之間共享使用

(2)正常狀況下一個docker容器只容許運行一個進程和其子進程,不然容器還須要一個進程管理器

七、docker的對象

image、contain、networksvolumes、plugins、other object

八、docker的registry倉庫可分爲:其中的鏡像名的引用相似於httpd:v2.4.32,引用2.4.32版本的httpd

Docker Hub

gcr.io

quay.io

dev.aliyun.com

我的創建高可用倉庫

image.png

registry分類

    sponsor registry

    mirror registry

    vendor registry

    private registry


2、docker的安裝

一、docker的社區版:moby,也稱做docker-ce

阿里雲鏡像站的docker-ce下,建議使用較新版本,k8s只支持到docker的17.03版

image.png

下載docker-ce.repo文件到yum源文件,yum -y install docker-ce

 image.png

將此文件移動到/etc/yum.repos.d/目錄下

yum -y install docker-ce

注意:安裝過程當中出現如下界面,請填寫一個epel源,以後重裝container-selinux

image.png

複製如下代碼到/etc/yum.repos.d/目錄下新建的repo文件

[base]

name=CentOS-$releasever - Base - mirrors.aliyun.com

failovermethod=priority

baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/

        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/

        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

 

[updates]

name=CentOS-$releasever - Updates - mirrors.aliyun.com

failovermethod=priority

baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/

        http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/

        http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

 

[extras]

name=CentOS-$releasever - Extras - mirrors.aliyun.com

failovermethod=priority

baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/

        http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/

        http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/

gpgcheck=1

gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

 

[centosplus]

name=CentOS-$releasever - Plus - mirrors.aliyun.com

failovermethod=priority

baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/

        http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/

        http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/

gpgcheck=1

enabled=0

gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

 

[contrib]

name=CentOS-$releasever - Contrib - mirrors.aliyun.com

failovermethod=priority

baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/

        http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/

        http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/

gpgcheck=1

enabled=0

gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

二、安裝成功後,須要修改幾個地方

(1)編輯/usr/lib/systemd/system/docker.service

image.png

(2)設置加速鏈接

登陸阿里雲帳號,以後轉入cr.console.aliyun.com,開通,界面以下

image.png

寫入

image.png

(3)開啓docker須要/proc/sysnet/brige/bridge-nf-call-iptables和/proc/sysnet/brige/bridge-nf-call-ip6tables爲1,常保存須要vim /etc/sysctl.d/docker.conf,寫入net.bridge.bridge-nf-call-iptables = 1和

net.bridge.bridge-nf-call-ip6tables = 1

image.png

完成後systemctl daemon-reload;systemctl restart docker


3、docker官方鏡像網站

https://hub.docker.com

image.png


4、docker基礎命令

一、docker search :搜索鏡像

image.png

二、docker image pull alpine:從倉庫向本地拖鏡像,不用標籤默認用最新版alpine

alpine有版本:

image.png

安裝效果

image.png

三、docker image ls:查看鏡像信息

docker imager ls -a

image.png

四、docker image inspect alpine:顯示鏡像詳細信息

image.png

五、docker image rm alpine:3.8,刪除alpine3.8鏡像

image.png

六、docker image tag httpd:2.4.37-alpine httpd:2.4,給標籤爲2.4.37-alpine的httpd鏡像增長標籤httpd:2.4

docker image tag httpd:2.4.37-alpine chenux/httpd:2.4

docker image tag httpd:2.4.37-alpine reg.chenux.com:8443/chenux/httpd:2.4,只有這麼打上主機標籤纔會認爲是本身的docker庫,不然系統會認爲是官方的docker庫

有原鏡像

image.png

添加鏡像tag,docker image tag httpd:2.4.37-alpine httpd:2.4,docker image tag busybox:1.29 chenux/busybox:2.4

image.png

docker image tag httpd:2.4.37-alpine reg.chenux.com:8443/chenux/httpd:2.4

image.png

注:一個鏡像能夠有多個tag標籤,但一個tag標籤只能有一個鏡像

七、docker container run --name alpine1 -it alpine:3.8

新建一個容器,名字叫alpine1,並啓動打開其交互界面

image.png

docker container run --name alpine1 alpine:3.8 -d

啓動一個容器,名字叫alpine1,以守護進程方式後臺運行

image.png

另起一個終端

image.png

注:這裏httpd能夠後臺運行是由於鏡像裏CMD中有個httpd-foreground前臺運行,因此此時-d剝離後依然存在,而alpine鏡像因爲沒有前臺運行的指令,因此此法建立出後是退出狀態

image.png

docker container run --name alpine1 -it alpine:3.8 --rm alpine

啓動一個容器,名字叫alpine1,打開其交互界面,中止後刪除該容器

啓動狀態時存在httpd2

image.png

中止後

image.png

八、docker container ls,查看docker容器狀態信息

docker container ls -a

image.png

九、docker container start httpd1,啓動一個關閉的容器

顯示前有container狀態

image.png

啓動docker container start httpd1

image.png

docker container start -i doc7

啓動doc7容器並進入交互界面

image.png

十、docker container attach doc7,其餘終端使用該命令關聯一個容器的終端,前臺運行光標閃爍

image.png

ctrl+p後ctrl+q,剝離容器的終端

image.png

十一、docker ps:doc列出後臺運行的容器

docker ps -a

image.png

十二、docker logs:用來獲取和顯示docker控制檯的日誌

image.png

1三、docker container exec,非交互式突破容器外殼進入容器內部執行命令

docker exec alpine1 ifconfig

image.png

docker exec web1 -it /bin/bash, 交互式突破容器外殼進入容器內部執行命令

1四、docker top web1,對web1的容器查看內部運行狀態

image.png

1五、docker container stats,獲取當前全部容器cpu、內存、網絡io、磁盤io的消耗

image.png

1六、docker container pause,暫停容器

docker container unpause ,繼續運行暫停的容器

image.png

docker rm web1,刪除web1容器

image.png


4、docker狀態轉換結構圖

image.png

docker kill相似於virsh中的destroy,通常狀況不建議使用,除非docker在使用中遇到了錯誤

OOM:out of memory,非計劃內終止,容器所在的宿主機內存資源耗盡,此時系統會自動殺死佔用內存最大的由docker內的服務進程,此時須要定製策略,看此服務進程是重啓仍是進入stopped狀態


5、製做docker鏡像

由於docker的鏡像採用是聯合掛載,所以對鏡像的修改製做,實質上是對鏡像最上層可寫層進行寫操做保存,對底層鏡像並無修改

一、下載原鏡像

docker image pull busybox

docker container run --name b1 -it busybox

image.png

二、進行修改,好比安裝包之類

image.png

docker commit,用於該容器可寫層寫的數據保存爲一個鏡像層

docker commit doc7,保doc7這個容器可寫層

image.png

三、新的鏡像沒有名字和標籤,因此須要添加

docker image tag IMAGEID mycentos:7

image.png

四、若是有需求,還能夠繼續使用docker commit -c 命令修改須要鏡像的指令的內部

docker commit -a "chenux" -c 'CMD ["/usr/sbin/httpd","-DFOREGROUND"]' -p centos-base1 centos-httpd:v0.2-2.4

-a,添加做者

-c,修改CMD中指令

-p,修改過程當中容器暫停

修改centos-base1鏡像,添加做者信息chenux,由CMD中的/bin/bash命令改成了/usr/sbin/httpd,-DFOREGROUND,建立過程當中暫停容器,新鏡像名字叫centos-httpd:v0.2-2.4

鏡像信息中containerconfig中的CMD

示例

image.png

修改結果

image.png


6、使用registry推送鏡像

一、阿里雲建立鏡像倉庫

 image.png

二、創建倉庫信息

image.png

三、選擇本地倉庫

image.png

四、建立好後點擊管理

image.png

五、推送時鏡像標籤須要和服務器保持一致,阿里雲提示的操做指南會有

image.png

(1)登陸倉庫

image.png

(2)添加標籤

image.png

(3)推送

image.png

完成後

image.png

倉庫也有了

image.png

推送完成後,docker logout

 

7、分發鏡像

docker image save IMAGE-ID -o /DIR/*.tar

image.png

scp

docker image load -i /DIR/*.tar

image.png

測試結果

image.png

相關文章
相關標籤/搜索