文章目錄
- Docker簡介
- Docker為什么出現?
- 安裝Docker
- 阿里云鏡像加速
- 找到鏡像加速器
- 配置使用
- 回顧HelloWorld流程
- 底層原理
- Docker的常用命令
- 部署專案
- 1、安裝docker
- 2、安裝Docker-Compose
- 3、撰寫相關組態檔
- Docker-Compose.yml
- 撰寫Dockerfile
- 撰寫Nginx的配置
- 4、打包
- 前端
- 后端
Docker簡介
Docker為什么出現?
一款產品: 開發–上線 兩套環境!應用環境,應用配置!
開發 — 運維, 問題:我在我的電腦上可以運行!版本更新,導致服務不可用!對于運維來說考驗十分大!
環境配置是十分的麻煩,每一個機器都要部署環境(集群Redis、ES、Hadoop…) !費事費力,
之前在服務器配置一個應用的環境 Redis MySQL JDK ES Hadoop 配置超麻煩了,不能夠跨平臺,
開發環境Windows,最后發布到Linux!
傳統:開發jar,運維來做!
現在:開發打包部署上線,一套流程做完!
docker流程: java-jar(環境) — 打包專案帯上環境(鏡像) — ( Docker倉庫:商店)-----下載我們發布的鏡像直接運行即可!
在容器技術出來之前,我們都是使用虛擬機技術!
虛擬機:在window中裝一個VMware,通過這個軟體我們可以虛擬出來一臺或者多臺電腦!笨重!
虛擬機也屬于虛擬化技術,Docker容器技術,也是一種虛擬化技術!
VMware : linux centos 原生鏡像(一個電腦!) 隔離、需要開啟多個虛擬機! 幾個G 幾分鐘
docker: 隔離,鏡像(最核心的環境 4m + jdk + mysql)十分的小巧,運行鏡像就可以了!小巧! 幾個M 秒級啟動!
之前的虛擬機技術
虛擬機技術缺點:
1、 資源占用十分多
2、 冗余步驟多
3、 啟動很慢!

容器化技術
容器化技術不是模擬一個完整的作業系統

比較Docker和虛擬機技術的不同:
- 傳統虛擬機,虛擬出一條硬體,運行一個完整的作業系統,然后在這個系統上安裝和運行軟體
- 容器內的應用直接運行在宿主機的內容,容器是沒有自己的內核的,也沒有虛擬我們的硬體,所以就輕便了
- 每個容器間是互相隔離,每個容器內都有一個屬于自己的檔案系統,互不影響
鏡像(image):
docker鏡像就好比是一個目標,可以通過這個目標來創建容器服務,tomcat鏡像==>run==>容器(提供服務器),通過這個鏡像可以創建多個容器(最終服務運行或者專案運行就是在容器中的),
容器(container):
Docker利用容器技術,獨立運行一個或者一組應用,通過鏡像來創建的.
啟動,停止,洗掉,基本命令
目前就可以把這個容器理解為就是一個簡易的 Linux系統,
倉庫(repository):
倉庫就是存放鏡像的地方!
倉庫分為公有倉庫和私有倉庫,(很類似git)
Docker Hub是國外的,
阿里云…都有容器服務器(配置鏡像加速!)
安裝Docker
- xshell或者堡塔終端連接遠程服務器,連接需要我們服務器的公網ip+服務器密碼

1、yum 包更新到最新
yum update
2、安裝需要的軟體包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
yum install -y yum-utils device-mapper-persistent-data lvm2
3、 設定yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、 安裝docker,出現輸入的界面都按 y
yum install -y docker-ce
5、 查看docker版本,驗證是否驗證成功
docker --version
6、啟動docker
/bin/systemctl start docker.service
7、設定鏡像的倉庫
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#上述方法默認是從國外的,不推薦
#推薦使用國內的
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
8、 測驗
docker run hello-world
9、查看已經下載的鏡像(從這里可以查看已有鏡像的id)
[root@iz2zeak7sgj6i7hrb2g862z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 4 months ago 13.3kB
卸載docker
#1. 卸載依賴
yum remove docker-ce docker-ce-cli containerd.io
#2. 洗掉資源,主機上的映像,容器,卷或自定義組態檔不會自動洗掉
rm -rf /var/lib/docker
# /var/lib/docker 是docker的默認作業路徑!
rm -rf /var/lib/containerd
阿里云鏡像加速
找到鏡像加速器

配置使用
#1.創建一個目錄
sudo mkdir -p /etc/docker
#2.撰寫組態檔
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://9cq9ab7f.mirror.aliyuncs.com"]
}
EOF
#3.重啟服務
sudo systemctl daemon-reload
sudo systemctl restart docker

回顧HelloWorld流程

docker run 流程圖

