docker compose 基本使用。docker compose发布.net core项目 电脑版发表于:2023/10/8 17:33 [TOC] ### docker compose 介绍 tn2>通过一个配置文件,可以让系统一键启动所有的运行环境,nodejs,mysql,redis,mongodb 等。<br/> 如果开发环境需要多个服务,就需要启动多个 Docker 容器。要连通多个 Docker 容器,就需要 Docker-compose。并且提供了 scale (服务扩容) 的功能。方便多多个容器一键管理。<br/> 就算是针对单个容器的更新也不用每次都去执行编译镜像,停止与删除容器,然后重新启动容器这样就有点麻烦了,如果用docker-compose一句话就可以操作了 tn4>docker-compose 可以记录你启动容器时候的命令,方便随时修改。而且复杂一点的命令代码可读性也更高。容器之间的依赖关系,比较清晰,比一个一个的手动使用命令启动要清晰很多。其实主要就是方便后期的维护和管理。 ##### docker compose与docker-compose中间有杠和没杠的区别 tn5>1、独立安装的Compose,不论是V1还是V2版本,指令都是docker-compose 2、插件安装的Compose,在V2版本,指令是docker compose(中间是空格),新版的docker安装时会自动以插件的形式自动安装docker compose 3、支持同时采用两种方式安装Compose,安装后可以同时使用docker-compose和docker compose 我这里是安装docker的时候自动以插件的形式自动安装docker compose所以使用命令的时候总结不需要加段横线 ## docker compose 常用命令 #### 查看docker compose 的帮助命令 使用docker compose --help或者docker compose都可以 ![](https://img.tnblog.net/arcimg/aojiancc2/577c5ccf033649f39c8228a77c0c5faf.png) #### 查看docker compose的版本 ``` docker compose version ``` ![](https://img.tnblog.net/arcimg/aojiancc2/322dc2eea07d4c22a90ac8dab7ab9981.png) #### docker compose ls 列出所有运行的服务容器 ![](https://img.tnblog.net/arcimg/aojiancc2/080e18d38e024c0ca40be1e6e812a4af.png) 列出所有服务容器(包括未运行的容器) ``` docker-compose ls -a ``` #### docker compose ps 查看docker compose运行的容器,要有运行才能查看到,否者看不到且有相关提示 ![](https://img.tnblog.net/arcimg/aojiancc2/36fc6fc620184a9ab07c98ce4a673771.png) 查看docker compose运行的以及未运行的容器 ``` docker-compose ps -a ``` #### 启动,构建等常用命令 ``` 构建并启动所有容器,如果镜像存在就重新构建 docker compose up -d --build 构建并启动指定的容器,如果镜像存在就重新构建 docker compose up -d --build xxx 启动所有服务 docker compose up -d ``` #### docker compose up -d与docker compose up -d --build的区别 **docker-compose up -d** `docker-compose up -d`命令用于启动已定义在`docker-compose.yml`文件中的服务容器,并以守护进程的方式在后台运行。 具体解释如下: - `docker-compose`: 是一个用于定义和运行多个容器应用的工具。 - `up`: 用于创建并启动容器。 - `-d`或`--detach`: 表示以守护进程的方式运行容器,即在后台运行,不会阻塞终端。 **docker-compose up --build** `docker-compose up --build`命令用于重新构建并启动服务容器。 具体解释如下: - `docker-compose`: 是一个用于定义和运行多个容器应用的工具。 - `up`: 用于创建并启动容器。 - `--build`: 表示重新构建容器的镜像。 当你执行`docker-compose up --build`命令时,`docker-compose`会解析`docker-compose.yml`文件,并根据文件中定义的服务配置重新构建容器的镜像。这意味着它会重新执行容器镜像的构建过程,包括下载依赖、安装软件、配置环境等步骤。 **两种启动方式的区别总结** - `docker-compose up -d`命令用于启动已经存在的服务容器,如果服务容器不存在则会自动创建。-d参数表示以守护进程的方式运行容器。 - `docker-compose up --build`命令用于重新构建服务容器。如果服务容器已经存在,该命令会先停止并移除现有的容器,然后重新构建并启动容器。如果服务容器不存在,则会直接构建并启动容器。 - 总结来说,`docker-compose up -d`用于启动已经存在的服务容器,而`docker-compose up --build`用于重新构建并启动服务容器。 ## docker compose发布.net core项目 docker 发布.net core可以参考:https://www.tnblog.net/aojiancc2/article/details/5030 现在我们使用docker compose就是简化发布的步骤,让原本需要的去执行编译镜像,停止与删除容器,然后重新启动容器,变成一条命令。项目的发布和上传以及dockerfile文件的准备这里就不说了,参考前面给的链接即可。 #### 一:创建与编写好docker-ocmpose.yml文件 可以先使用touch命令创建好docker-ocmpose.yml文件,在使用vim命令添加下面的内容: ``` version: "3.8" services: inquiry_api: build: context: ./inquirySysApi # dockerfile: Dockerfile image: inquiry_api:latest container_name: inquiry_api restart: always ports: - "8003:8003" environment: - TZ=Asia/Shanghai ``` **配置说明:** inquiry_api 服务名称,可以配多个服务。 container_name 容器名称。 build 构建镜像路径及自定义dockerfile名称(可以不写会找默认的dockerfile文件)。 image 镜像名。 ports 对外暴露的端口(8003)与容器内部端口(8003)。 restart: alway docker启动时或容器挂掉时自动重启。 **相关路径说明** ![](https://img.tnblog.net/arcimg/aojiancc2/aab761a9734b4772b6f74b12d9acbaf7.png) 我们需要发布的项目的文件在inquirySysApi下,所以上面docker-ocmpose.yml配置的build中context路径是./inquirySysApi,这个需要根据实际情况针对性调整即可,我这里是这样的。 具体的需要编辑成镜像的项目就是在inquirySysApi下,Dockerfile文件也在这个里边 <img src="https://img.tnblog.net/arcimg/aojiancc2/76f0c23d360e4196a1be1625b73047d7.png" style="width:500px;height:auto;"> #### 二:执行构建并启动服务容器命令 执行构建并启动服务容器命令 ``` docker compose up -d --build inquiry_api ``` <img src="https://img.tnblog.net/arcimg/aojiancc2/178e7be91f6c428ba82db035c113580e.png" style="width:500px;height:auto;"> 上面的命令指定了服务名称,也可以不指定直接执行docker compose up -d --build这样就是作用到这个docker-ocmpose.yml下面的所有服务了,这个的示例只有一个服务所以接不接都一样。 如果执行的时候提示容器已经存在了,删除掉就行了,说明以前是直接手动启动的容器,没有通过docker compose去启动容器。 **查看运行状态** ![](https://img.tnblog.net/arcimg/aojiancc2/080e18d38e024c0ca40be1e6e812a4af.png) ![](https://img.tnblog.net/arcimg/aojiancc2/36fc6fc620184a9ab07c98ce4a673771.png) #### 三:下次在执行发布的时候只需要把项目发布后上传执行一句命令即可 下次在执行发布的时候只需要把项目发布后上传执行一句命令即可,就简化了每次发布都需要的停止删除容器,编译镜像,在启动容器的步骤了 ``` docker compose up -d --build inquiry_api ```