使用Docker分分钟启动常用应用
前言
Docker是目前比较火的一个概念,同时也是微服务中比较关键的一个容器化技术。但是,单从理论上好难看出Docker的优势,因此,我希望在这篇文章中提供一些Docker的使用示例,希望从实际应用上帮助大家理解Docker的优势,同时也对自己的Docker使用进行简单的记录。
目录
准备事项
一、启动.Net Core
二、启动静态Html
三、启动Mysql
四、启动MongoDB
五、启动Redis
六、启动RabbitMQ
七、启动Nginx
八、启动Eureka
九、启动Config Server
准备事项
1. 安装Docker
我使用的操作系统是CentOS 7/7.1,如何安装Docker,可以参考园子里的这篇文章:《Centos安装Docker》。
2. Docker加速
Docker的标准镜像库Docker Hub在国外,不进行Docker加速的话拉取镜像会比较慢,这里我使用道客(DaoCloud)来进行Dokcer加速。在“配置Docker加速器”里有配置加速的指令:

在Linux中进行配置
执行sudo su -,获取root权限,如果本身是root帐号,可跳过:

执行道客的配置指令:

执行systemctl restart docker,重启Docker:

一、启动.Net Core
1. 拉取dotnet标准镜像,镜像地址:https://hub.docker.com/r/microsoft/dotnet/
2. 拉取镜像:docker pull microsoft/dotnet

3. 执行docker images查看已下好的镜像

4. 新建一个.Net Core HelloWorld程序并发布

5. 准备Dockerfile,并把Dockerfile拷贝到HelloWorld程序同级目录。注:.Net Core运行的默认端口是5000,这里通过环境变量的方式把端口修改为8080
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app EXPOSE 8080/tcp
ENV ASPNETCORE_URLS http://*:8080 ENTRYPOINT ["dotnet", "HelloWorld.dll"]
6. 定位到程序目录,执行指令把HelloWorld程序打包成Docker镜像
docker build -t hello-world:1.0 .


7. 运行Docker容器
docker run --name hello-world -p 8080:8080 -d hello-world:1.0

8. 检查结果

二、启动静态Html
1. 拉取Nginx官方镜像,镜像地址:https://hub.docker.com/_/nginx/
2. 拉取镜像:docker pull nginx
3. 准备html程序,可以使用我之前的一个Durandal的示例:https://github.com/ErikXu/DurandalDemo

4. 准备Dockerfile,并把Dockerfile拷贝到Html程序同级目录。注:程序中需要有一个入口页面,如index.html
FROM nginx:latest
COPY . /usr/share/nginx/html
5. 定位到程序目录,执行指令把Html程序打包成Docker镜像
docker build -t html:1.0 .

6. 运行Docker容器,注:这里把容器中的80端口映射到虚拟机的81端口
docker run --name html -p 81:80 -d html:1.0

7. 检查结果

三、启动Mysql
1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/mysql/
2. 拉取镜像:docker pull mysql
3. 准备Mysql数据存放目录,我这里是:/home/erikxu/mysql
4. 执行指令启动Mysql
docker run --name mysql -v /home/erikxu/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

5. 检查结果


四、启动MongoDB
1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/mongo/
2. 拉取镜像:docker pull mongo
3. 准备MongoDB数据存放目录,我这里是:/home/erikxu/mongo
4. 执行指令启动MongoDB
docker run --name mongo -v /home/erikxu/mongo:/data/db -p 27017:27017 -d mongo:latest

5. 检查结果


五、启动Redis
1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/redis/
2. 拉取镜像:docker pull redis
3. 执行指令启动Redis
docker run --name redis -d -p 6379:6379 redis

4. 检查结果

六、启动RabbitMQ
1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/rabbitmq/
2. 拉取镜像:docker pull rabbitmq,如需要管理界面:docker pull rabbitmq:management
3. 执行指令启动RabbitMQ
无管理界面:
docker run --hostname rabbit-host --name rabbit -d -p 5672:5672 rabbitmq
有管理界面:
docker run --hostname rabbit-host --name rabbit -d -p 5672:5672 -p 15672:15672 rabbitmq:management

4. 检查结果

七、启动Nginx
1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/nginx/
2. 拉取镜像:docker pull nginx
3. 准备配置文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name 192.168.52.130;
location / {
proxy_pass http://192.168.52.130:81/;
}
location /html/ {
proxy_pass http://192.168.52.130:81/;
}
location /dotnet/ {
proxy_pass http://192.168.52.130:8080/;
}
}
}
4. 执行指令启动Nginx
docker run --name nginx -p 80:80 -v /home/erikxu/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

5. 检查结果



八、启动Eureka
1. 拉取官方镜像,镜像地址:https://hub.docker.com/r/springcloud/eureka/
2. 拉取镜像:docker pull springcloud/eureka
3. 执行指令启动Eureka
docker run --name eureka -d -p 8761:8761 springcloud/eureka

4. 检查结果
未有服务注册:

下载SteelToe示例:https://github.com/SteeltoeOSS/Samples
打开Discovery,并修改appsetting.json:

按照README文档描述启动服务,进行服务注册:

