Docker 基礎學習
一、Docker簡介與背景學習
1.1 簡介
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器或Windows 機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
一個完整的Docker有以下幾個部分組成:
(1)DockerClient客戶端
(2)Docker Daemon守護進程
(3)Docker Image鏡像
(4)DockerContainer容器
1.2 Docker的應用場景
(1)Web 應用的自動化打包和發佈。
(2)自動化測試和持續集成、發佈。
(3)在服務型環境中部署和調整數據庫或其他的後臺應用。
(4)從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。
1.3 優點
(1)快速,一致地交付您的應用程序
Docker 允許開發人員使用您提供的應用程序或服務的本地容器在標準化環境中工作,從而簡化了開發的生命週期。
容器非常適合持續集成和持續交付(CI / CD)工作流程,請考慮以下示例方案:
您的開發人員在本地編寫代碼,並使用 Docker 容器與同事共享他們的工作。
他們使用 Docker 將其應用程序推送到測試環境中,並執行自動或手動測試。
當開發人員發現錯誤時,他們可以在開發環境中對其進行修復,然後將其重新部署到測試環境中,以進行測試和驗證。
測試完成後,將修補程序推送給生產環境,就像將更新的鏡像推送到生產環境一樣簡單。
(2)響應式部署和擴展
Docker 是基於容器的平臺,允許高度可移植的工作負載。Docker 容器可以在開發人員的本機上,數據中心的物理或虛擬機上,雲服務上或混合環境中運行。
Docker 的可移植性和輕量級的特性,還可以使您輕鬆地完成動態管理的工作負擔,並根據業務需求指示,實時擴展或拆除應用程序和服務。
(3)在同一硬件上運行更多工作負載
Docker 輕巧快速。它爲基於虛擬機管理程序的虛擬機提供了可行、經濟、高效的替代方案,因此您可以利用更多的計算能力來實現業務目標。Docker 非常適合於高密度環境以及中小型部署,而您可以用更少的資源做更多的事情。
1.4 Docker 架構
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。Docker 容器通過 Docker 鏡像來創建。容器與鏡像的關係類似於面向對象編程中的對象與類。
Docker採用 C/S架構 Docker daemon 作爲服務端接受來自客戶的請求,並處理這些請求(創建、運行、分發容器)。 客戶端和服務端既可以運行在一個機器上,也可通過 socket 或者RESTful API 來進行通信。
Docker daemon 一般在宿主主機後臺運行,等待接收來自客戶端的消息。 Docker 客戶端則爲用戶提供一系列可執行命令,用戶用這些命令實現跟 Docker daemon 交互。
二、Docker 安裝與基本配置
2.1 安裝環境
CentOS7.5或者以上版本:
鏈接:https://pan.baidu.com/s/19cF7noNwUKQoda8v1hoVtQ
提取碼:eb8p
Docker安裝版本:19.03.5
2.2 安裝Docker(建議使用CentOS7.5以上版本安裝)
# yum -y update
2.2.2 卸載舊版本的docker,防止重複安裝
# yum -y remove docker docker-common docker-selinux docker-engine
2.2.3 設置Yum源:(本文以Yum安裝爲例子進行安裝)
安裝 yum-utils , 使用 yum-config-manager 工具設置Yum源, 後面兩個是 devicemapper驅動依賴
# yum install -y yum-utils device-mapper-persistent-data lvm2
執行以下命令,添加docker的yum源
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
這裏可能會報錯,原因是因爲國內網絡可能訪問不到docker的官方鏡像源的原因,遇到這個問題直接換用國內的鏡像源就可以解決問題(如下):
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
成功如下圖所示:
2.2.4 查看docker版本,選擇合適版本安裝
# yum list docker-ce --showduplicates | sort -r
2.2.5 配置鏡像加速器(必須要配置,否則會出現訪問鏡像並不穩定 ,而且下載緩慢等問題)
(1)註冊阿里雲賬號 ,登陸該網址自行註冊
https://www.aliyun.com/?utm_content=se_1000301881
(2)登錄並跳轉到容器鏡像服務:
執行命令:
# mkdir -p /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]
> }
> EOF
配置成功入下圖所示:
導入鏡像源:
# systemctl daemon-reload
2.2.6 安裝docker (此處我們安裝社區版 docker-ce)
# yum install -y docker-ce(這樣安裝會默認安裝最新版的docker)
也可以選擇合適版本安裝(如下):
# yum install -y docker-ce-18.03.1.ce
2.2.7 啓動並加入開機啓動
啓動:
# systemctl start docker
開機啓動:
# systemctl enable docker
查看安裝版本:
# docker version
2.2.8 檢驗是否安裝成功
# docker run hello-world
若安裝成功如下圖所示:
三、Docker 的基本使用
3.1 查詢docker,如下:
# docker search tomcat8
3.2 下載docker源
# docker pull touchvie/tomcat8-jdk8
3.3 查詢已下載的docker源
# docker images
3.4 運行鏡像
# docker run -d -p 本機端口:容器端口 鏡像名稱
-d:鏡像在後臺運行
-p指定本機與容器內部交互的端口 -P是隨機開放一個端口與容器內部ID映射(這裏不做演示)
例如,下面運行tomcat環境,就是將鏡像運行在後臺,並且將本機的80端口跟容器的8080端口做映射:
# docker run -d -p 80:8080 touchvie/tomcat8-jdk8
3.5 查看正在運行的鏡像
# docker ps
3.6 進入到容器內部
# docker exec -it 容器ID bash (下面是我的容器ID 每個容器ID是不一樣的 使用docker ps 查看一下)
# docker exec -it d7762ecd7107 bash
退出:
# exit
3.7 文件傳輸
將容器的文件複製到本地:
# docker cp 8e0d5303979943965a74ed07cbb656e26572c0b21d95bb924d6066c8887d8aee:/usr/local/tomcat/logs/catalina.2020-01-06.log /usr/local/Docker/catalina.log
將本地文件上傳到容器:
# docker cp /root/PGYLPIM.war 8e0d5303979943965a74ed07cbb656e26572c0b21d95bb924d6066c8887d8aee:/usr/local/tomcat/webapps/PGYLPIM.war
3.8 停止容器
docker stop 容器ID
# docker stop 8e0d53039799
3.9 查看所有狀態的容器(包括已經被停止調的容器)
# docker ps -a
3.10 刪除容器的步驟
3.10.1 查看所有狀態的容器
3.10.2 刪除容器的運行記錄
3.10.3 刪除容器
四、構建鏡像併發布自己的項目(Dockerfile方式)
4.1 在/usr/local下創建Docker文件夾(隨便的一個空的文件夾)
4.2 上傳一個war包到/usr/local/Docker文件夾下
4.3 創建Dockerfile文件,並寫入一下內容
# vim Dockerfile
4.4 構建鏡像(還是在Docker文件夾 也就是Dockerfile所在文件夾)
docker build -t 鏡像名稱(鏡像名稱必須爲小寫):鏡像版本 .
注意後面的點要加上,這個代表Dockerfile的所在目錄
# docker build -t docker-test:latest .
4.5 運行鏡像
五、構建鏡像併發布自己的項目(commit方式)
5.1 運行一個容器
5.2 使用運行的容器創建一個鏡像
5.3 運行這個鏡像
5.4 將自己的項目war複製到新創建的容器webapps目錄下:
5.5 訪問服務器鏈接
六、修改時區
Tomcat的時區出現紊亂:
解決方法:
6.1 修改容器的運行時區
6.2 使用commit創建自己的容器
# docker commit e6f8a8a138bb tomcat8-timezone
6.3 運行新創建的鏡像
七、創建容器的時候報錯WARNING: IPv4 forwarding is disabled. Networking will not work
解決辦法:
7.1 編輯/usr/lib/sysctl.d/00-system.conf,添加如下代碼:
net.ipv4.ip_forward=1
7.2 重啓網卡
# systemctl restart network
7.3 刪除已創建錯誤的容器,並創建新的容器
八、在docker hub上註冊賬號,併發布自己創建的鏡像源
8.1 先在docker hub官網註冊自己的賬號
8.2 使用docker login登錄自己的賬號
# docker login
8.3 使用docker push 發佈自己的鏡像
# docker push qhr520/tomcat8-timezone
8.4 查看自己上傳的鏡像
# docker search tomcat8-timezone