丫丫吖 發表於 2017-4-9 20:23:00

使用Docker分分钟启动常用应用

<h1>前言</h1>
<p>  Docker是目前比较火的一个概念,同时也是微服务中比较关键的一个容器化技术。但是,单从理论上好难看出Docker的优势,因此,我希望在这篇文章中提供一些Docker的使用示例,希望从实际应用上帮助大家理解Docker的优势,同时也对自己的Docker使用进行简单的记录。</p>
<p>&nbsp;</p>
<h1>目录</h1>
<h2>  准备事项</h2>
<h3>  一、启动.Net Core</h3>
<h3>  二、启动静态Html</h3>
<h3>  三、启动Mysql</h3>
<h3>  四、启动MongoDB</h3>
<h3>  五、启动Redis</h3>
<h3>  六、启动RabbitMQ</h3>
<h3>  七、启动Nginx</h3>
<h3>  八、启动Eureka</h3>
<h3>  九、启动Config Server</h3>
<p>&nbsp;</p>
<h1 id="prepare">准备事项</h1>
<p>  1. 安装Docker</p>
<p>  我使用的操作系统是CentOS 7/7.1,如何安装Docker,可以参考园子里的这篇文章:《Centos安装Docker》。</p>
<p>&nbsp;</p>
<p>  2. Docker加速</p>
<p>  Docker的标准镜像库Docker Hub在国外,不进行Docker加速的话拉取镜像会比较慢,这里我使用道客(DaoCloud)来进行Dokcer加速。在“配置Docker加速器”里有配置加速的指令:</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170403190527644-2063126905.bmp" alt=""></p>
<p>&nbsp;</p>
<p>  在Linux中进行配置</p>
<p>  执行sudo su -,获取root权限,如果本身是root帐号,可跳过: </p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170403190926332-113329958.png" alt=""></p>
<p>&nbsp;</p>
<p>  执行道客的配置指令:</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170403191717441-343154037.png" alt=""></p>
<p>&nbsp;</p>
<p>  执行systemctl restart docker,重启Docker:</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170403191933597-1612168986.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="dotnet">一、启动.Net Core</h1>
<p>  1. 拉取dotnet标准镜像,镜像地址:https://hub.docker.com/r/microsoft/dotnet/</p>
<p>  2. 拉取镜像:docker pull microsoft/dotnet</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170403194538253-916987269.png" alt=""></p>
<p>&nbsp;</p>
<p>  3. 执行docker images查看已下好的镜像</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170403214717222-2107913335.png" alt=""></p>
<p>&nbsp;</p>
<p>  4. 新建一个.Net Core HelloWorld程序并发布</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404110429160-185507793.png" alt=""></p>
<p>&nbsp;</p>
<p>  5. 准备Dockerfile,并把Dockerfile拷贝到HelloWorld程序同级目录。注:.Net Core运行的默认端口是5000,这里通过环境变量的方式把端口修改为8080</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

EXPOSE 8080/tcp
ENV ASPNETCORE_URLS http://*:8080

