Docker入門
Docker
一.什麼是Docker?
百度百科:Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的 Linux或Windows作業系統的機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。
docker官網://www.docker.com
二.為什麼說Docker是容器化技術?
- 容器化技術的特點:
- 標準化:每個容器都是標準化、可移植的,因為他們直接運行在宿主機的內核上
- 隔離:容器互相隔離,互不干擾,獨立運行
- 高性能:容器性能開銷極低,可以實現分鐘級甚至秒級的部署和啟動
- 版本:CE(Community Edition:社區版)和 EE(Enterprise Edition:企業版)
三.Docker 理念
Build,Ship and Run Any App,Anywhere,在任何地方構建、 發布並運行任何應用程式(一次封裝,到處運行)
四.Docker 架構
docker 由三部分組成:
- Client 客戶端
- docker 主機
- Registry 鏡像倉庫伺服器
docker daemon:
- docker 安裝後,會以後台運行、守護進程的形式存在
- images 鏡像: 鏡像可以用來創建 docker 容器,一個鏡像可以創建很多容器
- containers: 鏡像和容器的關係類似面向對象設計中的類和對象, 鏡像是容器的模板,容器是基於鏡像創建出來的。 容器可以被創建、啟動、停止、刪除等等。
Registry:
- 鏡像註冊伺服器 //hub.docker.com 一個 docker Registry(倉庫註冊伺服器) 中可以包含多個 Repository(倉庫); 每個倉庫可以包含多個標籤/版本(Tag);每個標籤對應一個鏡像。 倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式,公開倉庫就是 docker 官方倉庫,私有倉庫是自己搭建的 docker 私服
Client:
- docker 終端 安裝好 docker 中,同時包含了 docker 客戶端,客戶端負責執行 docker 命令, 發送給 docker 主機中的 docker 守護進程,例如:從倉庫下載鏡像,通過鏡像創 建容器等等
五.CentOS7 安裝 docker
(1)安裝需要的軟體包:
yum install -y yum-utils device-mapper-persistent-data lvm2
(2)設置 docker 下載鏡像(推薦用阿里雲,一個字:快)
yum-config-manager --add-repo //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(3)更新 yum 軟體包索引
yum makecache fas
(4)安裝 DOCKER CE (社區版)
yum install -y docker-ce docker-ce-cli containerd.io
注意第一次安裝可能會出現錯誤,重新執行一下安裝的命令就好了
(5)啟動 docker
systemctl start docker # 啟動docker
systemctl enable docker # 設置開機自啟動
(6)查看版本
docker version
(7)docker 卸載,一次執行下面的三行命令
systemctl stop docker
yum remove -y docker-ce
rm -rf /var/lib/docker
六.配置阿里雲鏡像服務加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["//ny5dsu6o.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
七.Docker 常用命令
(1).Docker 基本命令
-
版本資訊:
docker version
-
詳細資訊:
docker info
-
幫助文檔:
docker --help 列出所有的docker命令
(2)Docker服務相關命令
-
啟動Docker服務:
systemctl start docker
-
關閉Docker服務:
systemctl stop docker
-
查看Docker狀態:
systemctl status docker
-
重啟Docker服務:
systemctl restart docker
-
設置Docker服務跟隨虛擬機開機自啟:
systemctl enable docker
-
取消Docker服務跟隨虛擬機開機自啟:
systemctl disable docker
(3)Docker 鏡像命令(docker官方鏡像網站)
-
查看所有的本機鏡像:
docker images [-q|--no-trunc]
,-q:查看鏡像ID –no-trunc:查看完成的鏡像ID
-
查找鏡像:
docker search 鏡像名稱
-
下載鏡像:
docker pull 鏡像名稱:版本號
,不加版本號默認是latest最新版
-
刪除鏡像:
docker rmi [-f] 鏡像名|鏡像ID:版本號
,刪除指定版本鏡像,版本為latest版本號可以省略,[-f]:強制刪除
-
批量刪除:
docker rmi [-f] mysql tomcat redis
,除多個鏡像,使用空格間隔不同的鏡像名稱
我就不演示了
- 刪除全部鏡像:
docker rmi -f $(docker images -q)
我就不演示了
- 查看鏡像詳情:
docker inspect 鏡像名|鏡像ID
(4)容器操作
-
列出所有正在運行的容器,不包含已停止的容器(容器怎麼運行可以看後面):
docker ps
-
列出當前所有已經創建的容器:
docker ps [-aq]
-
創建容器:
docker create 鏡像名稱
# 根據鏡像名創建一個容器
docker create --name tomcat1 鏡像名稱
# 根據鏡像創建名為 tomcat1 的容器
docker create 鏡像 id
# 根據鏡像 id 新建一個容器
- 啟動、停止、重啟容器:
docker start 容器名|容器ID
docker stop 容器名|容器ID
docker restart 容器名|容器ID
docker kill 容器名|容器ID
根據容器名強制停止一個容器
-
創建並啟動容器:
docker run --name tomcat2 tomcat
當本地鏡像存在時,相當於 docker create + docker start
當本地鏡像不存在時,相當於 docker pull + docker create + docker start
-
刪除容器:
docker rm 容器名稱
#刪除未啟動的容器
docker rm -f 容器名稱
#強制刪除已啟動的容器
docker rm -f $(docker ps -qa)
#刪除所有容器,包括正在運行的容器
我就不演示了
docker ps -a -q | xargs docker rm
#刪除所有容器,不包括正在運行的容器
我就不演示了
-
互動式啟動:
docker run -it --name qiu 鏡像名|鏡像ID
-
進入容器:
docker exec -it 容器ID|容器名稱 /bin/bash
-
退出容器:
ctrl + p + q
# 不停止退出容器
exit
#容器停止退出,此時執行
- 啟動守護式容器:
docker run -d --name qiu 鏡像名|鏡像ID
推薦直接使用:docker run -itd --name qiu 鏡像名|鏡像ID
八.數據卷
(1)什麼是數據卷:數據卷是存在於一個或多個容器中的特定文件或文件夾,這個文件或文件夾以獨立於 docker 文件 系統的形式存在於宿主機中
(2)解決了什麼問題?例如:MySQL 容器損壞無法啟動,需要刪除容器重新創建,那麼資料庫數據將會丟失
(3)安裝centos:7鏡像:docker pull centos:7
(4)做一個例子
將宿主機根目錄中的 qiu 掛載到容器根目錄中的 qiu
(5)掛載數據卷
docker run -itd -v /qiu:/qiu --name myMysql mysql
-v:掛載數據卷格式:
/宿主機目錄(文件):/容器內目錄(文件)
目錄必須是絕對路徑
如果目錄不存在,
則自動創建
可以掛載多個數據卷
(6)查看數據卷是否掛載成功
docker inspect myMysql
(7)數據共享
首先進入容器,在容器的數據卷掛載目錄中創建文件並寫入內容
然後退出容器,查看宿主機掛載目錄,可以看到同步更新的文件
(8)數據的同步
首先停止容器
然後在宿主機修改共享數據 接下來啟動前面的容器,
查看共享數據文件,發現數據在容器中同步
(9)數據的持久化
首先刪除容器
然後在宿主機修改共享數據
接著重新創建容器並掛載數據卷
發現數據在容器中恢復
(10)一個容器掛載多個數據卷,兩個容器掛載同一個數據卷
docker run -it -v /dataVolumeHost31:/dataVolumeContainer31 -v /dataVolumeHost32:/dataVolumeContainer32 --name centos3 centos:7
docker run -it -v /dataVolumeHost:/dataVolumeContainer4 --name centos4 centos:7
docker run -it -v /dataVolumeHost:/dataVolumeContainer5 --name centos5 centos:7
九.應用部署
(1)部署 tomcat
創建並運行tomcat容器
docker run -d -p 8080:8080 -v /docker/tomcat/webapps:/usr/local/tomcat/webapps -v /docker/tomcat/logs:/usr/local/tomcat/logs --name qiu_tomcat tomcat:8.5
準備一個index.html頁面,使用 ftp 工具上到 /docker/tomcat/webapps/qbb 中
瀏覽器訪問一下://192.168.137.72:8080/qbb/
也可以查看一下tomcat的日誌:
docker logs -tf --tail 20 atguigu_tomcat
(2)部署MySQL
docker run -d -p 3306:3306 -v /docker/mysql/conf:/etc/mysql/conf.d -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name atguigu_mysql mysql:5.7
十.docker 容器化技術和虛擬機技術
十一.鏡像製作
(1)方式一:通過容器製作鏡像
①生成鏡像
docker commit 容器名 鏡像名稱:版本號
②壓縮鏡像
docker save -o 壓縮文件名稱 鏡像名稱:版本號
③還原鏡像
docker load -i 壓縮文件名稱