(六)Docker常用软件运行

一、运行redis

1、下载redis镜像

Redis官方镜像说明.
在这里插入图片描述

2、下载配置redis.conf(从官网下载的配置文件

2.1 、在宿主机创建如下所示目录结构

|-- /
    |-- tmp
    |   |-- docker-volume
	|	|   |-- redis
	|	|   |   |-- conf
	|	|	|   |   |-- redis.conf
	|	|   |   |-- data

在这里插入图片描述

2.2、修改redis.conf配置

需要将redis.conf文件放到路径下:/tmp/docker-volume/redis/conf/redis.conf
启动的时候会将/usr/local/etc/redis/conf/redis.conf与宿主机中的redis.conf做挂载,同步到容器中,从而在启动的时候通过宿主机上面的配置文件启动。

修改redis.conf配置:

  • 开启保存RDB(默认开启):save *
  • 开启AOF立即记录保存:appendonly yes
  • 设置RDB文件名称:dbfilename dump.rdb
  • 设置RDB和AOF文件的保存目录:dir /usr/local/etc/redis/data
  • 设置连接密码:requirepass 123456
  • 关闭主机绑定(不关闭,其他主机无法访问):# bind 127.0.0.1 -::1

2.3、启动redis

  1. 第一次启动

    命令:docker run -d -p 6379:6379 -v /tmp/docker-volume/redis/data:/data/ -v /tmp/docker-volume/redis/conf/redis.conf:/usr/local/etc/redis/conf/redis.conf redis:6.2 redis-server /usr/local/etc/redis/conf/redis.conf

    会发现无法启动容器,报没找不到我们想要挂载的目录/usr/local/etc/redis/data

[root@localhost /]# docker run -d -p 6379:6379 -v /tmp/docker-volume/redis/data:/data/ -v /tmp/docker-volume/redis/conf/redis.conf:/usr/local/etc/redis/conf/redis.conf redis:6.2 redis-server /usr/local/etc/redis/conf/redis.conf
4da41054a01737030a84bc1374f0819854dafae5db62df90b413cd6da0bdb781
[root@localhost /]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost /]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS                      PORTS     NAMES
4da41054a017   redis:6.2   "docker-entrypoint.s…"   28 seconds ago   Exited (1) 26 seconds ago             intelligent_wright
[root@localhost /]# docker logs 4da41054a017
1:C 13 Dec 2021 12:08:30.940 # Can't chdir to '/usr/local/etc/redis/data': No such file or directory
  1. 第二次启动
    我们将命令换成:docker run -d -p 6379:6379 -v /tmp/docker-volume/redis/data:/usr/local/etc/redis/data -v /tmp/docker-volume/redis/conf/redis.conf:/usr/local/etc/redis/conf/redis.conf redis:6.2 sh -c 'mkdir -p /usr/local/etc/redis/data && redis-server /usr/local/etc/redis/conf/redis.conf'

命令解析:

  • 后台运行:-d
  • 端口映射:-p 6379:6379
  • 同步持久化数据:-v /tmp/docker-volume/redis/data:/usr/local/etc/redis/data
  • 使用宿主机的conf文件配置启动(redis镜像中是没有conf文件的,其redis-server在,,,,,目录):-v /tmp/docker-volume/redis/conf/redis.conf:/usr/local/etc/redis/conf/redis.conf
  • 使用同步的conf文件,启动redis:redis-server /usr/local/etc/redis/conf/redis.conf

发现可以成功启动:

[root@localhost docker-volume]# docker run -d -p 6379:6379 -v /tmp/docker-volume/redis/data:/usr/local/etc/redis/data -v /tmp/docker-volume/redis/conf/redis.conf:/usr/local/etc/redis/conf/redis.conf redis:6.2 sh -c 'mkdir -p /usr/local/etc/redis/data && redis-server /usr/local/etc/redis/conf/redis.conf'
13d7382f6826c24d6a13f851fc1c83d0354bca7254f25720dc00e78cfa997c26
[root@localhost docker-volume]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                       NAMES
13d7382f6826   redis:6.2   "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   elegant_lederberg

但是问题是否是真的因为挂载的目录在容器内不存在呢?
于是尝试将目录挂载到centos容器内:

