zoukankan      html  css  js  c++  java
  • 使用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启动方式,欢迎一起沟通交流。

  • 相关阅读:
    leetCode 116.Populating Next Right Pointers in Each Node (为节点填充右指针) 解题思路和方法
    最终考过了驾照考试,如今就=驾照下来了
    JSON.parseObject的几种用法
    mybatisplus构造器 condition
    MyBatis中jdbcType=INTEGER、VARCHAR作用
    mybatis动态sql
    数据库表可以没有外键
    msyql的子查询,或者叫嵌套查询
    mysql 的编写顺序和执行顺序
    StringUtils的isBlank()方法
  • 原文地址:https://www.cnblogs.com/Erik_Xu/p/6662936.html
Copyright © 2011-2022 走看看