Docker实战(精简版本)
一、Docker 簡介:
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
什么是Docker?
Docker特點:
- (1)上手快
- (2)職責的邏輯分類
- (3)快速高效的開發生命周期
- (4)鼓勵使用面向服務的架構
Docker組件:
Docker客戶端和服務器
Docker是一個客戶端-服務器(C/S)架構程序。Docker客戶端只需要向Docker服務器或者守護進程發出請求,服務器或者守護進程將完成所有工作并返回結果。Docker提供了一個命令行工具Docker以及一整套RESTful API。你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。
二、Docker安裝與啟動
在VMware Workstation中安裝CentOS7
使用ip addr命令查看本地IP:
ip addr使用yum命令在線安裝Docker:
yum install docker安裝后查看Docker版本:
docker -v啟動與停止Docker
前提:docker是一個C/S架構,操作docker必須先啟動docker 服務端
systemctl命令是系統服務管理器指令,它是 service 和 chkconfig 兩個命令組合。
- 啟動docker:
- 停止docker:
- 重啟docker:
- 查看docker狀態:
- 開機啟動:
三、 Docker鏡像操作
列出docker下的所有鏡像:
docker images- REPOSITORY:鏡像所在的倉庫名稱
- TAG:鏡像標簽
- IMAGE ID:鏡像ID
- CREATED:鏡像的創建日期(不是獲取該鏡像的日期)
- SIZE:鏡像大小
- 這些鏡像都是存儲在Docker宿主機的/var/lib/docker目錄下
搜索鏡像:
- NAME:倉庫名稱
- DESCRIPTION:鏡像描述
- STARS:用戶評價,反應一個鏡像的受歡迎程度
- OFFICIAL:是否官方
- AUTOMATED:自動構建,表示該鏡像由Docker Hub自動構建流程創建的
使用命令拉取鏡像:
docker pull centos:7查看所有鏡像:
docker images添加ustc的鏡像
ustc是老牌的linux鏡像服務提供者了,還在遙遠的ubuntu 5.04版本的時候就在用。ustc的docker鏡像加速器速度很快。ustc docker mirror的優勢之一就是不需要注冊,是真正的公共服務。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
步驟:
- (1)編輯該文件:vi /etc/docker/daemon.json //
如果該文件不存在就手動創建;說明:在centos7.x下,通過vi。 - (2)在該文件中輸入如下內容:
(3)注意:一定要重啟docker服務,如果重啟docker后無法加速,可以重新啟動OS
然后通過docker pull命令下載鏡像:速度杠杠的。
- 刪除指定鏡像
查看zookeeper鏡像是否已經刪除:
刪除所有鏡像
操作原理:先查詢出所有鏡像ID ,在進行刪除
列出所有鏡像ID
docker images -q四、 Docker容器操作
查看容器
查看正在運行容器:
docker ps查看所有的容器(啟動過的歷史容器):
docker ps -a查看最后一次運行的容器:
docker ps –l查看停止的容器:
docker ps -f status=exited創建與啟動容器
創建容器常用的參數說明:
創建容器命令:
docker run-
-i:表示運行容器
-
-t:表示容器啟動后會進入其命令行。加入這兩個參數后,容器創建就能登錄進去。即分配一個偽終端。
-
–name :為創建的容器命名。
-
-v:表示目錄映射關系(前者是宿主機目錄,后者是映射到宿主機上的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然后共享到容器上。
-
-d:在run后面加上-d參數,則會創建一個守護式容器在后臺運行(這樣創建容器后不會自動登錄容器,如果只加-i -t兩個參數,創建后就會自動進去容器)。
-
-p:表示端口映射,前者是宿主機端口,后者是容器內的映射端口。可以使用多個-p做多個端口映射
交互式容器
原理:創建容器并進入容器,退出容器,服務停止。
創建一個交互式容器并取名為mycentos
注:–name=mycentos指的是容器名稱 centos:7 鏡像名稱 執行命令完成后,就已經進入centos7容器了,和宿主機centos7一樣,只不過一個是宿主機,另一個是容器而已。
復制會話,這時我們通過ps命令查看,發現可以看到啟動的容器,狀態為啟動狀態
執行命令:docker ps
使用exit命令 退出當前容器
然后用ps -a 命令查看發現該容器也隨之停止:
守護式容器
前提:創建容器,不進行容器,后臺啟動,只要不關閉容器,容器就一直處于啟動狀態。
創建一個守護式容器:如果對于一個需要長期運行的容器來說,我們可以創建一個守護式容器。命令如下(容器名稱不能重復):
查看容器是否啟動:
登錄守護式容器方式:
(exit退出時,容器不會停止)
退出容器:
查看狀態:
從圖中可以看出,exit退出容器,mycentos1容器,還是可以正常處于啟動狀態。
停止與啟動容器
停止正在運行的容器:
docker stop $CONTAINER_NAME/ID
執行命令容器停止后,查看容器啟動狀態:
啟動已運行過的容器:
前提:先查看那些容器啟動過
查看啟動過的容器:
docker ps -a
在執行啟動以前啟動過的容器命令:
文件拷貝
前提:容器服務必須啟動才可以進行文件拷貝
如果我們需要將文件拷貝到容器內可以使用cp命令
docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄案例演示:
在宿主機上創建/testfile文件:
執行命令:
把宿主機testfile文件復制到mycentos1 /usr/loca目錄下:
執行命令:
登錄容器查看文件在/usr/lcoal目錄下面是否存在:
登錄mycentos1容器:
也可以將文件從容器內拷貝出來
docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
案例演示:
先把宿主機上的testfile文件刪除,在從mycentos1容器中將mycentos1 /usr/lcoal 目錄下面的testfile文件復制到宿主機上。
第一步:刪除宿主機上的testfile文件:
第二步:將mycentos1容器中將mycentos1 /usr/lcoal 目錄下面的testfile文件復制到宿主機上。
執行命令:
格式:docker cp 容器名:目錄下的文件/目錄 文件名/目錄名
注:后臺的文件名如果不一致,代表重命名
目錄掛載
我們可以在創建容器的時候,將宿主機的目錄與容器內的目錄進行映射,這樣我們就可以通過修改宿主機某個目錄的文件從而去影響容器。
創建容器 添加-v參數 后邊為 宿主機目錄:容器目錄
格式1:docker run -di -v 宿主機目錄:容器目錄 –name=新的容器名 鏡像名稱:tag
格式2:docker run -di –name=新的容器名 -v 宿主機目錄:容器目錄 鏡像名稱:tag
案例演示01:
1、在宿主機/usr/local/myhtml創建目錄:
2、創建一個新的容器與宿主機進行目錄掛在,也就是目錄共享,改變宿主機掛在目錄下的文件,容器中的文件隨之改變。
執行命令:
格式:docker run -di --name=新的容器名 -v 宿主機目錄:容器目錄 鏡像名稱:tag
查看剛啟動的容器:
登錄容器,查看在/usr/lcoal容器目錄下面是否存在nh目錄:
在宿主機的/usr/local/myhtml目錄下,添加index.html文件:
登錄容器,查看在,mycentos2容器的/usr/local/nh/目錄下面是否存在index.html
案例演示02(重點):
上傳cas文件夾到宿主機掛載目錄/usr/local/myhtml下面,登錄容器,查看文件?
先查看運行的容器,登錄容器,查看:
注:如果你共享的是多級的目錄,可能會出現權限不足的提示。
解決方案:這是因為CentOS7中的安全模塊selinux把權限禁掉了,我們需要添加參數 --privileged=true 來解決掛載的目錄沒有權限的問題
查看容器是否啟動:
登錄容器,查看文件是否有權限:
可以正常查看文件!!!
4.6查看容器IP地址
我們可以通過以下命令查看容器運行的各種數據
注:此命令需要在宿主機上執行,容器內部無效。
也可以直接執行下面的命令直接輸出IP地址
4.7刪除容器
刪除指定的容器:
注意,只能刪除停止的容器
效果圖:
刪除所有容器:
五、部署應用
5.1 MySQL部署
5.1.1拉取MySQL鏡像
查看鏡像
5.1.2創建MySQL容器
-p 代表端口映射,格式為 宿主機映射端口:容器運行端口
-e 代表添加環境變量 MYSQL_ROOT_PASSWORD是root用戶的登陸密碼
5.1.3進入MySQL容器,登陸MySQL
進入mysql容器
在容器中,登陸mysql
在容器中,退出mysql,然后從容器中退出到宿主機:
查看,正在運行的容器:
5.1.4遠程登陸MySQL
(1)我們在我們本機的電腦上去連接虛擬機Centos中的Docker容器,這里192.168.45.13是虛擬機操作系統的IP
(2)在本地客戶端執行建庫腳本
執行“資源/建庫語句/pinyougoudb.sql”
(1)我們在我們本機的電腦上去連接虛擬機Centos中的Docker容器,這里192.168.45.142是虛擬機操作系統的IP
(2)在本地客戶端,創建數據庫病,執行建庫腳本
執行“資源/建庫語句/pinyougoudb.sql”
5.1.5查看容器IP地址
我們可以通過以下命令查看容器運行的各種數據
docker inspect pinyougou_mysql
運行效果如下:
我們可以看到我們的數據庫服務器的IP是172.17.0.3
5.2 tomcat部署
5.2.1拉取tomcat鏡像
docker pull tomcat:7-jre7
5.2.2創建tomcat容器
創建容器用于部署單點登錄系統(CAS) -p表示地址映射:
docker run -di --name=pinyougou_tomcat -v /usr/local/myhtml/:/usr/local/tomcat/webapps --privileged=true -p 9000:8080 tomcat:7-jre7
格式:
–privileged=true :權限賦予
9000:8080:端口映射
7-jre7 指:tag
查看tomcat容器啟動狀態:docker ps
瀏覽器驗證:
http://192.168.45.142:9000/cas/login
5.2.3部署web應用
(1)修改cas系統的配置文件,修改數據庫連接的url
測試:地址欄輸入:http://192.168.45.142:9000/cas/login
tomcat和mysql聯通:
5.3 Nginx部署
5.3.1拉取Nginx鏡像
docker pull nginx
5.3.2創建Nginx容器
docker run -di --name=pinyougou_nginx -p 80:80 nginx/bin/bash
5.3.3測試Nginx
瀏覽器地址欄輸入: http://192.168.45.142
5.3.4配置反向代
官方的nginx鏡像,nginx配置文件nginx.conf 在/etc/nginx/目錄下。
在容器內編輯配置文件不方便,我們可以先將配置文件從容器內拷貝到宿主機,編輯修改后再拷貝回去。
(1)從容器拷貝配置文件到宿主機
查看容器中是否有這個文件:
(2)編輯nginx.conf,添加反向代理配置
前提:查看tomcat端口:
(3)將修改后的配置文件拷貝到容器
docker cp nginx.conf pinyougou_nginx:/etc/nginx/nginx.conf
(4)重新啟動容器
(5)設置域名指向
192.168.45.142 passport.pinyougou.com
瀏覽器測試:http:// passport.pinyougou.com/cas/login
5.4 Redis部署
5.4.1拉取Redis鏡像
5.4.2創建Redis容器
docker run -di --name=pinyougou_redis -p 6379:6379 redis5.4.3客戶端測試
在你的本地電腦命令提示符下,用window版本redis測試
六、備份與遷移
6.1容器保存為鏡像
我們可以通過以下命令將容器保存為鏡像
- pinyougou_nginx是容器名稱
- mynginx是新的鏡像名稱
此鏡像的內容就是你當前容器的內容,接下來你可以用此鏡像再次運行新的容器
6.2鏡像備份
-o 輸出到的文件
執行后,運行ls命令即可看到打成的tar包
6.3鏡像恢復與遷移
首先我們先刪除掉mynginx鏡像
然后執行此命令進行恢復
-i 輸入的文件
執行后再次查看鏡像,可以看到鏡像已經恢復
總結
以上是生活随笔為你收集整理的Docker实战(精简版本)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis-Plus_分页查询
- 下一篇: 用Jenkins自动化搭建测试环境_入门