docker入门加实战—项目部署之DockrCompose
docker入门加实战—项目部署之DockrCompose
我们部署一个简单的java项目,可能就包含3个容器:
- MySQL
- Nginx
- Java项目
而稍微复杂的项目,其中还会有各种各样的其它中间件,需要部署的东西远不止3个。如果手动的逐一部署,就太麻烦了,同时也无法保证完整性。
而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。
基本用法
docker-compose.yml文件的基本语法可以参考官方文档:
https://docs.docker.com/compose/compose-file/compose-file-v3/
docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与docker run参数非常相似。
举例来说,用docker run部署MySQL的命令如下:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
--network sjdwz_network
mysql
如果用docker-compose.yml文件来定义,就是这样:
version: "3.8"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
networks:
- new
networks:
new:
name: sjdwz_network
为了方便写路径,把我们的dokcerFIle文件和jar包放到/root目录;

/root/sjdwz_demo里的文件我们就不使用了。
我们的项目部署compose文件如下:
version: "3.8"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- sjdwz-new-network
sjdwzinstance:
build:
context: .
dockerfile: Dockerfile
container_name: sjdwzinstance
ports:
- "8080:8080"
networks:
- sjdwz-new-network
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx
ports:
- "18080:18080"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- sjdwzinstance
networks:
- sjdwz-new-network
networks:
sjdwz-new-network:
name: sjdwz-new-network
基础命令
编写好docker-compose.yml文件,就可以部署项目了。常见的命令:
https://docs.docker.com/compose/reference/
基本语法如下:
docker compose [OPTIONS] [COMMAND]
其中,OPTIONS和COMMAND都是可选参数,比较常见的有:
| 类型 | 参数或指令 | 说明 |
|---|---|---|
| Options | -f | 指定compose文件的路径和名称 |
| -p | 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念 | |
| Commands | up | 创建并启动所有service容器 |
| down | 停止并移除所有容器、网络 | |
| ps | 列出所有启动的容器 | |
| logs | 查看指定容器的日志 | |
| stop | 停止容器 | |
| start | 启动容器 | |
| restart | 重启容器 | |
| top | 查看运行的进程 | |
| exec | 在指定的运行中容器中执行命令 |
把我们的dockerCompose文件放到/root目录;

# 1.进入root目录
cd /root
# 2.删除旧容器
docker rm -f $(docker ps -qa)
# 3.删除sjdwzservice镜像
docker rmi sjdwzservice
# 4.清空MySQL数据
rm -rf mysql/data
# 5.启动所有, -d 参数是后台启动;没有-f文件是因为我们的compose文件就在这里,名字也是叫docker-compose.yml,所以不用加
docker compose up -d

查看镜像
docker compose images

访问如下

docker入门加实战—项目部署之DockrCompose的更多相关文章
- docker 实战-项目部署
前面学习了 docker 的命令和实际的用法,现在来实战一下.编排一个服务,也就是项目部署. 目前我们在一个闭源环境下工作,介绍一些工作流程和部署项目的方法. 该工作流程比较特殊 所谓闭源环境就是 没 ...
- Vue2.5开发去哪儿网App 从零基础入门到实战项目
第1章 课程介绍本章主要介绍课程的知识大纲,学习前提,讲授方式及预期收获. 1-1 课程简介 试看第2章 Vue 起步本章将快速讲解部分 Vue 基础语法,通过 TodoList 功能的编写,在熟悉基 ...
- Python开发入门与实战16-APACHE部署
16. Windows平台apache部署 本章节我们简要的描述一下如何在windows平台部署apache的django站点. Python Django 项目部署发布到windows apache ...
- Python开发入门与实战15-IIS部署
15. IIS部署 前面的章节我们完成了基本的业务功能的开发,本章节我们来说说python django项目如何部署到实际的运行环境,完成开发系统的发布工作. Python Django 项目部署发布 ...
- 实战项目部署应用到kubernetes流程(jenkins+docker+k8s)
说明 通过jenkins构建java应用程序发布到k8s集群中 本文已一个大数据的java项目来演示构建部署过程 支持发布和回滚 支持一套模板应用不同项目 k8s基础准备 创建项目名称空间 [root ...
- Docker入门与实战讲解
转载自:http://blog.csdn.net/relax_hb/article/details/69668815 简述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包 ...
- COCOS2D-JS入门-web端项目部署
下载cocos2d-js文件,建议上官网下载(外国官网或者中国官网都可以) 外国官网:http://cocos2d-x.org/download(选择最新版即可,我下载时为3.9版本,大概300多M) ...
- docker的安装及项目部署
Making Docker and Deployment Process Step: set up your docker environment build a image of activeMQ ...
- Docker入门到实战
1.系统要求 Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10. CentOS 7满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存 ...
- 《Docker 入门与实践》 已经出版了~欢迎有须要的朋友关注。
在云计算时代.开发人员将应用转移到云上已经攻克了硬件管理的问题,然而软件配置和管理相关的问题依旧存在. Docker的出现正好能帮助软件开发人员开阔思路.尝试新的软件管理方法来解决问题. 通过掌握Do ...
随机推荐
- 详解RISC v中断
声明 本文为本人原创,未经许可严禁转载.部分图源自网络,如有侵权,联系删除. RISC-V 中断与异常 trap(陷阱)可以分为异常与中断.在 RISC v 下,中断有三种来源:software in ...
- 现代C++(Modern C++)基本用法实践:N、其他零散的常用特性
概述 这一篇简单介绍一些其他的比较实用的特性,如果读者想了解现代C++的全部特性,参考:cpp reference 其他特性 预置和弃置函数default&delete 在 C++11 中引入 ...
- DataArts Studio实践丨通过Rest Client 接口读取RESTful接口数据的能力
本文分享自华为云社区<DataArts Studio 通过Rest Client 接口读取RESTful接口数据的能力,通过Hive-SQL存储>,作者: 张浩奇 . Rest Clien ...
- Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框
Avalonia中用FluentAvalonia+DialogHost.Avalonia实现界面弹窗和对话框 本文是项目中关于 弹窗界面 设计的技术分享,通过 FluentAvalonia+Dialo ...
- Linux实现双击自动安装deb文件
在Linux中,有几个常用的软件可以实现双击自动安装.deb文件的功能.以下是一些推荐的软件: 1. GDebi:GDebi是一个轻量级的图形化工具,专门用于安装.deb文件.它可以解决依赖关系,并提 ...
- Ubuntu18.04 软件源更新:图形界面
通过图形UI界面更新Ubuntu的软件源,手动修改虽然简单,但是要自己去找源,选一个系统配置好的更简单.但是新版的好像没有该功能,找到个奇葩的路径: 将Ubuntu16.04升级为Ubuntu18.0 ...
- cgroup Linux中的资源限制
参考链接:容器技术的基石:cgroup 直接上实验: # docker run --rm -d --cpus=0.1 --memory=100M --name=test redis:alpine WA ...
- 学习狂神Spring5_课堂笔记(更新中)
Spring 简介 spring,英文单词为春天,表示为软件行业带来了春天. 2002年,首次推出了Spring框架的雏形:interface21框架.官网为:www.interface21.io但是 ...
- JS优化技巧,解决冗余代码
1. 使用箭头函数简化函数定义 // 传统函数定义 function add(a, b) { return a + b; } // 箭头函数简化 const add = (a, b) => a ...
- vite — 超快且方便的编译工具
我们编写的代码,比如 ES6. TypeScript.react 等是不能被浏览器直接识别的,需要通过 webpack .rollup 这样的构建工具来对代码进行转换.编译. 但随着项目越来越大,需要 ...