docker-compose的简单使用

着重于docker-compose于MySQL的使用

实例派

docker-compose简单使用

  • 构建命令:docker-compose up -d
  • 停止命令:docker-compose stop
  • 启动命令:docker-compose start

搭建sql-labs

来一个sql-labs试试,当前我们有的是网页文件、数据库文件

创建目录如下:

1
2
3
4
5
6
- sql-labs
├── db # 存放数据库文件
│   └── sql-lab.sql
├── docker-compose.yml # 书写docker-compose配置
├── html # 存放网页文件
│   └── ...

docker-compose.yml文件如下

  • 建立MySQL所在容器与 web服务所在容器之间的连接
  • 将数据库文件目录挂载到MySQL自动加载目录
  • 将网页文件目录挂载到 WEB 服务主目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '3.1' # docker-compose语法版本号
services:
db: # 第一个容器
image: mysql # mysql镜像,版本为latest
command: --default-authentication-plugin=mysql_native_password # 防止mysql8.0 ROOT用户问题
restart: always # 重启
environment: # 将环境变量传递到容器
MYSQL_ROOT_PASSWORD: root # 设置MySQL密码
MYSQL_DATABASE: security # 设置MySQL启动时默认创建数据库
volumes: # 挂载卷
- ./db:/docker-entrypoint-initdb.d
web: # 第二个容器
image: php:5.6-apache
restart: always
ports:
- 80:80
volumes: # 挂载卷
- ./html:/var/www/html
links: # 建立容器 db 与 web 之间的连接
- db
adminer:
image: adminer # 镜像名称
ports: # 端口映射
- 8080:8080

links与depends_on

links表示建立容器之间的连接,即容器内服务能够互相访问,或者说网络融合。

depends_on表示容器依赖另一个容器,如果从运行顺序角度来看,被依赖的容器先于该容器运行。

搭建S02-57

可能大家有点懵,我们来整个简单的。试试今天新出的漏洞。大概有以下需求:

  • 修改struts2中的测试例子的struts2-showcase.war
  • 放置于tomcat中运行

这里笔者的方案是选择把修改操作先做完,然后将这个测试例子挂载到tomcat的网页目录下

docker-compose.yml文件如下

1
2
3
4
5
6
7
8
9
version: '3.1'
services:
web:
image: tomcat:8.0.53-jre8
restart: always
volumes:
- ./struts2-showcase:/usr/local/tomcat/webapps/ROOT
ports:
- 8080:8080

目录结构如下:

1
2
3
4
5
├── docker-compose.yml
└── struts2-showcase
├── ...
│   ├── ...
...

根据lgtm团队报告我们搜索并修改文件struts-actionchaining.xml中的struts标签如下:

1
2
3
4
5
6
7
8
9
<struts>
<package name="actionchaining" extends="struts-default">
<action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1">
<result type="redirectAction">
<param name = "actionName">register2</param>
</result>
</action>
</package>
</struts>

这里我已经做好了,链接于我的Cveker项目,看看我们有什么不同。

MySQL环境变量

MySQL镜像环境变量

MYSQL_ROOT_PASSWORD

必选变量,指定将为MySQL root超级用户帐户设置的密码。

MYSQL_DATABASE

可选变量,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对该数据库的超级用户访问权限。

MYSQL_USER、MYSQL_PASSWORD

可选变量,创建新用户并设置该用户的密码。此用户将被授予MYSQL_DATABASE变量指定的数据库的超级用户权限(见上文),这两个变量为依赖关系。

MYSQL_ALLOW_EMPTY_PASSWORD

可选变量。设置为yes允许以root用户的空密码启动容器。即允许任何人获得完整的超级用户访问权限

MYSQL_RANDOM_ROOT_PASSWORD

可选变量。设置yes为为root用户生成随机初始密码(使用pwgen),生成的root密码将打印到stdout(GENERATED ROOT PASSWORD: …..)

MYSQL_ONETIME_PASSWORD

可选变量,初始化完成后,将root(不是MYSQL_USER!中指定的用户)设置为过期,在首次登录时强制更改密码。注意:此功能仅在MySQL 5.6+上受支持

详细见MySQL的hub主页

评论