使用 docker-compose 来拉取mysql 镜像并运行
项目目录如下
1
2
3
4
5
6
7
8
9
10
|
myprj
├── app
├── bin
│ └── compose.sh
│ └── stop.sh
├── compose
│ └── docker-compose.yml
├── mysql
│ └── data
|
可按照下面的命令来创建上面的这个目录结构
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
|
#!/bin/bash
# 接收参数
project_name=${1:-myprj}
service_name=${2:-mysql}
data_dir_name=${3:-mysql}
# 创建项目目录结构
mkdir -p "${project_name}"/{app,bin,compose,"${data_dir_name}"/data} && \
# 创建 compose.sh 文件
cat << EOF > "${project_name}/bin/compose.sh"
#!/bin/bash
root=\$(cd \$(dirname \$0); pwd -P)
docker-compose -p ${service_name} -f \${root}/../compose/docker-compose.yml "\$@"
EOF
# 创建 stop.sh 文件
cat << EOF > "${project_name}/bin/stop.sh"
#!/bin/bash
# 停止并移除所有由docker-compose up创建的容器
# docker-compose down
# 停止容器而不移除它们
docker-compose -f \$(cd \$(dirname \$0); pwd -P)/../compose/docker-compose.yml stop
# 停止特定的服务,可以在stop命令后面加上服务的名称
# docker-compose stop myservice
EOF
# 设置 compose.sh 和 stop.sh 为可执行文件
chmod +x "${project_name}/bin/compose.sh" "${project_name}/bin/stop.sh" && \
# 创建 docker-compose.yml 文件
touch "${project_name}/compose/docker-compose.yml"
|
该脚本可以保存为一个文件,比如 create_project.sh
。然后你可以赋予它执行权限并运行,传递相应的参数:
1
2
|
chmod +x create_project.sh
./create_project.sh myprj mysql data
|
myprj
是项目名称,mysql
是 docker-compose
中使用的服务名称,data
是数据库数据目录的名称。这些值将替换脚本中的相应占位符。如果没有提供参数,则会使用默认值(myprj
、mysql
和 mysql
)
compose.sh
内容如下
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash
root=$(cd `dirname $0`; dirname `pwd`)
# exec "$@" 这行命令。$@ 是 shell 脚本获取参数的符号,这里获得的是所有传入脚本的参数,而 exec 是执行命令,直接执行这些参数。
# sudo ./bin/compose down ====> down表示关闭 service 并删除 container
# sudo ./bin/compose up -d ====> up -d表示启动 container
# -p 参数指定项目名称。在这个例子中,项目名称被设置为 mysql。Docker Compose 会使用这个名称作为容器、网络和卷名称的前缀,以便将它们与其他项目隔离开来
# -f 参数用来指定 docker-compose.yml 文件的位置。在这个例子中,文件位于当前目录下的 compose 子目录中
docker-compose -p mysql -f ${root}/compose/docker-compose.yml "$@"
# 使用这个脚本的命令: sudo ./bin/compose.sh up -d
|
docker-compose.yml
内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
version: "3"
services:
mysql1:
image: mysql:latest
volumes:
- ../mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password1
MYSQL_DATABASE: database
MYSQL_USER: user1
MYSQL_PASSWORD: password1
ports:
- 3306:3306
|
在命令行给compose.sh
添加执行权限
1
|
chmod +x ./bin/compose.sh
|
执行该脚本运行 container
在 myproject 目录下执行
1
|
sudo ./bin/compose.sh up -d
|