前言

  公司租用的阿里云的服务器,每年会更换一次,很麻烦,还容易出问题,想会不会有更方便的方式来迁移服务器,就这样接触到了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. 5. Go语言—数据类型

    一.变量作用域 在函数内部声明的变量叫做局部变量,声明周期仅限于函数内部. 在函数外部声明的变量叫做全局变量,声明周期作用于整个包,如果是大写的,则作用于整个程序. 二.类型 1. 类型转换 ​ ty ...

  2. 攻防世界pwn-Mary_Morton

    题目连接 https://adworld.xctf.org.cn/media/task/attachments/532c53dce1ce4f5d88461e4c2a336468 友情连接 https: ...

  3. Misc-不简单的压缩包

    题目下载地址 https://ctf.bugku.com/files/e5a937a3985f5264a723bcbd0e062b0f/zip 友情连接同时也是网上看到的第一份关于这题的writeup ...

  4. NOIP2007 奖学金 结构体排序

    是结构体排序的练习题,可供选手们巩固结构体排序的一些相关内容. 关于结构体排序 1.结构体定义 struct student { int num,a,b,c,sum; }p[]; 2.结构体初始化 ; ...

  5. luoguP3181 [HAOI2016]找相同字符

    题意 考虑将\(s1\)和\(s2\)接在一起求出相同子串个数,再求出\(s1\)自己匹配的相同子串个数和\(s2\)自己匹配的相同子串个数减去即可. 如何求相同子串个数: 我们知道子串的集合即所有后 ...

  6. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) F. Tree Factory 构造题

    F. Tree Factory Bytelandian Tree Factory produces trees for all kinds of industrial applications. Yo ...

  7. 解决WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

    问题: 当我想要利用win10本地的cmd进行: ssh root@192.168.1.230 时,出现了如下错误: C:\Users\Raodi>ssh root@192.168.1.230 ...

  8. 【新特性速递】树控件结构由单层 TR 改为 TR-TD-TABLE 层级嵌套

    FineUIPro/Mvc/Core的下个版本(v6.1.0),我们对树控件进行了优化,由原来的单层 TR 改为 TR-TD-TABLE 层级嵌套,从而做到表里如一. 上个版本(v6.0.0),我们对 ...

  9. 深入理解Java8中Stream的实现原理

    Stream Pipelines 前面我们已经学会如何使用Stream API,用起来真的很爽,但简洁的方法下面似乎隐藏着无尽的秘密,如此强大的API是如何实现的呢?比如Pipeline是怎么执行的, ...

  10. CentOS设置主机名称

    1.查看主机名,使用命令hostname: 2.修改主机名,修改/etc/hostname文件