CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose

1.什么是Docker-Compose 上一章我们讲了通过Dockerfile创建镜像,这在一个小项目中是没问题的,但如果在一个包含多个项目的情况下,我们每次部署都需要执行多次创建镜像与运行容器的命令,这样就比较麻烦,为了解决这种情况,Docker-Compose出现了。Docker-Compose主要就是为了解决在一台服务器创建镜像与运行容器复杂的问题,有了Docker-Compose我们就可以通过一条命令,生成多镜像与运行容器。 2.Docker-Compose安装 sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose 查看安装是否成功 3.创建两个.netcore项目,不启用https ServerProvider项目 新增Dockerfile 复制代码 FROM microsoft/dotnet:2.1-aspnetcore-runtime MAINTAINER yishi.chen LABEL description="this is a serverprovider website" LABEL version="1.0" ARG serverport WORKDIR /app COPY bin/Release/netcoreapp2.1/publish/ . EXPOSE $serverport ENTRYPOINT ["dotnet","ServerProvider.dll"] 复制代码 Program.cs改动 复制代码 public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUrls($"http://*:{Environment.GetEnvironmentVariable("serverport")}") .UseStartup(); 复制代码 ValuesController.cs改动 复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; namespace ServerProvider.Controllers { [Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { // GET api/values [HttpGet] public ActionResult> Get() { return new string[] { "this is serverprovider's result" }; } } } 复制代码 ServerConsumer项目 新增Dockerfile 复制代码 FROM microsoft/dotnet:2.1-aspnetcore-runtime MAINTAINER yishi.chen LABEL description="this is a serverconsumer website" LABEL version="1.0" ARG consumerport WORKDIR /app COPY bin/Release/netcoreapp2.1/publish/ . EXPOSE $consumerport ENTRYPOINT ["dotnet","ServerComsumer.dll"] 复制代码 Program.cs改动 复制代码 public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUrls($"http://*:{Environment.GetEnvironmentVariable("consumerport")}") .UseStartup(); 复制代码 ValueController.cs改动 复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; namespace ServerComsumer.Controllers { [Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { // GET api/values [HttpGet] public ActionResult> Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 [HttpGet("{id}")] public async Task> Get(int id) { var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); return await httpClient.GetAsync(Environment.GetEnvironmentVariable("serverurl")).Result.Content.ReadAsStringAsync(); } } } 复制代码 新建docker-compose.yml编排文件 内容如下(docker-compose的配置请见https://www.cnblogs.com/chenyishi/p/9965479.html): 复制代码 version: '3' services: s_provider: build: context: ./ServerProvider/ dockerfile: Dockerfile args: serverport: 1000 ports: - "1000:1000" environment: serverport: 1000 container_name: c_provider s_consumer: build: context: ./ServerComsumer/ dockerfile: Dockerfile args: consumerport: 2000 ports: - "2000:2000" links: - s_provider:s_provider environment: consumerport: 2000 serverurl: http://s_provider:1000/api/values/ container_name: c_consumer 复制代码 4.定位到docker-compose文件所在目录,运行docker-compose [root@cys-test-centos WebDocker]# docker-compose up 运行成功,状态如下: 5.另起一个命令窗口,测试接口 [root@cys-test-centos ~]# curl http://localhost:1000/api/values ["this is serverprovider's result"] root@cys-test-centos ~]# curl http://localhost:2000/api/values ["value1","value2"] [root@cys-test-centos ~]# curl http://localhost:2000/api/values/1 ["this is serverprovider's result"] 以上是通过docker-compose 新建镜像,并运行容器,如果镜像已存在,则可以去掉构建的过程,我们稍微对docker-compose文件做一下调整 6.在上面步骤的前提下,先CtrlC停止容器,然后docker-compsoe down删除容器 复制代码 [root@cys-test-centos WebDocker]# docker-compose down Removing c_consumer ... done Removing c_provider ... done Removing network webdocker_default 复制代码 7.查看生成的镜像 复制代码 [root@cys-test-centos WebDocker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE webdocker_s_consumer latest cc95654856e1 17 minutes ago 253MB webdocker_s_provider latest 5b744758b56b 17 minutes ago 253MB microsoft/dotnet 2.1-aspnetcore-runtime db366d73508b 4 days ago 253MB 复制代码 镜像名为:webdocker_s_provider与webdocker_s_consumer 8.修改docker-compose.yml文件 复制代码 version: '3' services: s_provider: image: webdocker_s_provider ports: - "1000:1000" environment: serverport: 1000 container_name: c_provider s_consumer: image: webdocker_s_consumer ports: - "2000:2000" links: - s_provider:s_provider environment: consumerport: 2000 serverurl: http://s_provider:1000/api/values/ container_name: c_consumer 复制代码 9.验证接口 [root@cys-test-centos ~]# curl http://localhost:2000/api/values/1 ["this is serverprovider's result"] 到此Docker-Compose介绍完毕,下一章讲Docker三剑客之Docker-machinehttps://www.cnblogs.com/chenyishi/p/10000693.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信