1、编译构建镜像
编写一个.sh的脚本,用于在linux中构建已发布项目的镜像,构建成功之后再导出镜像------该镜像是docker-compose.yml中需要用到的镜像文件 功能:使用docker根据Dockerfile编译构建已发布的应用程的镜像,并导出该镜像

  1. build.sh内容如下
  2.  
  3. #!/bin/bash
  4. echo "1.使用build脚本自动构建项目镜像"
  5. echo -e "\n\033[32m --------开始构建项目镜像-------- \033[0m"
  6. sudo docker build -t mywebcore -f Dockerfile . #根据Dockerfile文件构建项目镜像,注意Dockerfile文件后面的 点,表示当前目录
  7. echo -e "\n\033[32m --------构建项目镜像完成-------- \033[0m"
  8. #导出镜像文件
  9. echo "2.导出镜像文件"
  10. echo -e "\n\033[32m --------导出镜像文件-------- \033[0m"
  11. sudo docker save mywebcore > mywebcore.tar # 导出镜像文件,mywebcore 镜像,mywebcore.tar 导出的镜像文件名称
  12. #sudo docker save -o mywebcore.tar mywebcore # 导出镜像文件,mywebcore 镜像,mywebcore.tar 导出的镜像文件名称
  13. echo -e "\n\033[32m --------导出镜像文件成功-------- \033[0m"

  14. 根据项目的Dockerfile文件构建项目镜像成功之后,从linux中把导出的镜像文件,复制到本地,以供deploy.sh使用

镜像

导出镜像:

  1. sudo docker save mywebcore > mywebcore.tar # 导出镜像文件,mywebcore 镜像,mywebcore.tar 导出的镜像文件名称
  2.  
  3. sudo docker save -o mywebcore.tar mywebcore # 导出镜像文件,mywebcore 镜像,mywebcore.tar 导出的镜像文件名称

导入镜像:

  1. sudo docker load < mywebcore.tar # 导入镜像,mywebcore.tar 镜像文件,mywebcore 为默认导入的新镜像名称
  2.  
  3. sudo docker load -i mywebcore.tar # 导入镜像,mywebcore.tar 镜像文件,mywebcore 为默认导入的新镜像名称

容器

从容器导出镜像:

  1. sudo docker export nginx_test > mynginx.tar # 容器导出镜像文件,mynginx.tar 容器快照文件,nginxtest 导出的容器名称
  2.  
  3. sudo docker export -o mynginx.tar nginx_test # 容器导出镜像文件,mynginx.tar 容器快照文件,nginxtest 导出的容器名称

从容器快照中导入镜像:

  1. sudo docker import mynginx.tar nginxtest # 导入镜像,mynginx.tar 镜像文件,nginxtest 导入的新镜像名称
  2.  
  3. sudo cat mynginx.tar | sudo docker import - nginxtest1 # 导入镜像,mynginx.tar 镜像文件,nginxtest1 导入的新镜像名称

编写一键部署deploy.sh脚本:
功能:

1、停止docker容器,并删除容器

2、docker加载需要的镜像,nginx,mysql,项目镜像等

