转自:https://blog.csdn.net/jacksonary/article/details/78961612
仅做个人备份,浏览请看原文
在实际开发中,往往需要多种业务,不再是Ubuntu中打印一句话,比如在WEB中和数据库的交互,这样的应用就是典型的由多个容器组成,不需要用shell去启动这些容器,所有的容器将会以一种“服务组”的方式定义在一个配置文件中,和Dockerfile类似的,写在项目根目录中,然后可以利用
docker-compose up -d
docker-compose脚本可以用来启动、停止、重启应用和所有的应用中的服务,docker-compose的完整的命令如下:
指令 内容
build
Build or rebuild services
help
Get help on a command
kill
Kill containers
logs
View output from containers
port
Print the public port for a port binding
ps
List containers
pull
Pulls service images
restart
Restart services
rm
Remove stopped containers
run
Run a one-off command
scale
Set number of containers for a service
start
Start services
stop
Stop services
up
Create and start containers
这些定义在一起的Docker组件服务入口是docker-compse配置文件,他通常以yml文件的形式存在,比如下面的docker-compse.yml(注意在每个属性配置时冒号后面必须加空格符,除了端口映射):
例子:
version: '3.3'
services:
db:
container_name: db
image: mysql:8
environment:
MYSQL_DATABASE: employees
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
MYSQL_ROOT_PASSWORD: supersecret
ports:
- 3307:3306
web:
image: arungupta/docker-javaee:dockerconeu17
ports:
- 8081:8080
- 9991:9990
depends_on:
- db
在上面的组合文件中:
1. 定义了两个服务:db和web
2. image属性为每个服务字指定了镜像文件
3. mysql:8镜像将会启动MySql服务
4. environment属性定义了MySQL服务环境变量进行初始化:MYSQL_DATABASE 在镜像启动时常见一个指定名字的数据库,MYSQL_USER和MYSQL_PASSWORD组合创建一个新的用户并设定密码,这个用户将会被授予MYSQL_DATABASE创建的那个数据库的超级权限,MYSQL_ROOT_PASSWORD是强制性的设定MySQL超级用户密码
5. ports实现端口的转发,前面的是主机,后面的是虚拟机
6. depends_on属性表明了两个服务之间的依赖,这个案例中,WildFly(一种应用服务器)依赖于MySQL,所以MySQL将在WildFly之前启动
启停
在有了上述的组合配置文件后,PW进入该文件的所在目录下,即可利用docker-compose up -d以隔离模式启动这两个服务,docker ps可以查看端口之间的映射情况,也可以发现是启动了两个容器,docker-compose logs可以查看服务的日志,此时我们就可以通过http://localhost:8081/resources/employees访问所有人员信息,停止这一组服务:
docker-compose down