利用Docker Compose管理服务

docker-compose 简介

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

docker-compose 使用的三个步骤:
  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 执行 docker-compose up 命令来启动并运行整个应用程序。
docker-compose 安装
1
2
3

#以centos为例
yum install -y docker-compose
使用docker-compose编排一个jdk8、tomcat7、mysql5.7和redis3.2的实例

准备的材料和目录结构如下:

├── docker-compose.yml
└── tomcat7
├── apache-tomcat-7.0.99.zip
├── Dockerfile
├── jdk-8u131-linux-x64.tar.gz
└── my.cnf

#挂在到容器的目录
├── mysql
│ ├── conf
│ │ └── my.cnf
│ ├── data
│ ├── init
│ │ ├── init.sh
│ │ └── mysql_init.sql
│ └── log
└── tomcat7
├── conf
│ ├── Catalina
│ │ └── localhost
│ ├── catalina.policy
│ ├── catalina.properties
│ ├── context.xml
│ ├── logging.properties
│ ├── server.xml
│ ├── tomcat-users.xml
│ ├── tomcat-users.xsd
│ └── web.xml
├── data
├── logs
└── webapps

docker-compose.yml 的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
version: "3"
services:
samjavawebenv:
container_name: javawebenv
build:
context: ./tomcat7/
dockerfile: Dockerfile
image: compose-javawebenv:v1
depends_on:
- mysql
links:
- mysql
- redis
ports:
- "80:80"
- "443:443"
- "8080:8080"
privileged: true
environment:
- Dspring.profiles.active=prod
restart: always
volumes:
- "../../docker-compose/tomcat7/conf:/usr/local/tomcat7/conf"
- "../../docker-compose/tomcat7/data:/usr/local/tomcat7/data"
- "../../docker-compose/tomcat7/logs:/usr/local/tomcat7/logs"
- "../../docker-compose/tomcat7/webapps:/usr/local/tomcat7/webapps"
mysql:
container_name: mysql5.7
environment:
MYSQL_ROOT_HOST: "%"
MYSQL_HOST: "localhost"
MYSQL_ROOT_PASSWORD: "xxxx"
image: "mysql:5.7"
ports:
- "3306:3306"
restart: always
volumes:
- "../../docker-compose/mysql/data:/var/lib/mysql"
- "../../docker-compose/mysql/conf:/etc/mysql/conf.d"
- "../../docker-compose/mysql/init:/docker-entrypoint-initdb.d"
command: --default-authentication-plugin=mysql_native_password
redis:
container_name: redis3.2
image: "redis:3.2"
ports:
- "6380:6379"
restart: always
command: "redis-server --appendonly yes"

init.sh中的内容

1
2
3
#!/bin/bash
mysql -uroot -pxxx << EOF
source /docker-entrypoint-initdb.d/mysql_init.sql;

mysql_init.sql中的内容

1
2
3
4
5
6
7
8
9
10
11
12

use mysql;
update user set authentication_string=password('xxxx') where user='root' and host='localhost';
INSERT INTO `mysql`.`user` (`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_p
riv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_t
ables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create
_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`,
`max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed`, `password_lifetime`, `account_locke
d`) VALUES ('%', 'xx', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y
', 'Y', 'Y', '', '', '', '', '0', '0', '0', '0', 'mysql_native_password', password('xxx'), 'N', '2020-01-09 11:41:17', NULL, 'N');

flush privileges;

容器间访问mysql和redis的链接地址要修改

1
2
3
4
# 把主机地址换成service的名字
jbdc.url=jdbc:mysql://mysql:3306/flash_sale?useUnicode=true&characterEncoding=utf-8

#mysql的用户主机为 javawebenv.compose_default 即 container_name + compose_default
docker-compose 命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#构建
docker-compose build

# 启动
docker-compose up

#如果你想在后台执行该服务可以加上 -d 参数
docker-compose up -d

#关闭
docker-compose stop

#删除
docker-compose rm

以上的docker-compose命令都是在 docker-compose.yml 文件目录下执行

  • 作者: Sam
  • 发布时间: 2020-01-14 22:17:18
  • 最后更新: 2020-01-14 22:57:32
  • 文章链接: https://ydstudios.gitee.io/post/a5d4c4d4.html
  • 版权声明: 本网所有文章除特别声明外, 禁止未经授权转载,违者依法追究相关法律责任!