本文介绍在 Mac 上使用 Docker 和 docker-compose 一键部署 MySQL、Redis 和 Nginx 服务,涵盖镜像加速、数据持久化、容器链接等关键配置。

安装

首先去官网下载,因为国内网络问题,需要配置网络加速,可以使用:

{
  "registry-mirrors": [
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"
  ]
}

使用compose统一配置mysql、redis镜像

  1. 在用户目录~下新建mkdir -p docker/service目录
  2. service目录下新建文件docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3"
services:
redis:
image: redis:5.0.4
ports:
- ${REDIS_PORT}:6379
volumes:
- "${REDIS_DIR}/conf:/usr/local/etc/redis"
- "${REDIS_DIR}/data:/data"
command:
redis-server

mysql:
image: mysql:5.7
ports:
- ${MYSQL_PORT}:3306
volumes:
- "${MYSQL_DIR}/data:/var/lib/mysql"
- "${MYSQL_DIR}/conf.d:/etc/mysql/conf.d"
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}

  1. docker-compose.yml文件会读取系统环境变量以及当前目录下的.env文件变量
1
2
3
4
5
6
7
8
9
10
# redis
REDIS_PORT=6379
REDIS_PWD=123456
REDIS_DIR=./redis

# mysql
MYSQL_PORT=3306
MYSQL_DIR=./mysql
MYSQL_ROOT_PASSWORD=123456 # 密码只在初始化时设置

运行后会默认生成镜像服务容器名service_mysql_1, service_redis_1

docker-compose常用命令

  • docker-compose up -d [options] [SERVICE…]
    该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
    链接的服务都将会被自动启动,除非已经处于运行状态。
    -d 以守护进程方式运行

  • docker-compose down
    此命令将会停止 up 命令所启动的容器,并移除网络

  • docker-compose restart [options] [SERVICE…]
    重启项目中的服务。

安装nginx

  1. 拉取nginx镜像 docker pull nginx@latest

  2. 查看镜像 docker images

  3. 运行镜像为容器

    docker run -d -p 4000:80 --name service_nginx nginx

    用4000端口映射80,用service_nginx作为容器名,对应仓库镜像 nginx

  4. 查看容器

    docker ps -a

    所有容器,包括未运行

  5. 以终端的方式进入nginx容器

    docker exec -it service_nginx bash

  6. 复制文件到本地

    docker cp service_nginx:/etc/nginx ~/docker/nginx/config/

    docker cp service_nginx:/usr/share/nginx/html ~/docker/nginx/

    docker cp service_nginx:/var/log/nginx ~/docker/nginx/logs/

  7. 关闭容器, 重启并挂载文件

    docker rm -f service_nginx

    docker run --name service_nginx -p 4000:80
    -v ~/docker/nginx/config/:/etc/nginx
    -v ~/docker/nginx/html:/usr/share/nginx/html
    -v ~/docker/nginx/logs:/var/log/nginx
    --link service_mysql_1:mysql
    -d nginx

--link service_mysql_1:mysql,表示 nginx 容器要连到 service_mysql_1 容器,冒号表示该容器的别名是mysql

问题

修改密码

进入docker exec -it service_mysql_1 bash mysql -u root -p

# 修改普通用户,只改一个就好
SET PASSWORD FOR 'youruser' = PASSWORD('newpwd');

# 修改root用户,改两个
SET PASSWORD FOR 'root' = PASSWORD('newpwd');
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('newpwd');