Docker简单部署Mysql 5.7

获取镜像

1 docker pull mysql:5.7.22

启动mysql

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22

若导入的sql文件过大,会导致无法导入,删除刚刚启动的容器,重新输入以下命令启动容器

 docker run -p 3306:3306 --name mysql \
 -v /usr/local/docker/mysql/logs:/var/log/mysql \
 -v /usr/local/docker/mysql/data:/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 \
 -d mysql:5.7.22

进入刚刚启动的容器

docker exec -it mysql bash   #进入容器
cd /etc/mysql/mysql.conf.d/
echo "max_allowed_packet= 128M" >> mysqld.cnf #设置导入的sql文件开始最大不超过128M
exit     #退出容器
docker restart mysql  #重启mysql

需要将刚刚配置的文件持久化,否则启动新的mysql容器时,之前的配置会失效

cd /usr/local/docker/mysql/conf   #进入需要宿主机存放文件目录
docker cp mysql:/etc/mysql .       #将容器中相关文件拷贝到当前目录下
cd mysql   #进入刚刚拷贝到的mysql文件
mv *.* ..  #将mysql下的所有文件移动到conf下,即上级目录下
rm -rm mysql #删除mysql
docker rm -f mysql #删除mysql容器,并执行以下命令重新启动一个mysql容器,并将相关文件持久化
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22

后续用Docker-Compose部署即可在编写服务时初始化相关参数

如下的模板文件:

version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7.22
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

数据卷的默认地址在 /var/lib/docker/volumes