Docker的基本操作命令

Docker介紹

Docker 是一個能夠把開發應用程序自動部署到容器的開源引擎。它由Docker公司的團隊編寫,基於Apache 2.0開源協議授權。它提供了一個簡單、輕量的建模方式,使開發生命週期更高效快速,鼓勵了面向服務的架構設計。Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更爲簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。

Docker 的特點:

更快速的交付和部署
更高效的虛擬化
更輕鬆的遷移和擴展
更簡單的管理
容器技術與傳統虛擬機性能對比
Docker的基本操作命令
Docker與虛擬機建構對比
Docker的基本操作命令
Docker 容器本質上是宿主機上的一個進程。Docker 通過 namespace 實現了資源隔離,通過 cgroups 實現了資源的限制,通過寫時複製機制(copy-on-write)實現了高效的文件操作。

Docker有五個命名空間:進程、網絡、掛載、宿主和共享內存,爲了隔離有問題的應用,Docker運用Namespace將進程隔離,爲進程或進程組創建已隔離的運行空間,爲進程提供不同的命名空間視圖。這樣,每一個隔離出來的進程組,對外就表現爲一個container(容器)。需要注意的是,Docker讓用戶誤以爲自己佔據了全部資源,但這並不是”虛擬機”。

Docker 中的三個概念:鏡像,容器,倉庫

鏡像(image):Docker 鏡像就是一個只讀的模板,鏡像可以用來創建 Docker 容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那裏下載一個已經做好的鏡像來直接使用。
鏡像是一種文件結構。Dockerfile中的每條命令都會在文件系統中創建一個新的層次結構,文件系統在這些層次上構建起來,鏡像就構建於這些聯合的文件系統之上。Docker官方網站專門有一個頁面來存儲所有可用的鏡像,網址是:index.docker.io。

容器( Container):容器是從鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環境,Docker 利用容器來運行應用。鏡像是隻讀的,容器在啓動的時候創建一層可寫層作爲最上層。

倉庫:倉庫是集中存放鏡像文件的場所,倉庫註冊服務器(Registry)上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag)。目前,最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。

Docker倉庫用來保存我們的images,當我們創建了自己的image之後我們就可以使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另外一臺機器上使用這個image時候,只需要從倉庫上pull下來就可以了。Docker 倉庫的概念跟 Git 類似,註冊服務器可以理解爲 GitHub 這樣的服務。

Docker 基本操作

Docker的基本操作命令

 [root@localhost ~]# docker search mysql
//查找鏡像

Docker的基本操作命令
這樣查找相當於在https://hub.docker.com/中查找,大家儘量使用官方的鏡像

[root@localhost ~]# docker pull busybox
//拉取鏡像

Docker的基本操作命令

[root@localhost ~]# docker  save  -o busybox.tar  busybox:latest
//把鏡像導出到本地  -o:相當--output導出

Docker的基本操作命令

[root@localhost ~]# docker images
//查看本地鏡像

Docker的基本操作命令
倉庫(鏡像名稱) 鏡像標籤 鏡像id 創建時間 大小
雖然我們看到鏡像標籤爲latest(最新的),但並不表示他一定是最新的。而且鏡像如果沒有寫標籤,默認以latest爲標籤。

[root@localhost ~]# docker rmi busybox:latest
//刪除鏡像

Docker的基本操作命令

[root@localhost ~]# docker images
//查看本地鏡像這裏沒有busybox

Docker的基本操作命令

[root@localhost ~]# docker load -i busybox.tar
//根據本地鏡像包導入鏡像

Docker的基本操作命令

[root@localhost ~]# docker images
//查看本地鏡像這裏又有busybox

Docker的基本操作命令

[root@localhost ~]# docker ps
//查看容器-正在運行的

[root@localhost ~]# docker ps -a
//查看所有容器

[root@localhost ~]# docker rm c3bb3a6f73eb
//刪除容器  id或鏡像名稱(不能刪除正在運行的容器)

Docker的基本操作命令

[root@localhost ~]# docker stop test
//停止容器運行 (記得驗證一下docker  ps  -a)

Docker的基本操作命令

[root@localhost ~]# docker start test
//啓動容器 (記得驗證一下docker  ps  -a)

Docker的基本操作命令

[root@localhost ~]# docker rm test -f
//強制刪除容器 (記得驗證一下docker  ps  -a)

Docker的基本操作命令

[root@localhost ~]# docker ps -a -q | xargs docker rm -f
//強制刪除所有容器(生產環境嚴禁使用)

Docker的基本操作命令