3、创建需要的指定文件目录(该目录主要用于nginx,mysql,项目与docker容器挂载的数据目录,主要用于docker数据的持久化), 然后把需要部署的文件通过SSH客户端上传到该文件目录下,需要上传的nginx,mysql以及项目的相关配置和镜像文件 4、处理一些相关的操作,例如防火墙开放端口 firewall,同步时间ntp,ntpdate等 5、执行docker-compose一键部署安装启动需要的服务

  1. #创建需要的指定文件目录
  2. #!/bin/bash
  3. echo "1.使用deploy脚本自动构建运行项目"
  4. echo -e "\n\033[32m --------停止和删除容器------- \033[0m"
  5. #停止docker容器,并删除所有容器,使用以下命令一次删除所有的容器
  6. sudo docker stop $(docker ps -q) #docker stop : 停止所有的容器,-q :静默模式,只显示容器编号。
  7. sudo docker rm $(docker ps -a -q) #docker ps : 列出容器,-a :显示所有的容器,包括未运行的。-q :静默模式,只显示容器编号。
  8. echo -e "\n\033[32m --------停止和删除容器成功------- \033[0m"
  9.  
  10. #加载镜像
  11. #!/bin/bash
  12. echo -e "\n\033[32m --------加载镜像------- \033[0m"
  13. for f in ./images/*.tar
  14. do
  15. echo -e "\033[34m $f 蓝色字 \033[0m"
  16. #sudo docker load < $file #这里导入的镜像共docker-compose.yml文件的image使用
  17. done
  18. echo -e "\n\033[32m --------加载镜像成功------- \033[0m"
  19.  
  20. echo -e "\n\033[32m --------创建文件夹复制文件------- \033[0m"
  21. #创建需要的指定文件目录,例如myapp文件夹,里面包括反向代理的nginx,数据库mysql,项目mywebcore,以及volumes数据卷文件data等
  22. sudo mkdir myapp # 创建myapp文件夹,可以根据具体情况自行创建需要的文件夹,本文是以上传文件的位置作为根目录来进行volumes数据挂载的
  23. #sudo mkdir -vp a/b/c # 创建a,a/b,a/b/c文件夹,-v --verbose是详细信息,-p --parents是递归创建文件夹。
  24. #本文是以上传文件的位置作为根目录来进行volumes数据挂载的,上传的文件myapp.tar,
  25. sudo tar -xvf myapp.tar -C ./myapp #解压myapp.tar到myapp文件夹中
  26. sudo cd myapp
  27. echo -e "\n\033[32m --------创建文件夹复制文件成功------- \033[0m"
  28.  
  29. #防火墙开放端口80
  30. echo -e "\n\033[32m --------防火墙开放端口80------- \033[0m"
  31. sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
  32. sudo systemctl restart firewalld
  33. echo -e "\n\033[32m --------防火墙开放端口80成功------- \033[0m"
  34.  
  35. #同步时间
  36. echo -e "\n\033[32m --------同步时间------- \033[0m"
  37. sudo ntpdate time.ntp.org
  38. sudo date
  39. echo -e "\n\033[32m --------同步时间成功------- \033[0m"

附件:
1、 install-docker.sh 内容如下

  1. #!/bin/bash
  2. echo "1.使用脚本自动安装..."
  3. #卸载旧的安装包
  4. echo "卸载旧的安装"
  5. sudo yum remove docker \
  6. docker-client \
  7. docker-client-latest \
  8. docker-common \
  9. docker-latest \
  10. docker-latest-logrotate \
  11. docker-logrotate \
  12. docker-engine
  13.  
  14. #卸载依赖
  15. echo "卸载依赖"
  16. sudo yum remove docker-ce docker-ce-cli containerd.io
  17.  
  18. #删除资源
  19. echo "删除资源"
  20. sudo rm -rf /var/lib/docker
  21.  
  22. #安装工具包
  23. echo "安装工具包"
  24. sudo yum install -y yum-utils
  25.  
  26. #设置镜像仓库
  27. echo "设置镜像仓库"
  28. #sudo yum-config-manager \
  29. --add-repo \
  30. https://download.docker.com/linux/centos/docker-ce.repo --默认是国外的
  31. #如果没有vpn 建议安装阿里云的
  32. sudo yum-config-manager \
  33. --add-repo \
  34. https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  35.  
  36. #更新yum 索引安装包
  37. #echo "更新yum 索引安装包"
  38. #sudo yum makecache fast
  39.  
  40. #安装启动docker
  41. echo "2、安装docker并启动"
  42. sudo yum install -y docker-ce docker-ce-cli containerd.io
  43. sudo systemctl start docker #启动
  44. sudo systemctl enable docker #开机启动
  45. echo -e "\n\033[32m ===========查看docker 是否安装完成=========== \033[0m"
  46. sudo docker --version #查看docker 是否安装完成
  47.  
  48. #测试docker,运行Hello world
  49. echo "3、docker测试Hello world"
  50. sudo docker run hello-world #初次自动下载镜像
  51.  
  52. #下载 Docker Compose 的当前稳定版本:
  53. echo "4、安装Docker-Compose"
  54.  
  55. #解压到Linux系统的/usr/local/bin/docker-compose
  56. echo "解压复制docker-compose二进制文件到Linux系统的/usr/local/bin/docker-compose"
  57. sudo cp docker-compose /usr/local/bin/docker-compose
  58. sudo chmod a+x /usr/local/bin/docker-compose
  59. #添加软连接
  60. sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  61. echo -e "\n\033[32m ===========查看docker-compose 是否安装完成=========== \033[0m"
  62. sudo docker-compose --version #查询安装的docker-compose版本
  63.  
  64. #添加到docker用户组
  65. echo -e "\n\033[32m ===========添加当前用户到docker用户组=========== \033[0m"
  66. sudo usermod -aG docker $USER

docker-compose.yml内容如下

  1. version: '3'
  2.  
  3. networks:
  4. mynetwork:
  5. driver: bridge
  6.  
  7. services:
  8. db:
  9. image: mysql
  10. ports:
  11. - "3306:3306"
  12. environment:
  13. #- MYSQL_ROOT_PASSWORD:=123456@mysql
  14. MYSQL_ROOT_PASSWORD: 123456@mysql
  15. MYSQL_USER: mysql
  16. MYSQL_PASSWORD: 123456
  17. volumes:
  18. - /myapp/data/mysql:/var/lib/mysql
  19. networks:
  20. - mynetwork
  21.  
  22. webnetcore:
  23. build: .
  24. #ports:
  25. # - "80:80"
  26. depends_on:
  27. - db
  28. volumes:
  29. - /myapp/data/webnetcore:/app/webnetcore
  30. - /myapp/logs/webnetcore:/app/logs
  31. networks:
  32. - mynetwork
  33.  
  34. nginx:
  35. image: nginx
  36. depends_on:
  37. - webnetcore
  38. ports:
  39. - "80:80"
  40. - "443:443"
  41. volumes:
  42. - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
  43. - ./logs/nginxlog:/var/log/nginxlog
  44. networks:
  45. - mynetwork

Dockerfile内容如下

  1. #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
  2.  
  3. FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
  4. WORKDIR /app
  5. EXPOSE 80
  6. EXPOSE 443
  7.  
  8. FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
  9. WORKDIR /src
  10. COPY ["Linuxaspnetcore/Linuxaspnetcore.csproj", "Linuxaspnetcore/"]
  11. RUN dotnet restore "Linuxaspnetcore/Linuxaspnetcore.csproj"
  12. COPY . .
  13. WORKDIR "/src/Linuxaspnetcore"
  14. RUN dotnet build "Linuxaspnetcore.csproj" -c Release -o /app/build
  15.  
  16. FROM build AS publish
  17. RUN dotnet publish "Linuxaspnetcore.csproj" -c Release -o /app/publish
  18.  
  19. FROM base AS final
  20. WORKDIR /app
  21. COPY --from=publish /app/publish .
  22. ENTRYPOINT ["dotnet", "Linuxaspnetcore.dll"]

build.sh内容如下

  1. #!/bin/bash
  2. echo "1.使用build脚本自动构建项目镜像"
  3. echo -e "\n\033[32m --------开始构建项目镜像-------- \033[0m"
  4. sudo docker build -t mywebcore -f Dockerfile . #根据Dockerfile文件构建项目镜像,注意Dockerfile文件后面的 点,表示当前目录
  5. echo -e "\n\033[32m --------构建项目镜像完成-------- \033[0m"
  6. #导出镜像文件
  7. echo "2.导出镜像文件"
  8. echo -e "\n\033[32m --------导出镜像文件-------- \033[0m"
  9. sudo docker save mywebcore > mywebcore.tar # 导出镜像文件,mywebcore 镜像,mywebcore.tar 导出的镜像文件名称
  10. #sudo docker save -o mywebcore.tar mywebcore # 导出镜像文件,mywebcore 镜像,mywebcore.tar 导出的镜像文件名称
  11. echo -e "\n\033[32m --------导出镜像文件成功-------- \033[0m"

deploy.sh内容如下

  1. #创建需要的指定文件目录
  2. #!/bin/bash
  3. echo "1.使用deploy脚本自动构建运行项目"
  4. echo -e "\n\033[32m --------停止和删除容器------- \033[0m"
  5. #停止docker容器,并删除所有容器,使用以下命令一次删除所有的容器
  6. sudo docker stop $(docker ps -q) #docker stop : 停止所有的容器,-q :静默模式,只显示容器编号。
  7. sudo docker rm $(docker ps -a -q) #docker ps : 列出容器,-a :显示所有的容器,包括未运行的。-q :静默模式,只显示容器编号。
  8. echo -e "\n\033[32m --------停止和删除容器成功------- \033[0m"
  9.  
  10. #加载镜像
  11. #!/bin/bash
  12. echo -e "\n\033[32m --------加载镜像------- \033[0m"
  13. for f in ./images/*.tar
  14. do
  15. echo -e "\033[34m $f 蓝色字 \033[0m"
  16. #sudo docker load < $file #这里导入的镜像共docker-compose.yml文件的image使用
  17. done
  18. echo -e "\n\033[32m --------加载镜像成功------- \033[0m"
  19.  
  20. echo -e "\n\033[32m --------创建文件夹复制文件------- \033[0m"
  21. #创建需要的指定文件目录,例如myapp文件夹,里面包括反向代理的nginx,数据库mysql,项目mywebcore,以及volumes数据卷文件data等
  22. sudo mkdir myapp # 创建myapp文件夹,可以根据具体情况自行创建需要的文件夹,本文是以上传文件的位置作为根目录来进行volumes数据挂载的
  23. #sudo mkdir -vp a/b/c # 创建a,a/b,a/b/c文件夹,-v --verbose是详细信息,-p --parents是递归创建文件夹。
  24. #本文是以上传文件的位置作为根目录来进行volumes数据挂载的,上传的文件myapp.tar,
  25. sudo tar -xvf myapp.tar -C ./myapp #解压myapp.tar到myapp文件夹中
  26. sudo cd myapp
  27. echo -e "\n\033[32m --------创建文件夹复制文件成功------- \033[0m"
  28.  
  29. #防火墙开放端口80
  30. echo -e "\n\033[32m --------防火墙开放端口80------- \033[0m"
  31. sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
  32. sudo systemctl restart firewalld
  33. echo -e "\n\033[32m --------防火墙开放端口80成功------- \033[0m"
  34.  
  35. #同步时间
  36. echo -e "\n\033[32m --------同步时间------- \033[0m"
  37. sudo ntpdate time.ntp.org
  38. sudo date
  39. echo -e "\n\033[32m --------同步时间成功------- \033[0m"
  40.  
  41. #字体颜色和背景色,颜色设置参考
  42.  
  43. echo -e "\033[30m 黑色字 \033[0m"
  44. echo -e "\033[31m 红色字 \033[0m"
  45. echo -e "\033[32m 绿色字 \033[0m"
  46. echo -e "\033[33m 黄色字 \033[0m"
  47. echo -e "\033[34m 蓝色字 \033[0m"
  48. echo -e "\033[35m 紫色字 \033[0m"
  49. echo -e "\033[36m 天蓝字 \033[0m"
  50. echo -e "\033[37m 白色字 \033[0m"
  51.  
  52. echo -e "\033[40;37m 黑底白字 \033[0m"
  53. echo -e "\033[41;37m 红底白字 \033[0m"
  54. echo -e "\033[42;37m 绿底白字 \033[0m"
  55. echo -e "\033[43;37m 黄底白字 \033[0m"
  56. echo -e "\033[44;37m 蓝底白字 \033[0m"
  57. echo -e "\033[45;37m 紫底白字 \033[0m"
  58. echo -e "\033[46;37m 天蓝底白字 \033[0m"
  59. echo -e "\033[47;30m 白底黑字 \033[0m"

docker脚本自动化安装的更多相关文章

  1. Mysql单实例脚本自动化安装

    安装包:mysql-5.6.31.tar.gz 已有配置文件:my.cnf *注意:本次Mysql的配置文件是在my.cnf的基础上更改得到的,my.cnf存放路径为/opt/rh/my.cnf 脚本 ...

  2. sql server 2008R2无人值守批处理脚本自动化安装

    ▲版权声明:本文为博主原创文章,未经博主允许不得转载. Microsoft SQL Server 2008 R2是一款软件,提供完整的企业级技术与工具,帮助您以最低的总拥有成本获得最有价值的信息.您可 ...

  3. sql server2014企业版无人值守批处理脚本自动化安装

    ▲版权声明:本文为博主原创文章,未经博主允许不得转载. SQL Server系列软件是Microsoft 公司推出的关系型数据库管理系统.2014年4月16日于旧金山召开的一场发布会上,微软CEO萨蒂 ...

  4. shell脚本自动化安装pgsql10.5版本

    看到有个大佬写了个很实用的脚本,于是这里做了转载 #!/bin/bash #进入软件的制定安装目录 echo "进入目录/usr/local,下载pgsql文件" cd /usr/ ...

  5. shell脚本自动化安装LAMP

    #!/bin/bash#auto make install LAMP#by authors yehailun #arp和apr-util依赖APR_FILES=apr-1.6.2.tar.gz APR ...

  6. Docker教程-01.安装docker-ce-18.06

    参考文章:http://www.runoob.com/docker/docker-tutorial.html 1.Docker简介 1)Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 ...

  7. lnmp_auto:自动化安装lnmp环境脚本

    朋友找我在一台机器上帮忙安装下discuz.想着搭建过好几次的lnmp了,但是还没有使用过"一键安装"的自动化脚本,去网上有搜索出来,但是运行的时候发现用root运行别人的脚本还是 ...

  8. 【转】lnmp_auto:自动化安装lnmp环境脚本

    原文链接: lnmp_auto:自动化安装lnmp环境脚本  这哥们整理的这篇博文很好  转载分享 博文转载如下: 源代码在github上:https://github.com/jianfengye/ ...

  9. Oracle 12c 静默安装(脚本自动化)

    oracle 12C 自动化静默安装脚本 项目地址: github: https://github.com/spdir/oracle-single-install 下载安装脚本 wget https: ...

  10. 自动化安装smokeping-2.6.11脚本

    自动化安装Smokeping-2.6.11脚本 一.目的 1.1 监控目的 为方便监测各数据中心网络状况,自定义全国各节点,从而发现网络异常,判断网络故障. 1.2 本文目的 快速部署Smokepin ...

随机推荐

  1. 亲测有效! TG Pro 实时温度工具 V2.7.6 for mac 破解版

    亲测有效! TG Pro 实时温度工具 V2.7.6 for mac 破解版 TG Pro (Temperature Gauge Pro) 是一款专业显示你的Mac实时温度的软件,可以在系统内的菜单栏 ...

  2. HTTPS基础原理和配置-2

    〇.概述 作为概述,以下是本文要讲的内容.HTTPS 是什么? 每个人都可能从浏览器上认出 HTTPS,并对它有好感.然后再讲一遍基础知识,再详细讲一下协议版本,密码套件(Cipher Suites) ...

  3. 2.3.pages.json文件的页面配置与全局配置

    新建页面 # pages uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象,其属性值如下: 属性 类型 默认值 描述 path Str ...

  4. SQL性能优化的47个小技巧,你了解多少?

    大家好,我是哪吒. 1.先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化. 客户端发送一条查询语句到服务器: 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中 ...

  5. Stable Diffusion魔法入门

    写在前面 本文为资料整合,没有原创内容,方便自己查找和学习, 花费了一晚上把sd安装好,又花了大半天了解sd周边的知识,终于体会到为啥这些生成式AI被称为魔法了,魔法使用前要吟唱类比到AI上不就是那些 ...

  6. CCRD_TOC_2008年第2期

    中信国健临床通讯 2008年第2期 目 录   类风湿关节炎 1. 纵向分析TEMPO数据:放射学损伤程度和进展速率决定了关节物理功能 van der Heijde D, et al. Ann Rhe ...

  7. 代码随想录算法训练营day18 | leetcode 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树

    LeetCode 513.找树左下角的值 分析1.0 二叉树的 最底层 最左边 节点的值,层序遍历获取最后一层首个节点值,记录每一层的首个节点,当没有下一层时,返回这个节点 class Solutio ...

  8. Android:Fragment 和 include 标签引入布局的区别

    Fragment 存在于 Activity 中,但是 Fragment 管理自己的界面和逻辑,表面上看,Fragment 最终的布局还是要被压入到 Activity 中的布局中.03#Android ...

  9. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(9)-Charles如何修改请求参数和响应数据-上篇

    1.简介 宏哥之前一直用postman调接口比较多(web端),也非常容易上手和操作.但有时候想要去修改APP的页面展示,造数据又会比较麻烦,你自己造相对还好些,要是让开发造,还得低眉顺眼的去求人.通 ...

  10. Linux的终端(base),进入base环境

    正常界面,如下 带有(base) 一般是由于安装了conda环境管理软件,它自带一个base环境.第一次安装时出现这种情况可能是由于软件将启动base环境的命令写入-/.bashrc 文件,这就相当于 ...