docker实战

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
原文地址:https://www.cnblogs.com/bigfairy/p/14206870.html