docker腳本自動化安裝


docker腳本自動化安裝

1、安裝docker和docker-compose

installdocker.sh shell腳本安裝docker和docker-compose install-docker.sh內容見附件,下載鏈接:https://download.csdn.net/download/LongtengGensSupreme/12760306

1、編譯構建鏡像

編寫一個.sh的腳本,用於在linux中構建已發布項目的鏡像,構建成功之后再導出鏡像------該鏡像是docker-compose.yml中需要用到的鏡像文件 功能:使用docker根據Dockerfile編譯構建已發布的應用程的鏡像,並導出該鏡像

build.sh內容如下

#!/bin/bash
echo "1.使用build腳本自動構建項目鏡像"
echo -e "\n\033[32m --------開始構建項目鏡像-------- \033[0m"
sudo docker build -t mywebcore -f Dockerfile .   #根據Dockerfile文件構建項目鏡像,注意Dockerfile文件后面的 點,表示當前目錄
echo -e "\n\033[32m --------構建項目鏡像完成-------- \033[0m"
#導出鏡像文件
echo "2.導出鏡像文件"
echo -e "\n\033[32m --------導出鏡像文件-------- \033[0m"
sudo docker save mywebcore > mywebcore.tar # 導出鏡像文件,mywebcore 鏡像,mywebcore.tar 導出的鏡像文件名稱
#sudo docker save -o mywebcore.tar mywebcore # 導出鏡像文件,mywebcore 鏡像,mywebcore.tar 導出的鏡像文件名稱
echo -e "\n\033[32m --------導出鏡像文件成功-------- \033[0m"

根據項目的Dockerfile文件構建項目鏡像成功之后,從linux中把導出的鏡像文件,復制到本地,以供deploy.sh使用

鏡像

導出鏡像:

sudo docker save mywebcore > mywebcore.tar # 導出鏡像文件,mywebcore 鏡像,mywebcore.tar 導出的鏡像文件名稱

sudo docker save -o mywebcore.tar mywebcore # 導出鏡像文件,mywebcore 鏡像,mywebcore.tar 導出的鏡像文件名稱

導入鏡像:

sudo docker load < mywebcore.tar # 導入鏡像,mywebcore.tar 鏡像文件,mywebcore 為默認導入的新鏡像名稱

sudo docker load -i mywebcore.tar # 導入鏡像,mywebcore.tar 鏡像文件,mywebcore 為默認導入的新鏡像名稱

容器

從容器導出鏡像:

sudo docker export nginx_test > mynginx.tar # 容器導出鏡像文件,mynginx.tar 容器快照文件,nginxtest 導出的容器名稱

sudo docker export -o mynginx.tar nginx_test # 容器導出鏡像文件,mynginx.tar 容器快照文件,nginxtest 導出的容器名稱

從容器快照中導入鏡像:

sudo docker import mynginx.tar nginxtest # 導入鏡像,mynginx.tar 鏡像文件,nginxtest 導入的新鏡像名稱

sudo cat mynginx.tar | sudo docker import - nginxtest1 # 導入鏡像,mynginx.tar 鏡像文件,nginxtest1 導入的新鏡像名稱

2、編寫docker-compose.yml文件

docker-compose一鍵部署的配置文件:version,services,networks,具體參照docker-compose.yml附件

3、編寫一鍵部署deploy.sh腳本:

功能:

1、停止docker容器,並刪除容器

2、docker加載需要的鏡像,nginx,mysql,項目鏡像等

3、創建需要的指定文件目錄(該目錄主要用於nginx,mysql,項目與docker容器掛載的數據目錄,主要用於docker數據的持久化), 然后把需要部署的文件通過SSH客戶端上傳到該文件目錄下,需要上傳的nginx,mysql以及項目的相關配置和鏡像文件 4、處理一些相關的操作,例如防火牆開放端口 firewall,同步時間ntp,ntpdate等 5、執行docker-compose一鍵部署安裝啟動需要的服務

#創建需要的指定文件目錄
#!/bin/bash
echo "1.使用deploy腳本自動構建運行項目"
echo -e "\n\033[32m --------停止和刪除容器------- \033[0m"
#停止docker容器,並刪除所有容器,使用以下命令一次刪除所有的容器
sudo docker stop $(docker ps -q) #docker stop : 停止所有的容器,-q :靜默模式,只顯示容器編號。
sudo docker rm $(docker ps -a -q) #docker ps : 列出容器,-a :顯示所有的容器,包括未運行的。-q :靜默模式,只顯示容器編號。
echo -e "\n\033[32m --------停止和刪除容器成功------- \033[0m"

