docker 运行 MySQL

使用 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 是项目名称,mysqldocker-compose 中使用的服务名称,data 是数据库数据目录的名称。这些值将替换脚本中的相应占位符。如果没有提供参数,则会使用默认值(myprjmysqlmysql

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