Docker
解決了:
應用部署的環境問題
依賴兼容問題
作業系統環境差異
如何解決:
- Docker允許開發中將應用、依賴、函式庫、配置一起打包,形成可移植鏡像,
- Docker應用運行在容器中,使用沙箱機制,相互隔離
- Docker鏡像中包含完整運行環境,包括系統函式庫,僅依賴系統的Linux內核,因此可以在任意Linux作業系統上運行
1.優勢
- 可以將程式及其依賴、運行環境一起打包為一個鏡像,可以遷移到任意Linux作業系統
- 運行時利用沙箱機制形成隔離容器,各個應用互不干擾
- 啟動、移除都可以通過一行命令完成,方便快捷
2.架構
Docker是一個CS架構的程式,由兩部分組成
服務端:Docker守護行程,負責處理Docker指令,管理鏡像、容器等,
客戶端:通過命令或RestApi向Docker服務端發送指令,

Docker中有幾個重要的概念:
鏡像(Image):Docker將應用程式及其所需的依賴、函式庫、環境、配置等檔案打包在一起成的檔案包,稱為鏡像,這個檔案包是只讀的
容器(Container):鏡像中的應用程式運行后形成的行程就是容器,只是Docker會給容器行程做隔離,對外不可見,因此一個鏡像可以啟動多次,形成多個容器行程,
服務端:接收命令或遠程請求,操作鏡像或容器
客戶端:發送命令或者請求到Docker服務端
Docker Hub:
一個鏡像托管的服務器,類似的還有阿 里云鏡像服務,統稱為DockerRegistry
3.安裝
見centos7安裝docker筆記
4.基本命令
鏡像命令
docker pull redis 拉取dockerHub的鏡像
docker images 查看拉取到的鏡像
docker save -o redis.tar redis:latest 保存鏡像為tar檔案
docker rmi redis:latest 洗掉鏡像檔案
docker load -i redis.tar 加載鏡像

容器命令

舉例:運行nginx容器
docker run --name mynginx -p 80:80 -d nginx
docker run :創建并運行一個容器
--name : 給容器起一個名字,比如叫做mn
-p :將宿主機埠與容器埠映射,冒號左側是宿主機埠,右側是容器埠
-d:后臺運行容器
nginx:鏡像名稱,例如nginx-gyb
舉例:運行redis,并持久化資料
#運行redis
docker run --name myRedis -p 6379:6379 -d redis redis-server --appendonly yes
#進入redis容器中
docker exec -it myRedis bash
進入容器后啟動redis客戶端
redis-cli
設定值
set num 1
5.資料卷
資料卷(volume)是一個虛擬目錄,指向宿主機檔案系統中的某個目錄,
?將容器與資料分離,解耦合,方便操作容器內資料,保證資料安全

基本操作
docker volume [COMMAND]
docker volume命令是資料卷操作,根據命令后跟隨的command來確定下一步的操作:
- create 創建一個volume
- inspect 顯示一個或多個volume的資訊
- ls 列出所有的volume
- prune 洗掉未使用的volume
- rm 洗掉一個或多個指定的volume
舉例
創建一個名為html的資料卷
docker volume create html
展示所有資料卷
docker volume ls
查看資料卷詳細資訊卷
docker volume inspect html
掛載資料卷
在創建容器時,可以通過 -v 引數來掛載一個資料卷到某個容器目錄

掛載目錄
運行mysql,并掛載data和conf目錄
- 將mysql鏡像加載
- 運行鏡像,并配置密碼,埠,掛載目錄
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=gyb20010204 \
-p 3306:3306 \
-v /root/temp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /root/temp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25
-e :傳遞環境變數
-p:映射埠
-v:掛載(外部服務器地址:鏡像地址)
-d:在后臺運行容器
掛載區別

6.自定義鏡像
1.鏡像結構
?BaseImage層:包含基本的系統函式庫、環境變數、檔案系統
?Entrypoint:入口,是鏡像中應用啟動的命令
?其它:在BaseImage基礎上添加依賴、安裝程式、完成整個應用的安裝和配置