#加載鏡像
#!/bin/bash
echo -e "\n\033[32m --------加載鏡像------- \033[0m"
for f in ./images/*.tar
do
echo -e "\033[34m $f 藍色字 \033[0m"
#sudo docker load < $file #這里導入的鏡像共docker-compose.yml文件的image使用
done
echo -e "\n\033[32m --------加載鏡像成功------- \033[0m"

echo -e "\n\033[32m --------創建文件夾復制文件------- \033[0m"
#創建需要的指定文件目錄,例如myapp文件夾,里面包括反向代理的nginx,數據庫mysql,項目mywebcore,以及volumes數據卷文件data等
sudo mkdir myapp # 創建myapp文件夾,可以根據具體情況自行創建需要的文件夾,本文是以上傳文件的位置作為根目錄來進行volumes數據掛載的
#sudo mkdir -vp a/b/c # 創建a,a/b,a/b/c文件夾,-v --verbose是詳細信息,-p --parents是遞歸創建文件夾。
#本文是以上傳文件的位置作為根目錄來進行volumes數據掛載的,上傳的文件myapp.tar,
sudo tar -xvf myapp.tar -C ./myapp #解壓myapp.tar到myapp文件夾中
sudo cd myapp
echo -e "\n\033[32m --------創建文件夾復制文件成功------- \033[0m"

#防火牆開放端口80
echo -e "\n\033[32m --------防火牆開放端口80------- \033[0m"
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo systemctl restart firewalld
echo -e "\n\033[32m --------防火牆開放端口80成功------- \033[0m"

#同步時間
echo -e "\n\033[32m --------同步時間------- \033[0m"
sudo ntpdate time.ntp.org
sudo date
echo -e "\n\033[32m --------同步時間成功------- \033[0m"

 

附件:

1、 install-docker.sh 內容如下

#!/bin/bash
echo "1.使用腳本自動安裝..."
#卸載舊的安裝包
echo "卸載舊的安裝"
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

#卸載依賴
echo "卸載依賴"
sudo yum remove docker-ce docker-ce-cli containerd.io

#刪除資源
echo "刪除資源"
sudo rm -rf /var/lib/docker

#安裝工具包
echo "安裝工具包"
sudo yum install -y yum-utils

#設置鏡像倉庫
echo "設置鏡像倉庫"
#sudo yum-config-manager \
   --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo --默認是國外的
#如果沒有vpn 建議安裝阿里雲的
sudo yum-config-manager \
   --add-repo \
  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#更新yum 索引安裝包
#echo "更新yum 索引安裝包"
#sudo yum makecache fast

#安裝啟動docker
echo "2、安裝docker並啟動"
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker #啟動
sudo systemctl enable docker #開機啟動
echo -e "\n\033[32m ===========查看docker 是否安裝完成=========== \033[0m"
sudo docker --version #查看docker 是否安裝完成

#測試docker,運行Hello world
echo "3、docker測試Hello world"
sudo docker run hello-world #初次自動下載鏡像

#下載 Docker Compose 的當前穩定版本:
echo "4、安裝Docker-Compose"

#解壓到Linux系統的/usr/local/bin/docker-compose
echo "解壓復制docker-compose二進制文件到Linux系統的/usr/local/bin/docker-compose"
sudo cp docker-compose /usr/local/bin/docker-compose
sudo chmod a+x /usr/local/bin/docker-compose
#添加軟連接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
echo -e "\n\033[32m ===========查看docker-compose 是否安裝完成=========== \033[0m"
sudo docker-compose --version #查詢安裝的docker-compose版本

#添加到docker用戶組
echo -e "\n\033[32m ===========添加當前用戶到docker用戶組=========== \033[0m"
sudo usermod -aG docker $USER

2、docker-compose.yml內容如下

version: '3'

networks:
mynetwork:
driver: bridge

services:
db:
image: mysql
ports:
  - "3306:3306"
environment:
  #- MYSQL_ROOT_PASSWORD:=123456@mysql
  MYSQL_ROOT_PASSWORD: 123456@mysql
  MYSQL_USER: mysql
  MYSQL_PASSWORD: 123456
volumes:
  - /myapp/data/mysql:/var/lib/mysql
networks:
  - mynetwork

webnetcore:
  build: .
  #ports:
  # - "80:80"
  depends_on:
  - db
  volumes:
  - /myapp/data/webnetcore:/app/webnetcore
  - /myapp/logs/webnetcore:/app/logs
  networks:
  - mynetwork

nginx:
image: nginx
depends_on:
  - webnetcore
ports:
  - "80:80"
  - "443:443"
volumes:
  - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
  - ./logs/nginxlog:/var/log/nginxlog
networks:
  - mynetwork

3、Dockerfile內容如下

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Linuxaspnetcore/Linuxaspnetcore.csproj", "Linuxaspnetcore/"]
RUN dotnet restore "Linuxaspnetcore/Linuxaspnetcore.csproj"
COPY . .
WORKDIR "/src/Linuxaspnetcore"
RUN dotnet build "Linuxaspnetcore.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Linuxaspnetcore.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Linuxaspnetcore.dll"]

 

4、build.sh內容如下

#!/bin/bash
echo "1.使用build腳本自動構建項目鏡像"
echo -e "\n\033[32m --------開始構建項目鏡像-------- \033[0m"
sudo docker build -t mywebcore -f Dockerfile .   #根據Dockerfile文件構建項目鏡像,注意Dockerfile文件后面的 點,表示當前目錄
echo -e "\n\033[32m --------構建項目鏡像完成-------- \033[0m"
#導出鏡像文件
echo "2.導出鏡像文件"
echo -e "\n\033[32m --------導出鏡像文件-------- \033[0m"
sudo docker save mywebcore > mywebcore.tar # 導出鏡像文件,mywebcore 鏡像,mywebcore.tar 導出的鏡像文件名稱
#sudo docker save -o mywebcore.tar mywebcore # 導出鏡像文件,mywebcore 鏡像,mywebcore.tar 導出的鏡像文件名稱
echo -e "\n\033[32m --------導出鏡像文件成功-------- \033[0m"

5、deploy.sh內容如下

#創建需要的指定文件目錄
#!/bin/bash
echo "1.使用deploy腳本自動構建運行項目"
echo -e "\n\033[32m --------停止和刪除容器------- \033[0m"
#停止docker容器,並刪除所有容器,使用以下命令一次刪除所有的容器
sudo docker stop $(docker ps -q) #docker stop : 停止所有的容器,-q :靜默模式,只顯示容器編號。
sudo docker rm $(docker ps -a -q) #docker ps : 列出容器,-a :顯示所有的容器,包括未運行的。-q :靜默模式,只顯示容器編號。
echo -e "\n\033[32m --------停止和刪除容器成功------- \033[0m"

#加載鏡像
#!/bin/bash
echo -e "\n\033[32m --------加載鏡像------- \033[0m"
for f in ./images/*.tar
do
echo -e "\033[34m $f 藍色字 \033[0m"
#sudo docker load < $file #這里導入的鏡像共docker-compose.yml文件的image使用
done
echo -e "\n\033[32m --------加載鏡像成功------- \033[0m"

echo -e "\n\033[32m --------創建文件夾復制文件------- \033[0m"
#創建需要的指定文件目錄,例如myapp文件夾,里面包括反向代理的nginx,數據庫mysql,項目mywebcore,以及volumes數據卷文件data等
sudo mkdir myapp # 創建myapp文件夾,可以根據具體情況自行創建需要的文件夾,本文是以上傳文件的位置作為根目錄來進行volumes數據掛載的
#sudo mkdir -vp a/b/c # 創建a,a/b,a/b/c文件夾,-v --verbose是詳細信息,-p --parents是遞歸創建文件夾。
#本文是以上傳文件的位置作為根目錄來進行volumes數據掛載的,上傳的文件myapp.tar,
sudo tar -xvf myapp.tar -C ./myapp #解壓myapp.tar到myapp文件夾中
sudo cd myapp
echo -e "\n\033[32m --------創建文件夾復制文件成功------- \033[0m"

#防火牆開放端口80
echo -e "\n\033[32m --------防火牆開放端口80------- \033[0m"
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo systemctl restart firewalld
echo -e "\n\033[32m --------防火牆開放端口80成功------- \033[0m"

#同步時間
echo -e "\n\033[32m --------同步時間------- \033[0m"
sudo ntpdate time.ntp.org
sudo date
echo -e "\n\033[32m --------同步時間成功------- \033[0m"


#字體顏色和背景色,顏色設置參考

echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 紅色字 \033[0m"
echo -e "\033[32m 綠色字 \033[0m"
echo -e "\033[33m 黃色字 \033[0m"
echo -e "\033[34m 藍色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天藍字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"


echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 紅底白字 \033[0m"
echo -e "\033[42;37m 綠底白字 \033[0m"
echo -e "\033[43;37m 黃底白字 \033[0m"
echo -e "\033[44;37m 藍底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天藍底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM