Docker 基礎配置安裝

[toc]html

Docker 基礎配置安裝

Docke介紹

Docker官網linux

githubgit

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

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

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

自2013年開始,近些年發展迅猛
docker從1.13x開始,版本分爲社區版ce和企業版ee,而且基於年月的時間線形式,當前最新穩定版爲17.09json

版本信息參考http://blog.csdn.net/chenhaifeng2016/article/details/68062414ubuntu

三篇資料連接,助你加深理解什麼是Docker?

如通何俗懂易釋解Docker是什麼? vim

大白話Docker入門一centos

大白話Docker入門二

容器虛擬化和傳統虛擬化比較:

容器虛擬化:

mark

傳統虛擬化:

mark

也就是說,讓咱們建立一個新的虛擬機的時候,若是使用Vmware,首先咱們須要分配必定的硬件資源去運行虛擬出來的系統,若是一臺電腦例如個人win7 配置通常,也就頂多能夠跑10個centos,可是若是使用Docker就能夠建立成千上百個centos系統,且每一個系統都是獨立的,隔離開來的,硬件資源也是隔離開來的。這就是根本區別!

mark

從上圖看出Docker的優點是:

啓動很是快,秒級實現。資源利用率很高,一臺機器能夠跑上千個docker容器。更快的交付和部署,一次建立和配置後,能夠在任意地方運行。內核級別的虛擬化,不須要額外的hypevisor- – 支持,會有更高的性能和效率。易遷移,平臺依賴性不強。

Docker核心概念

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

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

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

2、Docker的安裝與配置

2.1 安裝

[root@xaviyunserver ~]# 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
  0     0    0     0    0     0      0      0 --:--:-- --:--:  0     0    0     0    0     0      0      0 --:--:-- --:--:100  2424  100  2424    0     0   2009      0  0:00:01  0:00:01 --:--:--  2011
[root@xaviyunserver ~]# yum install -y docker-ce

啓動docker,查看進程,ps aux | grep docker。查看版本 docker version

[root@xaviyunserver ~]# systemctl start docker
[root@xaviyunserver ~]#  ps aux | grep docker
root      1624  0.7  3.2 452080 61592 ?        Ssl  11:10   0:00 /usr/bin/dockerd
root      1628  0.1  1.0 289788 20100 ?        Ssl  11:10   0:00 docker-containerd --config /var/run/docker/containerd/containerd.toml
root      1771  0.0  0.0 112660   968 pts/0    R+   11:11   0:00 grep --color=auto docke
[root@xaviyunserver ~]# docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:20:16 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:23:58 2018
  OS/Arch:      linux/amd64
  Experimental: false

查看docker生成的iptables規則

