1. 程式人生 > >doker介紹與操作Ⅰ

doker介紹與操作Ⅰ

doker介紹與操作

1 Docker簡介

docker近幾年非常火,因為它是容器虛擬化,更能夠充分提高硬件資源的使用率。其實利用率高不算什麽,它最大的優勢是能給讓運維人員或者開發人員快速部署和交付資源,大大提高了工作效率。幾乎所有的大企業都在使用docker,所以我們沒有理由不去了解它,不去學習它。https://yeasy.gitbooks.io/docker_practice/content/introduction/what.html (感覺還不錯的docker電子書)

- 官網 www.docker.com

- 容器虛擬化,比傳統的虛擬化輕量

- 使用go語言開發,基於apache2.0協議。

- 開源軟件,項目代碼在github維護。github https://github.com/docker/docker.github.io

- docker從1.13x開始,版本分為社區版ce和企業版ee,並且基於年月的時間線形式。

- https://yeasy.gitbooks.io/docker_practice/content/introduction/why.html

- docker和傳統的虛擬化比較

1. docker虛擬化

技術分享

2. 傳統的虛擬化

技術分享

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

- docker優勢

技術分享

1. 啟動非常快,秒級實現

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

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

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

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

- Docker核心概念

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

2. 容器,鏡像類似於操作系統,而容器類似於虛擬機本身。它可以被啟動、開始、停止、刪除等操作,每個容器都是相互隔離的。

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

2安裝Docker

[root@chy ~]#  curl https://download.docker.com/linux/centos/docker-ce.repo -o  /etc/yum.repos.d/docker.repo //下載docker的yum源
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1802  100  1802    0     0    772      0  0:00:02  0:00:02 --:--:--   772
[root@chy ~]# yum install -y docker-ce //用yum源的版本安裝docker,其實本機也是有的,但是本機的yum自帶的源版本比較低,我們需要最新的穩定版來安裝
[root@chy ~]# systemctl start docker //啟動docker
[root@chy ~]# ps aux |grep docker
root      20090  0.4  1.7 428548 26808 ?        Ssl  01:39   0:00 /usr/bin/dockerd
root      20093  0.0  0.5 264032  7776 ?        Ssl  01:39   0:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docke-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
root      20414  0.0  0.0 112664   976 pts/0    R+   01:39   0:00 grep --color=auto docker
[root@chy ~]# docker version //查看版本
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:41:23 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:42:49 2017
 OS/Arch:      linux/amd64
 Experimental: false
[root@chy ~]# iptables -nvL
Chain INPUT (policy ACCEPT 150 packets, 10819 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  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          
當我們配置完畢後,會自動幫我們創建如上的一些IPtables 規則,其目的就是不影響docker虛擬機的正常運行。(每次重啟docker服務會自動把iptables規則添加上,所以不用擔心刪除)

3 鏡像管理

- docker 由於在國外,國內限制比較大,所以我們一般會使用阿裏雲的加速器去下載一個鏡像

- 配置docker加速器

[root@chy ~]# vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
說明:這個url為加速器地址,我們也可以直接到阿裏雲去申請也可以拿來這個使用。
[root@chy ~]# systemctl restart docker  //加速配置完成後需要重啟
[root@chy ~]# docker pull centos //從docker.com獲取centos鏡像(這時用了加速器的速度會很快)

- docker鏡像管理的基本操作

[root@chy ~]# docker images //查看本地鏡像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
[root@chy ~]# docker search jumpserver//搜索鏡像,其中jumpserver是關鍵詞
[root@chy ~]# docker tag centos chylinux//為鏡像設置標簽chylinux
[root@chy ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
chylinux            latest              d123f4e55e12        9 days ago          197MB
查看設置的標簽會發現改行的image id和centos的一樣,類似於更換一個新名字再次展現出來
[root@chy ~]# docker tag centos chylinux:chy //或者一步到位:(直接修改容器為chylinux,tag為chy)
[root@chy ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              d123f4e55e12        9 days ago          197MB
chylinux            chy                 d123f4e55e12        9 days ago          197MB
chylinux            latest              d123f4e55e12        9 days ago          197MB
[root@chy ~]# docker run -itd centos //啟動centos的容器(-i表示讓容器的標準輸入打開,-t表示分配一個偽終端,-d表示後臺啟動,要把-i -t -d 放到鏡像名字前面)
6605c26e980579af355bd38cb1e45fa61d44e0a472f649be2e7bf8a322a1ac68
[root@chy ~]# docker ps -a //查看運行的容器,加上-a選項後可以查看所有容器,包括未運行的(不加-a是查看啟動的容器)
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
6605c26e9805        centos              "/bin/bash"         About a minute ago   Up About a minute                       sad_brahmagupta
[root@chy ~]# docker rmi chylinux //用來刪除指定鏡像其中後面的參數可以是tag,如果是tag時,實際上是刪除該tag(這裏需要註意一下如果刪除時用的默認tag latest時用如上的方式可以刪除但是如果刪除時用的不是默認的tag必須要加tag的名稱,如下所示的刪除例子)。當後面的參數為鏡像ID時,則會徹底刪除整個鏡像,所有標簽也會一同刪除
Untagged: chylinux:latest
[root@chy ~]# docker rmi chylinux:chy 
Untagged: chylinux:chy

4 通過容器創建鏡像

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

[root@chy ~]# docker exec -it 6605c2 bash//其中6605c2為容器id,這個id可以用docker ps查看,最後面的bash為進入容器後我們要執行的命令,這樣就可以打開一個終端

- 進入到該容器中,我們做一些變更,比如安裝一些東西,然後針對這個容器進行創建新的鏡像

[root@6605c26e9805 /]# yum install -y net-tools//在鏡像中安裝net-tools
[root@6605c26e9805 /]# ifconfig //查看虛擬ip 而且在外部的虛擬主機我們也是可以看到這個網卡的!
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 3184  bytes 10678749 (10.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2838  bytes 156894 (153.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
退出是ctrl+d

- 把我們剛剛制作的鏡像保存成一個新的鏡像,下次我們再次需要的時候就可以直接使用(不需要再次安裝我們已經安裝過的服務!)

[root@chy ~]# docker commit -m "install net-tools" -a "chenhaiying" 6605c26e9805 centos_with_net //這個命令有點像svn的提交,-m 加一些改動信息,-a 指定作者相關信息  6605c26e9805這一串為容器id,再後面為新鏡像的名字
sha256:87dde0ff7187ea314deed8b1b934c0d3e4a75e24ad2a94ee9bdcf11acd0e8b41
[root@chy ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_with_net     latest              87dde0ff7187        17 seconds ago      277MB
centos              latest              d123f4e55e12        9 days ago          197MB
[root@chy ~]# docker run -itd centos_with_net bash //運行docker
8b1dc20b6c75c85e29145e667ff96ccf93cdf9587d4584872b3c072392c1796d
[root@chy ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8b1dc20b6c75        centos_with_net     "bash"              3 seconds ago       Up 1 second                             compassionate_mestorf
6605c26e9805        centos              "/bin/bash"         28 minutes ago      Up 28 minutes                           sad_brahmagupta

希望看過的童鞋多多指教,謝謝!技術分享技術分享


doker介紹與操作Ⅰ