99.docker簡介、安裝、鏡像、建立鏡像

25.1 docker簡介linux

25.2 安裝dockergit

25.3 鏡像管理github

25.4 經過容器建立鏡像docker

 

 

 

25.1 docker簡介apache

 

 

 

docker比如一個集裝箱,咱們能夠把全部的想要運行的環境、軟件包等等打包好,放到docker裏。那你就能夠把這個docker拿走,隨便裝到哪裏去,能夠裝到任何一臺服務器上去json

打包的東西包含了他依賴的環境,庫等等。主要就是移植方便,交付很快ubuntu

官網 www.docker.comwindows

github https://github.com/docker/docker.github.iocentos

開源的容器引擎,可讓開發者打包應用以及依賴的庫,而後發佈到任何流行的linux發行版上,移植很方便bash

由go語言編寫,基於apache2.0協議發佈

基於linux kernel,要想在win下運行須要藉助一個vm(虛擬機)來實現

自2013年開始,近些年發展迅猛

docker從1.13x開始,版本分爲社區版ce和企業版ee,而且基於年月的時間線形式,當前最新穩定版爲17.09 參考http://blog.csdn.net/chenhaifeng2016/article/details/68062414

 

Docker和傳統的虛擬化比較

 

相比傳統的虛擬化,docker少一層(Hypervisor),不須要操做系統(佔用CPU),輕量化。拉下來就能用

 

 

 

 

Docker的優點

 

1.啓動很是快,秒級實現

2.資源利用率高,一臺高配置服務器能夠跑上千個docker容器

#由於是輕量的虛擬化

3.更快的交付和部署,一次建立和配置後,能夠在任意地方運行

4.內核級別的虛擬化,不須要額外的hypevisor支持,會有更高的性能和效率

#不須要去虛擬化CPU、內存等等,不須要這些服務

5.易遷移,平臺依賴性不強

#能夠在linux下搞一個docker的鏡像,而後能夠在windows下運行

 

 

 

Docker核心概念

 

1.鏡像,是一個只讀的模板,相似於安裝系統用到的那個iso文件,咱們經過鏡像來完成各類應用的部署。

2.容器,鏡像相似於操做系統,而容器相似於虛擬機自己。它能夠被啓動、開始、中止、刪除等操做,每一個容器都是相互隔離的。

3.倉庫,存放鏡像的一個場所,倉庫分爲公開倉庫和私有倉庫。 最大的公開倉庫是Docker hub(hub.docker.com),國內公開倉庫(dockerpool.com)

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

25.2 安裝docker

 

 

 

1.curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo

#首先下載repo的yum源

2.yum install -y docker-ce

速度比較慢,你們也能夠直接下載rpm包

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

下載完,上傳到linux下

也須要用yum安裝,能夠自動解決依賴關係

yum install -y docker-ce-xxxx.rpm

3.systemctl start docker 啓動docker

 

 

 

實例:

