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介紹與操作Ⅰ