ENTRYPOINT ["dotnet", "HelloWorld.dll"]
</pre>
</div>
<p>  </p>
<p>  6. 定位到程序目录,执行指令把HelloWorld程序打包成Docker镜像</p>
<p>  docker build -t hello-world:1.0 .</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404111939472-524945459.png" alt=""></p>
<p>&nbsp;</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404112156207-999826766.png" alt=""></p>
<p>&nbsp;</p>
<p>  7. 运行Docker容器</p>
<p>  docker run --name hello-world -p 8080:8080 -d hello-world:1.0</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404112407285-1197303956.png" alt=""></p>
<p>&nbsp;</p>
<p>  8. 检查结果</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404112448707-1042879529.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="html">二、启动静态Html</h1>
<p>  1. 拉取Nginx官方镜像,镜像地址:https://hub.docker.com/_/nginx/</p>
<p>  2. 拉取镜像:docker pull nginx</p>
<p>  3. 准备html程序,可以使用我之前的一个Durandal的示例:https://github.com/ErikXu/DurandalDemo</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404113441582-1095007464.png" alt=""></p>
<p>  4.&nbsp;准备Dockerfile,并把Dockerfile拷贝到Html程序同级目录。注:程序中需要有一个入口页面,如index.html</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">FROM nginx:latest
COPY . /usr/share/nginx/html
</pre>
</div>
<p>  </p>
<p>  5.&nbsp;定位到程序目录,执行指令把Html程序打包成Docker镜像</p>
<p>  docker build -t html:1.0 .</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404113758191-255686003.png" alt=""></p>
<p>&nbsp;</p>
<p>  6.&nbsp;运行Docker容器,注:这里把容器中的80端口映射到虚拟机的81端口</p>
<p>  docker run --name html -p 81:80 -d html:1.0</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404114033800-273403015.png" alt=""></p>
<p>&nbsp;</p>
<p>  7.&nbsp;检查结果</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404114232644-97110382.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="mysql">三、启动Mysql</h1>
<p>  1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/mysql/</p>
<p>  2. 拉取镜像:docker pull mysql</p>
<p>  3. 准备Mysql数据存放目录,我这里是:/home/erikxu/mysql</p>
<p>  4. 执行指令启动Mysql</p>
<p>  docker run --name mysql -v&nbsp;/home/erikxu/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404115321128-660236100.png" alt=""></p>
<p>&nbsp;</p>
<p>  5. 检查结果</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404115110988-329369639.png" alt=""></p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404115537535-767003377.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="mongo">四、启动MongoDB</h1>
<p>  1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/mongo/</p>
<p>  2. 拉取镜像:docker pull mongo</p>
<p>  3. 准备MongoDB数据存放目录,我这里是:/home/erikxu/mongo</p>
<p>  4. 执行指令启动MongoDB</p>
<p>  docker run --name mongo -v /home/erikxu/mongo:/data/db -p 27017:27017 -d mongo:latest</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404120250066-1453059038.png" alt=""></p>
<p>&nbsp;</p>
<p>  5. 检查结果</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404120441253-1955030513.png" alt=""></p>
<p>&nbsp;</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404120509535-216630808.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="redis">五、启动Redis</h1>
<p>  1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/redis/</p>
<p>  2.&nbsp;拉取镜像:docker pull redis</p>
<p>  3. 执行指令启动Redis</p>
<p>  docker run --name redis -d -p 6379:6379 redis</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404121504082-538286912.png" alt=""></p>
<p>&nbsp;</p>
<p>  4. 检查结果</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404122304503-433662852.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="rabbit">六、启动RabbitMQ</h1>
<p>  1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/rabbitmq/</p>
<p>  2.&nbsp;拉取镜像:docker pull rabbitmq,如需要管理界面:docker pull rabbitmq:management</p>
<p>  3. 执行指令启动RabbitMQ</p>
<p>  无管理界面:</p>
<p>  docker run --hostname rabbit-host --name rabbit -d -p 5672:5672 rabbitmq</p>
<p>  有管理界面:</p>
<p>  docker run --hostname rabbit-host --name rabbit -d -p 5672:5672 -p 15672:15672&nbsp;rabbitmq:management</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404163450832-1247394936.png" alt=""></p>
<p>&nbsp;</p>
<p>  4. 检查结果</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170404163535910-228706338.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="nginx">七、启动Nginx</h1>
<p>  1. 拉取官方镜像,镜像地址:https://hub.docker.com/_/nginx/</p>
<p>  2.&nbsp;拉取镜像:docker pull nginx</p>
<p>  3. 准备配置文件</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">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/;
      }
    }
}
</pre>
</div>
<p>  </p>
<p>  4. 执行指令启动Nginx</p>
<p>  docker run --name nginx -p 80:80 -v /home/erikxu/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409193240582-1846975158.png" alt=""></p>
<p>&nbsp;</p>
<p>  5. 检查结果</p>
<p>&nbsp;  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409193418863-386433955.png" alt=""></p>
<p>&nbsp;</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409193518738-1306821989.png" alt=""></p>
<p>&nbsp;</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409193555925-1315216035.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="eureka">八、启动Eureka</h1>
<p>  1. 拉取官方镜像,镜像地址:https://hub.docker.com/r/springcloud/eureka/</p>
<p>  2.&nbsp;拉取镜像:docker pull springcloud/eureka</p>
<p>  3. 执行指令启动Eureka</p>
<p>  docker run --name eureka -d -p 8761:8761 springcloud/eureka</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409195143878-1375719512.png" alt=""></p>
<p>  </p>
<p>  4.&nbsp;检查结果</p>
<p>  未有服务注册:</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409195517660-838532138.png" alt=""></p>
<p>&nbsp;</p>
<p>  下载SteelToe示例:https://github.com/SteeltoeOSS/Samples</p>
<p>  打开Discovery,并修改appsetting.json:</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409195828113-813555281.png" alt=""></p>
<p>  </p>
<p>  按照README文档描述启动服务,进行服务注册:</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409200614363-64543610.png" alt=""></p>
<p>&nbsp;</p>
<h1 id="configsvr">九、启动Config Server</h1>
<p>  1. 拉取官方镜像,镜像地址:https://hub.docker.com/r/hyness/spring-cloud-config-server/</p>
<p>  2.&nbsp;拉取镜像:docker pull hyness/spring-cloud-config-server</p>
<p>  3. 在GitHub上准备配置文件:https://github.com/ErikXu/.NetCore-Spring-Clould/tree/master/Configs</p>
<p>  4. 准备启动资源文件application.yml:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">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
</pre>
</div>
<p>  </p>
<p>  5. 执行指令启动Config Server,注:该指令前无空格</p>
<p>  docker run --name configsvr -it -d -p 8888:8888 \<br>  -v /home/erikxu/config/application.yml:/config/application.yml \<br>  hyness/spring-cloud-config-server</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409201618597-1732820638.png" alt=""></p>
<p>&nbsp;</p>
<p>  6.&nbsp;检查结果</p>
<p>  <img src="https://images2015.cnblogs.com/blog/182190/201704/182190-20170409201838847-1214864043.png" alt=""></p>
<p>&nbsp;</p>
<h1>最后</h1>
<p>  如果大家有什么问题,或者需要添加其他程序的Docker启动方式,欢迎一起沟通交流。</p><br><br>
来源:https://www.cnblogs.com/Erik_Xu/p/6662936.html
頁: [1]
查看完整版本: 使用Docker分分钟启动常用应用