[root@localhost docker-volume]# docker run -it -v /tmp/docker-volume/redis/data:/usr/local/etc/redis/data -v /tmp/docker-volume/redis/conf/redis.conf:/usr/local/etc/redis/conf/redis.conf centos:7 /bin/bash
[root@de28e378c91c /]# cd /usr/local/  
[root@de28e378c91c local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src   
[root@de28e378c91c /]# cd /usr/local/etc/redis/
[root@de28e378c91c redis]# ls
conf  data
[root@de28e378c91c redis]# 

因此,我将可以正常启动redis容器的命令中创建目录的命令换成任意一个,都可以正常的启动容器。
docker run -d -p 6379:6379 -v /tmp/docker-volume/redis/data:/usr/local/etc/redis/data -v /tmp/docker-volume/redis/conf/redis.conf:/usr/local/etc/redis/conf/redis.conf redis:6.2 sh -c 'echo 'start' && redis-server /usr/local/etc/redis/conf/redis.conf'
该问题一直也没找到答案,还望有大佬能解释一下


二、运行MySQL

1、下载MySQL镜像

MySQL官方镜像说明.
在这里插入图片描述

2、运行容器

创建如下目录结构:

|-- /
    |-- tmp
    |   |-- docker-volume
	|	|   |-- MySQL
	|	|   |   |-- conf
	|	|	|   |-- logs
	|	|   |   |-- data

命令:docker run -d -p 3306:3306 --name="MySQL-5.7" -v /tmp/docker-volume/MySQL/conf:/etc/mysql/conf.d -v /tmp/docker-volume/MySQL/logs:/logs -v /tmp/docker-volume/MySQL/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

命令说明:
-d 后台运行
-p 3306:3306:将主机的3306端口映射到docker容器的3306端口。
--name="MySQL-5.7":容器名字
-v /tmp/docker-volume/MySQL/conf:/etc/mysql/conf.d:将主机/tmp/docker-volume/MySQL/conf录下的my.cnf 挂载到容器的 /etc/mysql/conf.d
之所以是这个目录:在这里插入图片描述-v /tmp/docker-volume/MySQL/logs:/logs:将主机/tmp/docker-volume/MySQL/logs目录下的 logs 目录挂载到容器的 /logs。
-v /zzyyuse/mysql/data:/var/lib/mysql:将主机/zzyyuse/mysql/data目录挂载到容器的 /var/lib/mysql 在这里插入图片描述

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
mysql:5.7: 镜像和版本号
--character-set-server=utf8mb4--collation-server=utf8mb4_unicode_ci:不使用cnf配置文件,则可以通过该方式传递配置
在这里插入图片描述

3、验证

连接容器中的MySQL,随便创建一个数据库和表,插入3条数据。
在这里插入图片描述
进入宿主机的/tmp/docker-volume/MySQL/data/目录就会发现,多了很多文件和文件夹。并且有一个和我们新建的数据库同名的文件夹。
在这里插入图片描述
测试删除容器,并重新生成新的容器,但是绑定路径和之前不变,经验证之前的表和数据都存在
在这里插入图片描述

三、部署一个项目到运行Tomcat

1、下载tomcat镜像

Tomcat官方镜像说明
在这里插入图片描述

2、建一个spring boot项目(使用外部Tomcat运行)。将项目打包成spring-boot-redis.war

我再该项目中创建了两个接口:
根据key查询redis:http://192.168.0.103:8888/spring-boot-redis/redisController/getRedisStringValueByKey?redisKey=name
往redis中设置值:http://192.168.0.103:8888/spring-boot-redis/redisController/setRedisStringValueByKey?redisKey=name&value=docker


3、运行一个redis容器实例

参考上面的【运行redis】。如果你的项目用不到redis,可以忽略。


4、下载一个tomcat,获取tomcat配置文件

tomcat下载地址

ps:你也可以通过下载的tomcat镜像运行一个容器实例,从容器中/usr/local/tomcat/路径下复制到宿主机。

在宿主机创建一个如下目录结构:
在这里插入图片描述

将下载的tomcat解压,需要获取到整个解压后的conf目录,放在宿主机的/tmp/docker-volume/tomcat-run-project/conf目录下,用于后面覆盖容器内的配置。

将spring-boot-redis.war包放在/tmp/docker-volume/tomcat-run-project/webapps下,tomcat启动后会自动将war包解压:在这里插入图片描述


5、运行容器

命令:docker run -d -p 8888:8080 --name="tomcat" -v /tmp/docker-volume/tomcat-run-project/conf:/usr/local/tomcat/conf -v /tmp/docker-volume/tomcat-run-project/logs:/usr/local/tomcat/logs -v /tmp/docker-volume/tomcat-run-project/webapps:/usr/local/tomcat/webapps tomcat:8.5.32

命令说明:
-d 后台运行
-p 8888:8080:将主机的8888端口映射到docker容器的8080 端口。
--name="tomcat":容器名字
-v /tmp/docker-volume/tomcat-run-project/conf:/usr/local/tomcat/conf-v /tmp/docker-volume/tomcat-run-project/logs:/usr/local/tomcat/logs-v /tmp/docker-volume/tomcat-run-project/webapps:/usr/local/tomcat/webapps:目录挂载


6、访问测试

注意:访问需要使用war包的名称
在这里插入图片描述

7、其他方式

运行一个Tomcat的容器后,使用docker cp命令将war包复制到容器的/usr/local/tomcat/webapps路径下,然后docker restart重启容器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值