docker脚本自动化安装
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 导入的新镜像名称
编写一键部署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
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
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"]
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"
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"
docker脚本自动化安装的更多相关文章
- Mysql单实例脚本自动化安装
安装包:mysql-5.6.31.tar.gz 已有配置文件:my.cnf *注意:本次Mysql的配置文件是在my.cnf的基础上更改得到的,my.cnf存放路径为/opt/rh/my.cnf 脚本 ...
- sql server 2008R2无人值守批处理脚本自动化安装
▲版权声明:本文为博主原创文章,未经博主允许不得转载. Microsoft SQL Server 2008 R2是一款软件,提供完整的企业级技术与工具,帮助您以最低的总拥有成本获得最有价值的信息.您可 ...
- sql server2014企业版无人值守批处理脚本自动化安装
▲版权声明:本文为博主原创文章,未经博主允许不得转载. SQL Server系列软件是Microsoft 公司推出的关系型数据库管理系统.2014年4月16日于旧金山召开的一场发布会上,微软CEO萨蒂 ...
- shell脚本自动化安装pgsql10.5版本
看到有个大佬写了个很实用的脚本,于是这里做了转载 #!/bin/bash #进入软件的制定安装目录 echo "进入目录/usr/local,下载pgsql文件" cd /usr/ ...
- shell脚本自动化安装LAMP
#!/bin/bash#auto make install LAMP#by authors yehailun #arp和apr-util依赖APR_FILES=apr-1.6.2.tar.gz APR ...
- Docker教程-01.安装docker-ce-18.06
参考文章:http://www.runoob.com/docker/docker-tutorial.html 1.Docker简介 1)Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 ...
- lnmp_auto:自动化安装lnmp环境脚本
朋友找我在一台机器上帮忙安装下discuz.想着搭建过好几次的lnmp了,但是还没有使用过"一键安装"的自动化脚本,去网上有搜索出来,但是运行的时候发现用root运行别人的脚本还是 ...
- 【转】lnmp_auto:自动化安装lnmp环境脚本
原文链接: lnmp_auto:自动化安装lnmp环境脚本 这哥们整理的这篇博文很好 转载分享 博文转载如下: 源代码在github上:https://github.com/jianfengye/ ...
- Oracle 12c 静默安装(脚本自动化)
oracle 12C 自动化静默安装脚本 项目地址: github: https://github.com/spdir/oracle-single-install 下载安装脚本 wget https: ...
- 自动化安装smokeping-2.6.11脚本
自动化安装Smokeping-2.6.11脚本 一.目的 1.1 监控目的 为方便监测各数据中心网络状况,自定义全国各节点,从而发现网络异常,判断网络故障. 1.2 本文目的 快速部署Smokepin ...
随机推荐
- 亲测有效! TG Pro 实时温度工具 V2.7.6 for mac 破解版
亲测有效! TG Pro 实时温度工具 V2.7.6 for mac 破解版 TG Pro (Temperature Gauge Pro) 是一款专业显示你的Mac实时温度的软件,可以在系统内的菜单栏 ...
- HTTPS基础原理和配置-2
〇.概述 作为概述,以下是本文要讲的内容.HTTPS 是什么? 每个人都可能从浏览器上认出 HTTPS,并对它有好感.然后再讲一遍基础知识,再详细讲一下协议版本,密码套件(Cipher Suites) ...
- 2.3.pages.json文件的页面配置与全局配置
新建页面 # pages uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象,其属性值如下: 属性 类型 默认值 描述 path Str ...
- SQL性能优化的47个小技巧,你了解多少?
大家好,我是哪吒. 1.先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化. 客户端发送一条查询语句到服务器: 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中 ...
- Stable Diffusion魔法入门
写在前面 本文为资料整合,没有原创内容,方便自己查找和学习, 花费了一晚上把sd安装好,又花了大半天了解sd周边的知识,终于体会到为啥这些生成式AI被称为魔法了,魔法使用前要吟唱类比到AI上不就是那些 ...
- CCRD_TOC_2008年第2期
中信国健临床通讯 2008年第2期 目 录 类风湿关节炎 1. 纵向分析TEMPO数据:放射学损伤程度和进展速率决定了关节物理功能 van der Heijde D, et al. Ann Rhe ...
- 代码随想录算法训练营day18 | leetcode 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树
LeetCode 513.找树左下角的值 分析1.0 二叉树的 最底层 最左边 节点的值,层序遍历获取最后一层首个节点值,记录每一层的首个节点,当没有下一层时,返回这个节点 class Solutio ...
- Android:Fragment 和 include 标签引入布局的区别
Fragment 存在于 Activity 中,但是 Fragment 管理自己的界面和逻辑,表面上看,Fragment 最终的布局还是要被压入到 Activity 中的布局中.03#Android ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(9)-Charles如何修改请求参数和响应数据-上篇
1.简介 宏哥之前一直用postman调接口比较多(web端),也非常容易上手和操作.但有时候想要去修改APP的页面展示,造数据又会比较麻烦,你自己造相对还好些,要是让开发造,还得低眉顺眼的去求人.通 ...
- Linux的终端(base),进入base环境
正常界面,如下 带有(base) 一般是由于安装了conda环境管理软件,它自带一个base环境.第一次安装时出现这种情况可能是由于软件将启动base环境的命令写入-/.bashrc 文件,这就相当于 ...