2.Dockerfile
| 指令 | 說明 | 示例 |
|---|---|---|
| FROM | 指定基礎鏡像 | FROM centos:6 |
| ENV | 設定環境變數,可在后面指令使用 | ENV key value |
| COPY | 拷貝本地檔案到鏡像的指定目錄 | COPY ./mysql-5.7.rpm /tmp |
| RUN | 執行Linux的shell命令,一般是安裝程序的命令 | RUN yum install gcc |
| EXPOSE | 指定容器運行時監聽的埠,是給鏡像使用者看的 | EXPOSE 8080 |
| ENTRYPOINT | 鏡像中應用的啟動命令,容器運行時呼叫 | ENTRYPOINT java -jar xx.jar |
3.創建舉例
3.1.基于Ubuntu鏡像構建一個新鏡像,運行一個java專案
-
新建root/temp/docker-demo檔案夾
-
拷貝資料中的docker-demo.jar檔案到docker-demo這個目錄
-
jdk8.tar.gz檔案到docker-demo這個目錄
-
Dockerfile到docker-demo這個目錄
# 指定基礎鏡像 FROM ubuntu:16.04 # 配置環境變數,JDK的安裝目錄 ENV JAVA_DIR=/usr/local # 拷貝jdk和java專案的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo.jar /root/temp/app.jar # 安裝JDK RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8 # 配置環境變數 ENV JAVA_HOME=$JAVA_DIR/java8 ENV PATH=$PATH:$JAVA_HOME/bin # 暴露埠 EXPOSE 8090 # 入口,java專案的啟動命令 ENTRYPOINT java -jar /root/temp/app.jar -
運行命令
#-t 代表--tag指定名稱和版本, 最后的點(.)代表DockerFile的所在目錄--當前目錄
docker build -t javaweb:1.0 .
-
開放8090埠
-
訪問http://116.62.32.68:8090/hello/count

也可以將基礎的命令替換為 基礎鏡像:java:8-alpine
# 指定基礎鏡像
FROM java:8-alpine
COPY ./docker-demo.jar /root/temp/app.jar
# 暴露埠
EXPOSE 8090
# 入口,java專案的啟動命令
ENTRYPOINT java -jar /root/temp/app.jar
7. Docker Compose
- Docker Compose可以基于Compose檔案幫我們快速的部署分布式應用,而無需手動一個個創建和運行容器!
- Compose檔案是一個文本檔案,通過指令定義集群中的每個容器如何運行,
3.2運行cloud-domo微服務
1.將各微服務的nacos地址和mysql的ip地址換為服務名,如nacos和mysql

2.將服務打包為app.jar
3.撰寫各微服務的Dcokerfile檔案放在檔案夾中
4.撰寫整體的DockerCompose.yaml檔案(nacos的jvm分配調低)
5.將準備好的檔案和jar包(cloud-domo檔案)傳入linux中
6.進入到docker-compose.yml所在檔案夾
7.輸入命令:
docker-compose up -d
此時會因為nacos啟動慢導致其他微服務啟動失敗,因此需要重新啟動其他微服務
docker-compose restart userservice orderservice mysql gateway
8.最后可以訪問網關埠號進行資源路徑的訪問

7. Docker鏡像倉庫
帶有圖形化界面版本
1.創建docker-compose.yml檔案內容如下:
version: '3.0'
services:
registry:
image: registry
volumes:
- ./registry-data:/var/lib/registry
ui:
image: joxit/docker-registry-ui:static
ports:
- 8080:80
environment:
- REGISTRY_TITLE=堅球私有倉庫
- REGISTRY_URL=http://registry:5000
depends_on:
- registry
2.配置docker信任地址,并重新加載
# 打開要修改的檔案
vi /etc/docker/daemon.json
# 添加內容:
"insecure-registries":["116.62.32.68:8080"]
# 重加載
systemctl daemon-reload
# 重啟docker
systemctl restart docker

3.重命名鏡像(必須)
docker tag nginx:latest 116.62.32.68/nginx:1.0
4.推送鏡像到倉庫
docker push 116.62.32.68:8080/nginx:1.0
5.拉取
docker pull 192.168.150.101:8080/nginx:1.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/523847.html
標籤:其他
上一篇:【YOLOv5】手把手教你使用LabVIEW ONNX Runtime部署 TensorRT加速,實作YOLOv5實時物體識別(含原始碼)