[root@localhost ~]# docker ps -a -q | xargs docker start -f
//強制開啓所有容器(生產環境嚴禁使用)
[root@localhost ~]# docker ps -a -q | xargs docker stop -f
//強制關閉所有容器(生產環境嚴禁使用)
[root@localhost ~]# docker run -it --name test1 busybox:latest
//開啓一個容器
-i:可交互
-t:僞終端
-d:守護進程
--name:容器命名
--restart=always:始終保持運行(隨着docker開啓而運行)  
[root@localhost ~]# docker run -itd --name test2 --restart=always busybox:latest
//docker重啓後,始終保持運行(隨着docker開啓而運行)

路由轉發

[root@localhost ~]# vim /etc/sysctl.conf 
//添加路由轉發
[root@localhost ~]# sysctl  -p
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

進入容器方法

[root@localhost ~]# docker exec -it test2 /bin/sh
//進入一個容器(退出容器後還在運行)
[root@localhost ~]# docker attach test2
//也是進入一個容器(退出容器不在運行)
區別:exec進入的方式需要添加-i -t選項,後邊還需要給容器一個shell環境。
但attach就不需要這麼麻煩。
exec進入的方式:如果執行exit退出, 容器仍然保持運行。
attach:如果執行exit退出, 容器會被關閉。如果想要保持容器不被關閉,可以使用用鍵盤: Ctrl + p   Ctrl +q可以實現。
本質上去區別: exec 進入的方法,會生產新的進程。
attach不會生產新進程。

強制刪除鏡像

 [root@localhost ~]# docker rmi centos:7 -f
//強制刪除鏡像
上面是把鏡像標籤給刪了,要想徹底刪除鏡像,用下面的命令把鏡像id也刪了,docker有緩存機制,即使把這個鏡像給刪了,但是會有緩存,其他的容器依舊可以使用

Docker的基本操作邏輯

基於centos: 7鏡像運行-個容器,並且,在這個容器內部署Nginx服務。
1)下載centos:7鏡像
[root@localhost ~]# docker pull centos:7
Docker的基本操作命令

[root@localhost ~]# rz
上傳一個nginx包

Docker的基本操作命令

2)運行容器
[root@localhost ~]# docker run -itd --name webapp --restart=always centos:7
Docker的基本操作命令

3)進入容器,開始部署nginx服務

[root@localhost ~]# docker cp nginx-1.14.0.tar.gz  webapp:/root
//將nginx包導入到容器內
[root@localhost ~]# docker exec -it webapp /bin/bash
//進入容器
[root@8604fb370aab /]# ls root

Docker的基本操作命令

安裝nginx

[root@8604fb370aab /]# cd /root
[root@8604fb370aab ~]# tar zxf nginx-1.14.0.tar.gz
[root@8604fb370aab ~]# yum -y install gcc pcre pcre-devel openssl-devel zlib zlib-devel make
//安裝nginx所需依賴
[root@8604fb370aab ~]# cd nginx-1.14.0
[root@8604fb370aab nginx-1.14.0]# useradd -M -s /sbin/nologin   nginx
//創建用戶
[root@8604fb370aab nginx-1.14.0]# ./configure --prefix=/usr/local/nginx  --user=nginx --group=nginx && make && make install
//編譯安裝
 [root@8604fb370aab nginx-1.14.0]# ln -s /usr/local/nginx/sbin/
nginx  /usr/local/sbin/
//鏈接命令目錄
[root@8604fb370aab nginx-1.14.0]# nginx
//啓動nginx
[root@8604fb370aab nginx-1.14.0]# cd /usr/local/nginx/html/
[root@8604fb370aab html]# echo This is a testweb in container > index.html
//創建一個測試頁面
[root@8604fb370aab html]# curl 127.0.0.1
//訪問網頁

Docker的基本操作命令

[root@8604fb370aab /]# yum provides ip
//查看哪一個組件支持這條命令
[root@8604fb370aab /]# yum -y install net-tools
//安裝支持這條命令的
[root@8604fb370aab /]# ifconfig
//查看ip

Docker的基本操作命令

宿主機查看網頁
[root@localhost ~]# curl 172.17.0.4
Docker的基本操作命令

[root@localhost ~]# docker commit webapp myweb:xgp
//把容器製作成鏡像 (會返回一個哈希值,代表的是鏡像的id號)增加可移植性

Docker的基本操作命令

[root@localhost ~]# docker images
//查看鏡像

Docker的基本操作命令

[root@localhost ~]# docker run -itd --name webapp-2 myweb:xgp
[root@localhost ~]# docker exec -it webapp-2 /bin/bash
[root@e8d15e9aef29 /]# nginx 
[root@e8d15e9aef29 /]# curl 127.0.0.1
This is a testweb in container
[root@e8d15e9aef29 /]# ifconfig

Docker的基本操作命令
查看網頁
[root@localhost ~]# curl 172.17.0.5

Docker的基本操作命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章