Docker 安装 MySQL
MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。
1、查看可用的 MySQL 版本
官网地址:https://hub.docker.com/_/mysql
2、拉取mysql镜像
[root@localhost ~]# docker pull mysql:8.0.22
8.0.22: Pulling from library/mysql
Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873
Status: Downloaded newer image for mysql:8.0.22
docker.io/library/mysql:8.0.22
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.22 a347a5928046 6 days ago 545MB
mysql latest a347a5928046 6 days ago 545MB
3、运行mysql容器
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
这种方式启动容器,一旦容器删除数据会丢失,所以正常都会将数据挂载在主机的目录下。
docker run
--restart=always
-p 3306:3306 --name mysql
-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d
-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:8.0.22
命令参数:
-
--restart=always
: 当Docker 重启时,容器会自动启动 -
-p 3306:3306
:将容器的3306端口映射到主机的3306端口 -
--name mysql
:-> 指定容器名称 -
-v /usr/local/docker/mysql/conf:/etc/mysql
:将主机当前目录下的 conf 挂载到容器的 /etc/mysql -
-v /usr/local/docker/mysql/logs:/var/log/mysql
:将主机当前目录下的 logs 目录挂载到容器的 /var/log/mysql -
-v /usr/local/docker/mysql/data:/var/lib/mysql
:将主机当前目录下的 data 目录挂载到容器的 /var/lib/mysql -
-e MYSQL_ROOT_PASSWORD=123456
:初始化root用户的密码 -
-d
:以守护进程的方式启动容器
查看容器启动情况
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
73cde0728e20 mysql "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
[root@localhost ~]#
4、进入容器
docker exec -it mysql bash
5、登录mysql
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
6、添加远程登录用户
CREATE USER 'bigfairy'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'bigfairy'@'%';
7、远程客户端连接mysql
这里使用Navicat连接mysql如下:
Docker安装Redis
1、查看可用的 Redis 版本
官方地址:https://hub.docker.com/_/redis?tab=description&page=1&ordering=last_updated
2、拉取redis镜像
[root@localhost ~]# docker pull redis:rc-alpine3.12
rc-alpine3.12: Pulling from library/redis
801bfaa63ef2: Pull complete
9a8d0188e481: Pull complete
8a3f5c4e0176: Pull complete
d9af23bab33d: Pull complete
1e24b8f34bba: Pull complete
a0d216621fb7: Pull complete
Digest: sha256:d8d47eea291a1e41025a86678a2a57e7fb2c44ec6513f61eb1c8a3feee1ee564
Status: Downloaded newer image for redis:rc-alpine3.12
docker.io/library/redis:rc-alpine3.12
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.22 a347a5928046 7 days ago 545MB
redis rc-alpine3.12 5bca63d382f8 11 days ago 32.3MB
ubuntu latest f643c72bc252 4 weeks ago 72.9MB
3、redis.conf文件配置
从官网获取 redis.conf 配置文件
修改下载的默认配置文件
- bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
- protected-mode no #默认yes,开启保护模式,限制为本地访问
- daemonize no #默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程(可选),改为yes会使配置文件方式启动redis失败
- requirepass 你的密码 #给redis设置密码(可选)
- dir ./ #输入本地redis数据库存放文件夹(可选)
- appendonly yes #redis持久化(可选)
操作步骤如下
[root@localhost docker]# mkdir -p /usr/local/docker/redis/
[root@localhost docker]# cd /usr/local/docker/redis/
[root@localhost redis]# wget http://download.redis.io/redis-stable/redis.conf
--2020-12-29 14:44:27-- http://download.redis.io/redis-stable/redis.conf
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 84841 (83K) [application/octet-stream]
Saving to: ‘redis.conf’
100%[======================================================================================================================================>] 84,841 175KB/s in 0.5s
2020-12-29 14:44:28 (175 KB/s) - ‘redis.conf’ saved [84841/84841]
[root@localhost redis]# ls
redis.conf
[root@localhost redis]# vim redis.conf
4、docker启动redis
docker run
--restart=always
-p 6379:6379
--name redis
-v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf
-v /usr/local/docker/redis/data:/data
-d redis:rc-alpine3.12 redis-server /etc/redis/redis.conf
--appendonly yes
命令解释说明:
-
--restart=always: 当Docker 重启时,容器会自动启动
-
-p 6379:6379: 把容器内的6379端口(后面的端口)映射到宿主机6379端口(前面的端口)
-
--name redis: 指定容器名称
-
-v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf:将主机目录下的 redis.conf目录挂载到容器的/etc/redis/redis.conf
-
-v /usr/local/docker/redis/data:/data:将主机目录下的data目录挂载到容器的data目录下
-
-d redis:rc-alpine3.12 :表示后台启动redis
-
**redis-server /etc/redis/redis.conf **:以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf
-
appendonly yes: 开启redis 持久化
5、查看是否启动成功
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04ec4e8bed2a redis:rc-alpine3.12 "docker-entrypoint.s…" 14 minutes ago Up 7 minutes 0.0.0.0:6379->6379/tcp redis
Docker常用命令
# docker查看日志记录
# 命令格式:
docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
# 查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
# 查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID
# 查看某时间之后的日志:
docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
# 查看某时间段日志:
docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
docker镜像
# 列出镜像
docker images
docker image ls
# 拉取镜像
docker pull 镜像名称
# 运行镜像
docker run -it --rm
ubuntu:16.04
bash
# 删除镜像
docker image rm 镜像名称
docker image rm $(docker image ls -q 镜像名称)
docker rmi 镜像名称
docker容器,[]的内容可以省略
# 启动容器
docker [container] run -itd --rm ubuntu /bin/bash
# 停止容器
docker [container] stop <容器 ID>
# 启动容器
docker [container] start <容器 ID>
# 重启容器
docker [container] restart <容器 ID>
# 查看所有容器
docker [container] ps -a
# 查看当前正在运行的容器
docker [container] ps
# 进入容器
docker [container] exec -it <容器 ID> /bin/bash
# 删除容器
docker [container] rm <容器 ID>
# 清理掉所有处于终止状态的容器
docker container prune
docker仓库
# 登录
docker login
# 退出
docker logout
# 搜索
docker search 镜像名
# 拉取镜像
docker pull 镜像名
# 标记镜像
docker tag 镜像名:标签 仓库ip:仓库端口/标记名称:标记标签
# 推送镜像
docker push 标记名称:标记标签
docker数据卷
# 查看所有的数据卷
docker volume ls
# 创建数据卷
docker volume create test-volume1
# 查看指定数据卷详情信息
docker volume inspect test-volume1
# 删除数据卷
docker volume rm test-volume3
# 删除没有容器挂载的数据卷
docker volume prune