九、启动Config Server
1. 拉取官方镜像,镜像地址:https://hub.docker.com/r/hyness/spring-cloud-config-server/
2. 拉取镜像:docker pull hyness/spring-cloud-config-server
3. 在GitHub上准备配置文件:https://github.com/ErikXu/.NetCore-Spring-Clould/tree/master/Configs
4. 准备启动资源文件application.yml:
info:
component: config service server:
port: 8888 spring:
application:
name: git-config
profiles:
active: dev
cloud:
config:
server:
git:
uri: https://github.com/ErikXu/.NetCore-Spring-Clould
searchPaths: Configs
5. 执行指令启动Config Server,注:该指令前无空格
docker run --name configsvr -it -d -p 8888:8888 \
-v /home/erikxu/config/application.yml:/config/application.yml \
hyness/spring-cloud-config-server

6. 检查结果

最后
如果大家有什么问题,或者需要添加其他程序的Docker启动方式,欢迎一起沟通交流。
使用Docker分分钟启动常用应用的更多相关文章
- Docker Compose 配置文件常用指令
Docker Compose 配置文件常用指令 YAML文件格式及编写注意事项 YAML是一种标记语言很直观的数据序列化格式,可读性高.类似于XML数据描述语言,语法比XML简单的很多. YAML数据 ...
- Docker 入门指南——常用命令
前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令. 基本概念 镜像 Image 镜像是一些打包好的已有的环境,可以被用来启动和创建容器 容器 Contai ...
- Docker三剑客之常用命令
一.docker-machine 命令 说明 docker-machine create 创建一个 Docker 主机(常用-d virtualbox) docker-machine ls 查看所有的 ...
- Docker安装和常用命令
Docker安装 Docker的安装可以参考 https://docs.docker.com/ 下面的 Get Docker / Docker CE / Linux, 需要关注的主要是CentOS和U ...
- docker 安装与常用命令与常用容器(containers)环境
注意区别 container 与 image 的关系,container 的建立需要 image 的承载,也即 container 依赖 image,停止并删除了 container 并不会删除 im ...
- Docker系列之常用命令操作手册
目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...
- Docker Private Registry 常用组件
Docker Private Registry 常用组件 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Docker Registry概述 1>.什么是registry ...
- Docker入门以及常用命令
目的: Docker入门 Docker简介 Centos7安装Docker Docker HelloWorld运行原理解析 阿里云镜像仓库配置 Docker常用命令 Docker基本命令 Docker ...
- docker基本使用-常用命令
一. 常用命令 #查看docker服务 docker ps #启动docker服务 systemctl start docker #查看本地镜像 docker images #删除本地镜像 docke ...
随机推荐
- Redis从入门到精通
什么是Redis? Redis是非关系型数据库,是一个高性能的key-value数据库,它是开源的,更是免费的. Redis能做什么? 存储数据 Redis的优点有哪些? 1.它支持存储丰富的数据类型 ...
- Unbutu14.04 启用 root 并禁用guest
系统环境: Ubuntu14.04 x64 问题描述: Ubuntu14.04的64位系统默认禁用 root 账号登录 解决方式: 1. 为root设置密码 sudo passw ...
- Extjs中grid前端分页使用PagingMemoryProxy【二】
在项目中遇到Grid前端分页,本人也是刚接触extjs没多久,为了实现效果,一直找了很久才实现出来,对于代码中的一些也不能详细的说明出来, 不知道能不能帮助到遇到同样问题的朋友,所以将例子代码 ...
- java程序员入门:英语好不好对编程到底有没有影响
我想当码农,听说钱钱拿的多! 哦.是很有钱!么样? 可是我不会! 那你想么样?去学撒! 可是,我英语差-- 有多差??? 很差-- 那????? 关于英语水平对编程的影响,我们一起来看看啦!希望可以解 ...
- I3D Next-Gen Game Development with Unity3D Vol I学习笔记(上)
这部教程主题是讲述如何在Unity中安放模型以及对场景进行优化(面对的是次世代平台).第二章看到一半,看不下,索性直接凭借Maya和Torque的经验自己操作. 看教程总结的原则如下(or tips) ...
- 使用promise手动封装ajax函数
最近在做一个单页应用,node和浏览器仅通过json传输数据,因为是只有自己用等于是锻炼一下自己,所以也不用考虑seo的问题,node端我已经写好了,但是浏览器端想要用ajax原生太麻烦,用封装的函数 ...
- 制作流程图,activity,好不容易找到的
Star UML指导手册 Module by: Stephen Wong 原著:Stephen Wong 翻译:火猴 1. 综述:http://pan.baidu.com/s ...
- System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt".
昨天遇到一个比较奇怪的问题,运行VS2010调试程序的时候,总是会报一个错,然后程序就挂掉了:无可用源….,弹出一个窗口提示:System.AccessViolationException: Atte ...
- Android 实现QQ第三方登录
Android 实现QQ第三方登录 在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wi ...
- 【转】JavaScript 之arguments、caller 和 callee 介绍
1.前言 arguments, caller , callee 是什么? 在JavaScript 中有什么样的作用?本篇会对于此做一些基本介绍. 本文转载自:http://blog.csdn.ne ...