底層原理
Docker是怎么作業的?
Docker是一個Client-Server結構的系統,Docker的守護行程運行在主機上(服務),通過Socket從客戶端訪問!
Docker-Server接收到Docker-Client的指令,就會執行這個命令!
[外
為什么Docker比Vm快
1、docker有著比虛擬機更少的抽象層,由于docker不需要Hypervisor實作硬體資源虛擬化,運行在docker容器上的程式直接使用的都是實際物理機的硬體資源,因此在CPU、記憶體利用率上docker將會在效率上有明顯優勢,
2、docker利用的是宿主機的內核,而不需要Guest OS,
GuestOS: VM(虛擬機)里的的系統(OS)
HostOS:物理機里的系統(OS)

因此,當新建一個 容器時,docker不需要和虛擬機一樣重新加載一個作業系統內核,仍而避免引導、加載作業系統內核返個比較費時費資源的程序,當新建一個虛擬機時,虛擬機軟體需要加載GuestOS,返個新建程序是分鐘級別的,而docker由于直接利用宿主機的作業系統,則省略了這個復雜的程序,因此新建一個docker容器只需要幾秒鐘,
Docker的常用命令
$ docker ps // 查看所有正在運行容器
$ docker stop containerId // containerId 是容器的ID
$ docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID
$ docker stop $(docker ps -a -q) // stop停止所有容器
$ docker rm $(docker ps -a -q) // remove洗掉所有容器
$ docker ps -a:查看已經運行的docker鏡像
$ docker exec -it imagename(鏡像名稱) bash
$ service mysql status 查看mysql的啟動狀態
$ docker rm -f mysql(容器名稱): 洗掉容器
$ 設定資料庫root密碼:docker run -name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=資料庫密碼 mysql
$ docker start :啟動一個或多個已經被停止的容器
$ docker stop :停止一個運行中的容器
$ docker restart :重啟容器
$ netstat -anp |grep 3306 :查看埠
$ docker stats :查看docker容器使用記憶體情況 查看cpu狀態
部署專案
- 如果不是前后端分離直接匯入jar其實也可以
- 部署之前的練手博客springboot+vue
由于前后端分離所以用nginx來部署vue,后端直接匯入jar包即可,redis和mysql可以直接用服務器中的,也可以匯入容器內部做一個埠映射,在容器里面使用
1、安裝docker
2、安裝Docker-Compose
這個相當于是一個容器的方法,執行Docker-Compose up根據docker-Compose.yml來執行里面的容器
1、安裝
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
去到安裝目錄檢查:下載成功!

2、設定檔案可執行權限
sudo chmod +x /usr/local/bin/docker-compose
3、查看版本資訊
docker-compose -version

3、撰寫相關組態檔

- html(目錄):存放我們Vue的前端專案打包后的結果!
- nginx.conf : 我們Nginx的核心配置
- blog-api…:我們的后端的Spriongboot專案打的jar包
- docker-compose.yml:我們Docker-Compose的核心組態檔
- Dockerfile:我們的Springboot專案,無法直接在DockerHub拉取,需要借助其built鏡像
Docker-Compose.yml
- 注意格式,縮進問題,一級空格只能有一個
version: '3'
services:
nginx: #服務名稱
image: nginx:latest
ports:
- 80:80
volumes:
- /root/nginx/html:/usr/share/nginx/html #掛載:前面是掛載到哪兒,后面是nginx得配置目錄
- /root/nginx/nginx.conf:/etc/nginx/nginx.conf
privileged: true #解決nginx得檔案呼叫權限的問題
vueblog:
image: vueblog:latest
build: .
ports:
- 8888:8888
- 由于我直接用服務器的redis和mysql,所以這里邊沒有配置redis和mysql
撰寫Dockerfile
Dockerfile 就是用來構建docker鏡像的構建檔案!命令腳本!
通過這個腳本可以生成鏡像,鏡像是一層一層的,腳本是一個個的命令,每個命令都是一層!
FROM java:8
EXPOSE 8888
ADD blog-api-1.0-SNAPSHOT.jar app.jar #前半部分,自己專案打包后的名稱!
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=prod"]
撰寫Nginx的配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80; # 埠
server_name localhost;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html last; #千萬加上!
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4、打包
前端

執行npm run dev,在dist下把這兩放到html下即可

后端

reids設定
關閉保護

redis密碼

資料庫設定

sqlyog連接服務器資料庫

打包

直接放到root下

然后直接啟動
docker-compose up
docker0compose up -d # 后臺啟動 讓網站一直啟動
參考
Docker-Compose + Nginx 部署前后端分離專案
教你Docker+nginx部署SpringBoot+vue前后端分離專案
使用docker部署springboot專案并連接上mysql資料庫
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/375961.html
標籤:其他
上一篇:除了微服務,我們還有其他選擇嗎?
