mysql

mysql的容器的构建,首先要拉取官方的mysql容器: 通过docker search mysql命令搜索镜像。

docker search mysql

➜  docker search mysql
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                                                  MySQL is a widely used, open-source relation…   7270                [OK]
mariadb                                                MariaDB is a community-developed fork of MyS…   2340                [OK]
mysql/mysql-server                                     Optimized MySQL Server Docker images. Create…   535                                     [OK]
zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       138                                     [OK]
hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          97
zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server wi…   74                                      [OK]
...

第1个mysql就是官方的镜像,可以使用docker pull mysql获取镜像。目前直接拉取的是mysql的最新版mysql10.0,mysql8.0以后的版本在使用上和之前的mysql5.7有较大的区别,好多命令会报错,需要使用mysql8.0的规范去处理。本地做演示使用mysql5.7老版本,方便测试和排查问题。

docker pull mysql:5.7 #拉取mysql5.7版本

# 查看已拉取的镜像列表
$ docker images;
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
mysql                5.7                 702fb0b7837f        13 days ago         372MB

为了方便调试在本地创建shell脚本来运行镜像,编写mysql启动脚本docker-mysql.sh,并通过chmod +x 文件给与运行权限:

sudo docker run \
    --name mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=root \
    -d \
    -v /Users/tyrad/docker/mysql/data:/var/lib/mysql \
    -v /Users/tyrad/docker/mysql/logs:/logs \
    -v /Users/tyrad/docker/mysql/conf:/etc/mysql \
    mysql:5.7

其中:

  • -v /Users/tyrad/docker/mysql/data:/var/lib/mysql 数据库文件与宿主机的映射
  • -v /Users/tyrad/docker/mysql/logs:/logs 日志的映射
  • -v /Users/tyrad/docker/mysql/conf:/etc/mysql 配置文件目录的映射

运行脚本:./docker-mysql.sh

chmod +x docker-mysql.sh # 脚本可执行权限设置
./docker-mysql.sh # 运行脚本
Password:
7517eaa8a3d6b909702b31fa8565fb57d8cd6d7a6a4b3df949748372751a8585

如果看到显示有以上的记录说明容器创建并启动正常了。如果没有发现记录,可以通过docker ps -a 查看未启动的进程或启动失败的进程。并且可以通过docker logs mysql查看mysql容器为什么启动失败!

启动失败或修改启动脚本需要停止现有的并删除现在的容器,再重新运行脚本。

如果有需要可以使用docker stop mysql命令停止正在运行的容器,再执行docker rm mysql删除容器。

此处主要参考(抄)自 http://blog.ku-cat.com/2018/11/06/boost/

php+nginx

为了方便,直接拉取已有的richarvey/nginx-php-fpm仓库。

同样的写一个脚本:

docker run  --name web --restart=always  \
-v  `pwd`/nginx/webapp:/usr/share/nginx/html \
-v  `pwd`/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v  `pwd`/nginx/conf.d:/etc/nginx/conf.d \
-v  `pwd`/nginx/logs:/var/log/nginx \
-p 80:80 \
-p 8999:8999 \
-p 443:443 \
--network cc-net \
--add-host localhost:$(ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}') \
-d richarvey/nginx-php-fpm

报错解决

Error response from daemon: driver failed programming external connectivity on endpoint lnmp (ac1a9c20be8f96388c1fc2d78983297d1d9b9feb428d8ca31cc3ff46c81d5d91): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error Permission denied 解决: 1) 检查映射的端口是否被宿主机占用 2) 检查docker网卡是否被禁用