1.[root@axinlinux-01 ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 2424 100 2424 0 0 1082 0 0:00:02 0:00:02 --:--:-- 1082

[root@axinlinux-01 ~]# cat !$ #也能夠看一下官方給咱們提供的這個yum源

cat /etc/yum.repos.d/docker.repo

[root@axinlinux-01 ~]# yum list |grep docker #能夠看一下系統自帶的docker

docker.x86_64 2:1.13.1-75.git8633870.el7.centos #1.13的,這個版本很老了

docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable #這個是他的最新版,也是我麼要安裝的

2.[root@axinlinux-01 ~]# yum install -y docker-ce #然而報錯了

錯誤:docker-ce conflicts with 2:docker-1.13.1-88.git07f3374.el7.centos.x86_64

錯誤:docker-ce-cli conflicts with 2:docker-1.13.1-88.git07f3374.el7.centos.x86_64

[root@axinlinux-01 ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine #執行這一步,卸載以前的docker相關

[root@axinlinux-01 ~]# yum -y install docker-ce #再次執行

若是下載很慢,https://coding.net/u/aminglinux/p/yuanke_centos7/git/tree/master/25docker下載rpm包(docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm)。而後yum install 指定這個rpm包,就能夠了

3.[root@axinlinux-01 ~]# systemctl start docker

[root@axinlinux-01 ~]# ps aux |grep docker

[root@axinlinux-01 ~]# iptables -nvL #他會自動的幫咱們生成一些規則

[root@axinlinux-01 ~]# iptables -t nat -nvL #針對nat的

[root@axinlinux-01 ~]# cat /etc/sysconfig/iptables #這些規則不能幫咱們保存

[root@axinlinux-01 ~]# service iptables save #咱們要手動的保存一下

[root@axinlinux-01 ~]# iptables -t nat -F #作個試驗先把他清空掉

[root@axinlinux-01 ~]# iptables -t nat -nvL #再次查看就沒有規則了

[root@axinlinux-01 ~]# systemctl restart docker #咱們一旦重啓docker,這些規則就回來了

[root@axinlinux-01 ~]# iptables -t nat -nvL

由於重啓的時候,設計一些容器的啓動。他會自動把容器關閉,你還須要把容器再起來。因此通常做爲docker的服務器,iptables儘可能的不要動

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

25.3 鏡像管理

 

 

 

1.docker pull centos//能夠下載centos鏡像,速度很慢

配置docker加速器(參考 http://blog.csdn.net/xlemonok/article/details/71403534)

2.vi /etc/docker/daemon.json//加入以下內容

{

"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]

}

說明:這個url爲加速器地址,須要同窗們自行到阿里雲申請

3.配置完加速器,重啓docker服務,再次docker pull centos會快不少

4.docker images 查看本地的鏡像

5.docker search xxx //搜索鏡像,其中xxx是關鍵詞

6.docker tag centos aming123 //給鏡像打標籤 #冒號的用法

7.docker run -itd centos //把鏡像啓動爲容器,-i表示讓容器的標準輸入打開,-t表示分配一個僞終端,-d表示後臺啓動,要把-i -t -d 放到鏡像名字前面

8.docker ps //查看運行的容器,加上-a選項後能夠查看全部容器,包括未運行的

9.docker rmi centos //用來刪除指定鏡像, 其中後面的參數能夠是tag,若是是tag時,其實是刪除該tag。當後面的參數爲鏡像ID時,則會完全刪除整個鏡像,全部標籤也會一同刪除

 

 

 

實例:

[root@axinlinux-01 ~]# docker pull centos #咱們直接拉取centos鏡像。由於在國外,很慢因此超時報錯了

Using default tag: latest

Error response from daemon: Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fcentos%3Apull&service=registry.docker.io: net/http: TLS handshake timeout

[root@axinlinux-01 ~]# vi /etc/docker/daemon.json #搞一個加速器

{

"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]

}

[root@axinlinux-01 ~]# systemctl restart docker #重啓一下docker

[root@axinlinux-01 ~]# docker pull centos #再次拉取鏡像

[root@axinlinux-01 ~]# docker images #看本地有哪些鏡像

REPOSITORY TAG(版本標籤) IMAGE ID(區分系統裏鏡像的惟一標示) CREATED SIZE

centos latest 1e1148e4cc2c 7 days ago 202MB

[root@axinlinux-01 ~]# docker search jumpserver #搜索jumpserver鏡像。直接pull就能夠直接使用了

[root@axinlinux-01 ~]# docker tag centos axinlinux_centos #給centos打標籤

[root@axinlinux-01 ~]# docker images #會生成一個跟centos同樣的鏡像出來。ID(惟一標示並無變)

REPOSITORY TAG IMAGE ID CREATED SIZE

axinlinux_centos latest 1e1148e4cc2c 7 days ago 202MB

centos latest 1e1148e4cc2c 7 days ago 202MB

ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB

[root@axinlinux-01 ~]# docker tag centos test111:222222 #以冒號分隔可更改,左邊爲REPOSITORY,右邊爲TAG

[root@axinlinux-01 ~]# docker images #以上更改的結果。更改標籤的時候,以冒號分隔便可

REPOSITORY TAG IMAGE ID CREATED SIZE

axinlinux_centos latest 1e1148e4cc2c 7 days ago 202MB

centos latest 1e1148e4cc2c 7 days ago 202MB

test111 222222 1e1148e4cc2c 7 days ago 202MB

ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB

[root@axinlinux-01 ~]# docker run -itd centos

55ad3e4d41d31abe444ffab8143245566b4b0e84704f241c14568e55849014a2

[root@axinlinux-01 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

55ad3e4d41d3 centos "/bin/bash" 5 seconds ago Up 4 seconds xenodochial_thompson

[root@axinlinux-01 ~]# docker ps -a #查看所有的容器,包括已經啓動的和中止的

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

55ad3e4d41d3 centos "/bin/bash" About a minute ago Up About a minute xenodochial_thompson

[root@axinlinux-01 ~]# docker rmi test111 #刪除test111。報錯由於他默認會找test111:latest。而咱們剛纔建立的是test111:222222

Error: No such image: test111

[root@axinlinux-01 ~]# docker rmi test111:222222 #因此咱們要加上冒號222222,才能刪除

Untagged: test111:222222

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

25.4 經過容器建立鏡像

 

 

咱們能夠去官方直接拉取(pull)鏡像,也能夠自定義建立一個鏡像。好比我拉取了一個centos,可是這個鏡像的一些東西沒有,我想安裝一個jumpserver出來。這個時候就能夠在這個容器裏yum一些東西或者編譯一些東西。按完之後在把這個容器搞到鏡像裏去,建立一個鏡像出來,就能夠直接用這個鏡像

 

 

1.docker run啓動容器後,能夠經過下面命令進入容器

2.docker exec -it xxxxx bash//其中xxxxx爲容器id,這個id能夠用docker ps查看,最後面的bash爲進入容器後咱們要執行的命令,這樣就能夠打開一個終端

3.進入到該容器中,咱們作一些變動,好比安裝一些東西,而後針對這個容器進行建立新的鏡像

4.在容器中執行 yum install -y net-tools,而後ctrl d退出容器

5.docker commit -m "change somth" -a "somebody info" container_id new_image_name //container_id經過docker ps -a獲取,後面的new_image_name爲新鏡像名字

例如: docker commit -m "install net-tools" -a "Aming" 2c74d574293f centos_with_nettool 這個命令有點像svn的提交,-m 加一些改動信息,-a 指定做者相關信息 2c74d這一串爲容器id,再後面爲新鏡像的名字

 

 

 

實例:

[root@axinlinux-01 ~]# docker ps #查看一下開啓的容器

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

55ad3e4d41d3 centos "/bin/bash" 17 minutes ago Up 16 minutes xenodochial_thompson

[root@axinlinux-01 ~]# docker exec -it 55ad3e4d41d3 bash #進入這個開啓的容器。bash爲一個交互

[root@55ad3e4d41d3 /]# df -h #進去以後咱們能夠看他的裏面的東西

[root@55ad3e4d41d3 /]# free -h

[root@55ad3e4d41d3 /]# cat /proc/cpuinfo

[root@55ad3e4d41d3 /]# ifconfig #ifconfig用不了,安裝一個

bash: ifconfig: command not found

[root@55ad3e4d41d3 /]# yum install -y net-tools

[root@55ad3e4d41d3 /]# ifconfig #安裝完,就能夠用ifconfig看一下了

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 #這個是docker本身的一個網段

ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)

RX packets 5419 bytes 8616331 (8.2 MiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 3156 bytes 173704 (169.6 KiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536

inet 127.0.0.1 netmask 255.0.0.0

loop txqueuelen 1 (Local Loopback)

RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 0 bytes 0 (0.0 B)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@55ad3e4d41d3 /]# exit #退出來

exit

[root@axinlinux-01 ~]# ifconfig #看看系統的網卡,就多了這個docker0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255

inet6 fe80::42:5ff:fe7e:1917 prefixlen 64 scopeid 0x20<link>

ether 02:42:05:7e:19:17 txqueuelen 0 (Ethernet)

RX packets 3156 bytes 129520 (126.4 KiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 5411 bytes 8615683 (8.2 MiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

.。。。。

veth9f87026: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 #每開啓一個容器都會有一個這樣虛擬的網卡產生。這樣才能正常的跟宿主機正常的通訊

inet6 fe80::c8fc:9dff:feb7:e5cc prefixlen 64 scopeid 0x20<link>

ether ca:fc:9d:b7:e5:cc txqueuelen 0 (Ethernet)

RX packets 3156 bytes 173704 (169.6 KiB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 5419 bytes 8616331 (8.2 MiB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@axinlinux-01 ~]# docker commit -m "install net-tools" -a "axinlinux" 55ad3e4d41d3 centos_with_net #作成鏡像。跟git很像,-a可理解爲做者,55ad3e4d41d3表示這個鏡像一開始的惟一ID,後面的就是這個新的鏡像的名字

sha256:9fe62e7d735523370bfb5c03029178f6edf92e4c4120e9adcfbf5a3fa637b49c

[root@axinlinux-01 ~]# docker images #就會有你這個鏡像出來。而後咱們跑一跑

REPOSITORY TAG IMAGE ID CREATED SIZE

centos_with_net latest 9fe62e7d7355 3 minutes ago 272MB

axinlinux_centos latest 1e1148e4cc2c 7 days ago 202MB

centos latest 1e1148e4cc2c 7 days ago 202MB

ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB

[root@axinlinux-01 ~]# docker run -itd centos_with_net #先打開

8028e7aa9820d9bf000a51fbad5cc3744fbf2134e3c5d388f33990e902d5a2d4

[root@axinlinux-01 ~]# docker exec -it 8028e7aa9820d9b bash #而後再進去

[root@8028e7aa9820 /]# ifconfig #就能夠運行ifconfig了

[root@8028e7aa9820 /]# ping www.baidu.com #也是能夠聯網的

相關文章
相關標籤/搜索