[root@xaviyunserver ~]# iptables -nvL
Chain INPUT (policy ACCEPT 110 packets, 7188 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER-USER  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 DOCKER-ISOLATION-STAGE-1  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    0     0 DOCKER     all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 docker0  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 80 packets, 15362 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain DOCKER (1 references)
 pkts bytes target     prot opt in     out     source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER-ISOLATION-STAGE-2  all  --  docker0 !docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      docker0  0.0.0.0/0            0.0.0.0/0           
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-USER (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

啓動docker會自動幫咱們建立一些IPtables 規則,其目的就是不影響docker虛擬機的正常運行。(每次重啓docker服務會自動把iptables規則添加上,因此不用擔憂刪除!)

擴展如何保存iptable規則(備用),打開系統中iptables文件 /etc/sysconfig/iptables,確認沒有保存,輸入service iptables save

mark

[root@xaviyunserver ~]# cat //這裏我實驗用的是雲服務器,以前沒有作個iptable練習 /etc/sysconfig/iptables
cat: /etc/sysconfig/iptables: No such file or directory
[root@xaviyunserver ~]# cat /etc/sysconfig/iptables-config

刪除iptables規則:iptables -t nat -F;查看iptable規則:iptables -t nat -nvL

[root@xaviyunserver ~]# iptables -t nat -F
[root@xaviyunserver ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain DOCKER (0 references)
 pkts bytes target     prot opt in     out     source               destination

重啓以後ipatble規則又出現了

mark

2.2 鏡像管理

下載鏡像,docker 因爲在國外,國內限制比較大,因此咱們通常會使用阿里雲的加速器去下載一個鏡像:

vi /etc/docker/daemon.json  //加入以下內容
{
  "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}

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

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

[root@xaviyunserver ~]# vim /etc/docker/daemon.json
[root@xaviyunserver ~]# systemctl restart docker
[root@xaviyunserver ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7dc0dca2b151: Pull complete 
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for centos:latest

查看本地都有哪些鏡像:docker images

[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              49f7960eb7e4        4 weeks ago         200MB

搜索鏡像:docker search XXXX,xxxx是關鍵字

從docker倉庫搜索centos鏡像

[root@xaviyunserver ~]# docker search centos
[root@xaviyunserver ~]# docker pull ubuntu //相似於wget

[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB

爲centos鏡像設置標籤(TAG)爲:docker tag centos xavilinux_centos

[root@xaviyunserver ~]# docker tag centos xavilinux_centos

mark

修改容器標籤和容器名稱,TAG:docker tag centos test11:xavier

[root@xaviyunserver ~]# docker tag centos test11:xavier
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
test11              xavier              49f7960eb7e4        4 weeks ago         200MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago         200MB

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

[root@xaviyunserver ~]# docker run -itd centos
[root@xaviyunserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
83a4c32c03ca        centos              "/bin/bash"         42 seconds ago      Up 41 seconds                           nostalgic_lamport

docker ps //查看正在運行的容器(已啓動的)

docker ps -a //加上-a選項能夠查看全部容器,包含沒有運行的容器

exit //直接退出容器系統

docker rmi centos //用來刪除指定鏡像, 其中後面的參數能夠是tag,若是是tag時,其實是刪除該tag,只要該鏡像還有其餘tag,就不會刪除該鏡像。當後面的參數爲鏡像ID時,則會完全刪除整個鏡像,連同全部標籤一同刪除。

[root@xaviyunserver ~]# docker rmi test11
Error: No such image: test11
[root@xaviyunserver ~]# docker rmi test11:xavier
Untagged: test11:xavier
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago         200MB

這裏只是刪除了tag,至關於刪除了一個硬連接而已

2.3 docker經過容器建立鏡像

剛剛我只是說到了如何刪除修改一些基礎的操做,一旦鏡像搭建好了,如何才能經過命令行進入系統呢?

經過下面命令進入容器:docker exec -it 83a4c3 bash // 「83a4c3」是在運行容器的ID前6位

首先查看下run的docker有哪些: docker ps
[root@xaviyunserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
83a4c32c03ca        centos              "/bin/bash"         25 minutes ago      Up 25 minutes

查看容器大小,空間

[root@xaviyunserver ~]# docker exec -it 83a4c3 bash
[root@83a4c32c03ca /]# ls
bin  etc   lib    media  opt   root  sbin  sys  usr
dev  home  lib64  mnt    proc  run   srv   tmp  var
[root@83a4c32c03ca /]# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          40G  3.8G   34G  10% /
tmpfs            64M     0   64M   0% /dev
tmpfs           920M     0  920M   0% /sys/fs/cgroup
/dev/vda1        40G  3.8G   34G  10% /etc/hosts
shm              64M     0   64M   0% /dev/shm
tmpfs           920M     0  920M   0% /proc/scsi
tmpfs           920M     0  920M   0% /sys/firmware

mark

容器裏面有沒有IP呢?沒有

[root@83a4c32c03ca /]# ifconfig
bash: ifconfig: command not found

[root@83a4c32c03ca /]# yum install -y net-tools //安裝net-tools
  • 安裝之後查看下當前鏡像的ip
[root@83a4c32c03ca /]# 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
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 5867  bytes 11263312 (10.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3745  bytes 287096 (280.3 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

查看系統IP,能夠看到新生成的虛擬網卡docker0,這兒VMware裏面的vmnet8同樣,沒生成一個虛擬機,會產生一個虛擬網卡和宿主機來通信。

mark

把咱們剛剛製做的鏡像保存成一個新的鏡像,下次咱們再次須要的時候就能夠直接使用(不須要再次安裝咱們已經安裝過的服務!):

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

好比這裏咱們就不用在有安裝net-tools的這個服務了

[root@xaviyunserver ~]# docker commit -m "install net-tools"  -a "xavilinux" 83a4c32c03ca centos_with_net 
sha256:097367cfbba8cc4041fe2238aca01c03ffb00abe85ce34a0befecaad49b14556
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_with_net     latest              097367cfbba8        9 seconds ago       282MB
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago         200MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB

進入這個新創建的容器,

[root@xaviyunserver ~]# docker run -itd centos_with_net bash
deda7b6cd703375c746a1c02d7864c29ca82c4742efc6f095180e5b6d8b730a3
[root@xaviyunserver ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
deda7b6cd703        centos_with_net     "bash"              8 seconds ago       Up 7 seconds                            gallant_hypatia
83a4c32c03ca        centos              "/bin/bash"         About an hour ago   Up About an hour                        nostalgic_lamport

mark

進入容器鏡像,也能夠輸入name信息,不要忘了bash
[root@xaviyunserver ~]# docker exec -it gallant_hypatia bash

mark

3、經過模板建立鏡像

首先去下載一個模板(centos-7-x86_64-minimal.tar.gz)下載速度比較慢,能夠先試用瀏覽器或者第三方工具下載。

http://openvz.org/Download/templates/precreated

wget http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz

若是虛擬機沒有rz命令,下載安裝lrzsz安裝包

[root@xaviyunserver ~]# yum install lrzsz -y

把模板導入成鏡像的命令爲:cat centos-7-x86_64-minimal.tar.gz |docker import - centos7

[root@xaviyunserver ~]# cat centos-7-x86_64-minimal.tar.gz |docker import - centos7
sha256:1513b3b29ff7fff26ea3041f0afddaa06195b4d9dcce388b8a829e4261828ae5

mark

[root@xaviyunserver ~]# docker run -itd centos7 bash
410e90b34976c82e2d2fde0d50aff1a240c441b1f94dd3d714f4d9963b0c314f
[root@xaviyunserver ~]# docker exec -it 410e90b34976c bash
[root@410e90b34976 /]#

查看系統Linux內核:uname -a

[root@410e90b34976 /]# uname -a
Linux 410e90b34976 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@410e90b34976 /]# exit
exit
[root@xaviyunserver ~]# uname -a
Linux xaviyunserver 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

把現有鏡像,導出爲一個文件:docker save -o [centos7_vim.tar自命名] [centos7須要導出的鏡像]

[root@xaviyunserver ~]# docker save -o centosxavi.tar centos_with_net
[root@xaviyunserver ~]# du -sh centosxavi.tar
278M    centosxavi.tar

在刪除鏡像的時候發現鏡像已經啓動,這個時候咱們就須要強制刪除(線上須要再三考慮)

[root@xaviyunserver ~]# docker rm -f deda7b6cd703 
deda7b6cd703

mark

再或者先停掉docker容器:docker stop centos_with_net

[root@xaviyunserver ~]# docker rmi 097367cfbba8 
Untagged: centos_with_net:latest
Deleted: sha256:097367cfbba8cc4041fe2238aca01c03ffb00abe85ce34a0befecaad49b14556
Deleted: sha256:b887b67ee0202a8290b52ebeb07e5f418c7f4ad801e1c17b85303fca581c999b
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7             latest              1513b3b29ff7        About an hour ago   435MB
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago

恢復本地鏡像:docker load < centosxavi.tar

[root@xaviyunserver ~]# docker load < centosxavi.tar
d8066854a2c8: Loading layer [==================================================>]  82.61MB/82.61MB
Loaded image: centos_with_net:latest
[root@xaviyunserver ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos7             latest              1513b3b29ff7        About an hour ago   435MB
centos_with_net     latest              097367cfbba8        2 hours ago         282MB
ubuntu              latest              113a43faa138        4 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
xavilinux_centos    latest              49f7960eb7e4        4 weeks ago         200MB

docker push image_name//能夠把本身的鏡像傳到dockerhub官方網站上去,但前提是須要先註冊一個用戶,後續若是有需求再研究吧。

擴展知識點:docker save與docker export的區別:

docker save:

docker save是用來將一個或多個image打包保存的工具。

例如咱們想將鏡像庫中的postgres和mongo打包,那麼能夠執行:docker save -o images.tar postgres:9.6 mongo:3.4

打包以後的images.tar包含postgres:9.6和mongo:3.4這兩個鏡像。

將打包後的鏡像載入進來使用docker load,例如:docker load -i images.tar

上述命令將會把postgres:9.6和mongo:3.4載入進來,若是本地鏡像庫已經存在這兩個鏡像,將會被覆蓋。

docker export:

docker export是用來將container的文件系統進行打包的。例如:docker export -o postgres-export.tar postgres

docker export須要指定container,不能像docker save那樣指定image或container均可以。

將打包的container載入進來使用docker import,例如:docker import postgres-export.tar postgres:latest

從上面的命令能夠看出,docker import將container導入後會成爲一個image,而不是恢復爲一個container。

總結一下docker save和docker export的區別:

docker save保存的是鏡像(image),docker export保存的是容器(container);

docker load用來載入鏡像包,docker import用來載入容器包,但二者都會恢復爲鏡像;

docker load不能對載入的鏡像重命名,而docker import能夠爲鏡像指定新名稱。

相關文章
相關標籤/搜索