前言

  公司租用的阿里云的服务器,每年会更换一次,很麻烦,还容易出问题,想会不会有更方便的方式来迁移服务器,就这样接触到了docker。

  参考网上的一些资料,自己琢磨了一段时间,记录下docker的部署过程。

系统:CentOS Linux release 7.6.1810

安装docker

  1、执行安装脚本

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

  2、启动docker进程

sudo systemctl start docker  

  至此已安装完成,docker默认镜像地址比较慢,可修改镜像地址。修改该文件,没有可新建一个,/etc/docker/daemon.json   。使用了网易的镜像。

{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}

安装Mongodb

  1、拉取官方镜像

    命令可以从 https://hub.docker.com 上获取

docker pull mongo

  2、创建并运行容器

docker run -d -p : -v /root/docker/mongo/db:/data/db --name test_mongo mongo --auth

    参数说明

    -d 后台运行

    -p 端口映射 容器内部27017端口映射到外部27017端口(冒号前为外部端口)

    -v 目录挂载,这里是把mongo的数据文件挂载到宿主机的目录里,这样容器被删除,也不会丢失数据

    --name 容器名称,不加docker会自动命名

    --auth 启用mongo权限验证

  3、初始化mongodb

    

docker exec -it em_mongo mongo bash

    进入mongodb容器内部执行bash命令,后续操作与mongodb本身的操作无二,可以创建帐号、数据库等,不做详细介绍

exit

    exit命令可退出容器

  4、mongodb备份还原

    如果是已经安装过mongodb,想要迁移到容器内部,则可进行以下操作

    首先在原数据库执行备份命令mongodump

    在容器中创建目录以保存备份文件

docker exec -it em_mongo /bin/sh
mkdir -p /opt/mongo_bak/
exit

    复制备份文件到容器中

docker cp /root/mongo/config/bak em_mongo:/opt/mongo_bak/

    还原数据库

docker exec -it em_mongo bash
mongorestore --dir /opt/mongo_bak/bak/ -u root -p
exit

部署.netcore程序

  1、拉取镜像 

docker pull microsoft/aspnetcore:2.0

    项目是用.netcore 2.0开发的,所以指定下版本

  2、创建dockerfile文件

    这里我们用dockerfile 来根据官方镜像生成自己项目的镜像,文件名 Dockerfile

FROM docker.io/microsoft/aspnetcore:2.0
WORKDIR /app
EXPOSE 80 COPY . . ENTRYPOINT ["dotnet", "ErpMiddle.Pc.dll"]

    在VS中可以直接生成该文件

    

  3、生成镜像

    将Dockerfile文件和发布后的项目文件放在一块,复制到服务器上,进入相应目录,执行build 命令

docker build -t testimage:1.0 .

    -t 后可跟镜像名和版本号,最后的点 表示使用当前路径的Dockerfile

    操作完成后执行 docker images 命令即可看到刚刚创建的镜像

    

  4、运行容器

    同mongodb 使用run命令运行容器 将容器的80端口映射出来即可

docker run -d -p 5000:80  --name testcontainer --link test_mongo:mongolink testimage:1.0

    这里使用了 --link 参数  ,将之前创建的mongo数据库和项目连接起来,这样就可以使用别名mongolink来代替访问地址了,数据库的连接字符串就可以这样写

    mongodb://test:123456@mongolink/admin

    访问5000端口 即可看到运行结果

部署nginx

  1、拉取镜像

docker pull nginx

  2、创建并运行容器

docker  run --name test_nginx  -p :  -d -v /root/docker/nginx/proxy.conf:/etc/nginx/conf.d  nginx

    挂载配置文件目录

    增加一个配置文件default.conf

server {
listen 80;
location / {
proxy_pass http://内网Ip:5000;
proxy_set_header Host $host;
}
}

    这里需要注意,ip不可用127.0.0.1,不同容器处于不同的网络中

    当然这里我们也可以添加link 来使用别名,这样就避免了换机器部署修改配置文件的麻烦

docker  run --name test_nginx --link testcontainer:weblink  -p 80:80  -d -v /root/docker/nginx/proxy.conf:/etc/nginx/conf.d  nginx

    配置文件就可以修改成这样,注意端口不需要加

server {
listen 80;
location / {
proxy_pass http://weblink;
proxy_set_header Host $host;
}
}

总结

  docker官方镜像是非常丰富的,不需要考虑环境配置问题,可以很方便的进行部署。将数据目录全部挂载到宿主机,这样迁移的时候直接移动过去,可以省去不少麻烦。

Docker--部署mongodb+.netcore+nginx的更多相关文章

  1. (八) Docker 部署 mongodb

    参考并感谢 官方文档 https://hub.docker.com/_/mongo 下载mongo镜像(不带tag标签则表示下载latest版本) docker pull mongo 启动 mongo ...

  2. docker 部署 mongodb 并且开启远程连接

    mongodb 使用 docker 部署 mongodb 拉取镜像 docker pull mongo 可以查看镜像是否下载成功 docker images | grep mongo 应该会有如下的显 ...

  3. 使用Docker 部署MongoDB

    使用 Docker 部署 MongoDB 查看官网安装教程后感觉直接使用包管理器安装mongo比较复杂,本文主要介绍使用docker安装部署mongo的方法,并对基本配置项进行自定义.保姆式全程指导. ...

  4. Docker部署Django项目+Nginx+Fluend日志收集 和redis、memcached、RabbitMQ、Celery

    前言 一.docker 1.docker是什么? Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我可以把写的Django的WEB应用以及Python ...

  5. Docker 部署 ELK 收集 Nginx 日志

    一.简介 1.核心组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引 ...

  6. 基于docker部署flask+gunicorn+nginx

    nginx安装在/etc/下,项目映射在docker中的/var/www/下 1.创建docker容器将端口映射出来,将docker外的项目映射到docker中 #docker run -it -p ...

  7. Docker部署Mysql, Tomcat, Nginx, Redis

    1. Mysql部署 问题及解决方案 容器内的网络和外部机器不能直接通信 外部机器和宿主机可以直接通信 宿主机和容器可以直接通信 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射 ...

  8. 用docker部署flask+gunicorn+nginx

    说来惭愧,写了好几个flask django项目都是在原型阶段直接python app.py 运行的,涉及到部署用nginx和gunicorn 都是让别人帮我部署的,据说好像说很麻烦的样子,我就没自己 ...

  9. 使用 Docker 部署 MongoDB 分片

    创建配置服务复制集 docker run --name configsvr0 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsv ...

随机推荐

  1. luoguP3017Brownie Slicing

    https://www.luogu.org/problem/P3017 题意 给你一个蛋糕,R行C列 ,每个点有巧克力碎屑(如下) 1 2 2 1 3 1 1 1 2 0 1 3 1 1 1 1 1 ...

  2. SQL Server 迁移数据库 (四)备份和还原

    1. 备份 2. 复制 3. 粘贴 4. 还原 截图软件出问题了,估计重启下就好,但是备份还原比较简单,懂的都懂,马上下班了就不贴图了.

  3. windows/tomcat 修改java虚拟机JVM以utf-8字符集加载class文件的两种方式

      1.情景展示 做了这么长时间的java开发,但是,你知道JVM是以怎样的编码加载.解析class文件的吗? 我们知道,通常情况下,我们会将java文件的字符集修改成utf-8,这样,理所当然地就认 ...

  4. 【新特性速递】单元格导航(上下左右键,TAB键和ENTER键)

    上下左右按键 其实单元格导航(上下左右按键,需要启用表格的ShowSelectedCell属性)一直都存在,只不过之前的版本(v5.5.0)有一些小的BUG. BUG1 比如锁定列存在时,上下左右键只 ...

  5. 三、ForkJoin分析

    ForkJoin分析 一.ForkJoin ​ ForkJoin是由JDK1.7后提供多线并发处理框架.ForkJoin的框架的基本思想是分而治之.什么是分而治之?分而治之就是将一个复杂的计算,按照设 ...

  6. vue v-html 富文本解析 空格,换行,图片大小问题

    1.保留空格,换行属性 //保留换行空格问题 white-space: pre-wrap; 2.超出部分,强制换行,一般用于数字 //富文本换行 word-wrap: break-word; tabl ...

  7. python I/O多路复用 使用http完成http请求

    1. 使用类实现比较方便我们使用里面的参数 2. 我们使用selector,不适用select from selectors import DefaultSelector 3. I/O多路复用是指使用 ...

  8. 修改设置notepad++默认保存文件格式

    设置notepad++保存文件的默认格式 在使用notepad++新建文件保存后,有的时候会有一个all type 然后没有文件扩展名,很不方便 网上有很多帖子都是如下图所示的提示,但是却不生效

  9. Python 学习 第17篇:从SQL Server数据库读写数据

    在Python语言中,从SQL Server数据库读写数据,通常情况下,都是使用sqlalchemy 包和 pymssql 包的组合,这是因为大多数数据处理程序都需要用到DataFrame对象,它内置 ...

  10. [Flutter] 转一个Flutter学习思维导图

    本文的思维导图均转自QQ群,感谢原作者(是谁?) 表单 按钮 视图 Sliver 路由 (Routes) 输入控件 对话框 MDC (Material Design Component) 状态管理 R ...