Docker(二):部署MySQL、Redis和Java Web程序

一、安装MySQL

*注:实际开发中并不建议使用docker安装MySQL

搜索MySQL镜像

docker search mysql

在这里插入图片描述
直接pull拉取镜像会下载最新tag的镜像
可以访问以下地址查看mysql镜像的tag,然后选择一个自己所需的下载

https://registry.hub.docker.com/v1/repositories/mysql/tags

本文选择8.0.30的mysql,执行命令

docker pull mysql:8.0.30

在这里插入图片描述
接下来就要启动mysql

# docker run 创建一个新的容器
docker run -d -p 33060:3306 --name mysql \
-v /usr/dcoker-mysql/log:/var/log/mysql \
-v /usr/docker-mysql/data:/var/lib/mysql \
-v /usr/docker-mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.30
参数说明:
-d   后台运行
-p 33060:3306  端口映射,宿主机的33060端口映射到容器3306端口
--name mysql  容器名称,可以自定义
-v /usr/dcoker-mysql/log:/var/log/mysql  宿主机/usr/dcoker-mysql/log目录与容器的/var/log/mysql目录挂载,该目录保存了mysql的日志
-v /usr/docker-mysql/data:/var/lib/mysql  也是挂载,该目录是mysql数据储存的位置
-v /usr/docker-mysql/conf:/etc/mysql/conf.d  也是挂载,该目录放置配置文件的
-e MYSQL_ROOT_PASSWORD=123456  设置环境变量,该变量是设置root用户的密码,可自行修改
mysql:8.0.30  镜像名称以及tag

如果不挂载数据卷,容器被删掉之后,mysql数据库里面的数据都会消失

执行docker ps命令查看是否启动成功
在这里插入图片描述
如果启动失败,可以执行docker log mysql查看日志,找失败的原因

进入容器中的mysql,执行:

# docker exec 在运行的容器中执行命令
docker exec -it mysql mysql -uroot -p123456
参数说明:
-i  以交互模式运行容器
-t  为容器重新分配一个伪输入终端
mysql -uroot -p123456  容器执行的命令,直接进入容器中的mysql

*注意:安装的mysql是8.x版本的,默认的身份验证插件为caching_sha2_password,该插件不能使用旧版本的客户端来连接;本人所使用的Navicat版本较旧,需要修改身份验证插件才能登录。修改插件执行:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

在navicat上创建表并插入数据

在这里插入图片描述

然后在容器中查看数据,发现中文出现了乱码

在这里插入图片描述

解决办法:修改配置文件
执行命令exit退出容器,在宿主机中编写配置文件
执行:vim /usr/docker-mysql/conf/my.cnf,这个目录就是上面创建容器时挂载的数据卷
在这里插入图片描述

[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8

保存之后执行docker restart mysql重启容器
然后在容器查询数据
在这里插入图片描述

停掉这个mysql容器,然后再创建一个mysql容器,看看是否能查询到插入的数据以及是否解决了中文乱码
停止容器命令:docker stop mysql
然后再创建一个容器
在这里插入图片描述
挂载的数据卷与之前的是一样的,之前的容器产生的数据,被新创建的容器读取
在这里插入图片描述


二、安装Redis

搜索Redis镜像

docker search redis

在这里插入图片描述
拉取镜像,本文下载最新的官方镜像

docker pull redis

下载完成
在这里插入图片描述

创建配置文件
在宿主机上创建一个文件redis.conf,路径可以自定义
这里提供一个配置文档,配置可根据自己的需求修改
本文配置文件路径:/usr/docker-redis/conf/redis.conf

# bind 127.0.0.1

protected-mode no

port 6379

tcp-backlog 511

#设置密码为123456,可注释掉
requirepass 123456

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

databases 30

always-show-logo yes

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

appendonly yes

appendfilename "appendonly.aof"

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-max-len 128

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

activerehashing yes

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

*注意:daemonize no是关闭守护线程,如果开启的话容器会启动不起来

执行以下命令,启动容器

docker run -d -p 6379:6379 --name redis \
-v /usr/docker-redis/conf/redis.conf:/etc/redis/redis.conf \
-v /usr/docker-redis/data:/data \
redis redis-server /etc/redis/redis.conf
参数说明:
-d   后台运行
-p 6379:6379  端口映射,<宿主机端口>:<容器端口>
--name redis   容器名称,可以自定义
-v /usr/docker-redis/conf/redis.conf:/etc/redis/redis.conf  宿主机/usr/docker-redis/conf/redis.conf文件与容器的/etc/redis/redis.conf文件挂载
-v /usr/docker-redis/data:/data  也是挂载,该目录是redis数据持久化文件储存的位置
redis    镜像名称
redis-server /etc/redis/redis.conf   以上面redis.conf文件写的配置启动redis

启动redis容器之后,执行docker ps查看是否启动成功
如果没有启动成功可以执行命令docker logs <容器名称或id>查看日志;如果日志没有内容可能是配置中开启了守护线程的原因,关闭即可

启动成功后,执行docker exec -it redis redis-cli命令进入容器
如果设置了密码,执行auth 123456(123456配置中的密码,没有配置密码的直接跳过这步)
在这里插入图片描述
到这里redis就安装完成了


三、安装Java Web程序

用docker部署一个Java程序需要用Dockerfile构建镜像,这里先简单说明一下Dockerfile,下一章再详细说明

首先准备一个Java Web的程序(这里提供一个简单的程序 project-auto-deploy.jar)和适用于linux的jdk包(只是简单的部署用jre包也行)
将这Java程序和jdk包放在同一个目录下,然后在该目录下编写一个Dockerfile文件

vim dockerfile

文件内容(根据自己的实际情况更改):

# 指定基础镜像
FROM ubuntu

# 作者信息
MAINTAINER hxh

# 设置环境变量,这个变量是放置jdk包的目录
ENV JAVA_DIR=/usr/java

# 切换目录,相当于cd命令,如果目录不存在则会自动创建
WORKDIR $JAVA_DIR

# ADD将本地的文件添加到镜像中,这里的意思是将jdk包添加到镜像中的$JAVA_DIR/目录下,ADD指令会自动解压压缩文件
ADD jdk-8u341-linux-x64.tar.gz $JAVA_DIR/

# 功能和ADD相同,但是不会自动解压,这里表示将java程序添加到/app目录下并命名为java-app.jar,ADD和COPY都会自动创建目录
COPY project-auto-deploy.jar /app/java-app.jar

# 设置jdk的环境变量,jdk1.8.0_341是jdk包解压后的文件夹名称,不知道的话可以先把jdk包解压出来看下
ENV JAVA_HOME=$JAVA_DIR/jdk1.8.0_341
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口,8080是访问Java程序的端口,根据自己的程序端口修改
EXPOSE 8080

# 指定容器运行时执行的命令,/app/java-app.jar就是上面的java程序(这里要用双引号,不能用单引号)
ENTRYPOINT ["java","-jar","/app/java-app.jar"]

编写dockerfile文件后,执行以下命令创建镜像:

docker build -t java-app .

*注意:命令的最后是有一个空格和点“.”的,一定要加上;“.” 像上下文一样,就是dockerfile文件中使用ADD和COPY指令需要指定宿主机的文件,而“.”就表示dockerfile和宿主机的文件在同一个目录下

参数说明:
build     构建镜像
-t        给镜像加一个Tag,默认为latest
java-app  镜像名称,<镜像名称>:<Tag>,:<Tag>可以不写

这里是在dockerfile所在的目录执行命令的,不需要指定dockerfile文件的路径,如果文件名是自定义的或者不在dockerfile所在的目录执行,可以加上“-f”参数指定dockerfile所在的位置,例如:

docker build -f /xxx/xxx/xxx -t image-name .

因为要下载基础镜像,可能需要等待比较长的时间,如果基础镜像已经下载过则会直接使用
在这里插入图片描述

构建镜像之后看看日志是否成功,构建成功之后可以执行docker images命令看到该镜像
在这里插入图片描述

运行容器,执行以下命令:

docker run -d -p 80:8080 --name java-app-container java-app
参数说明:
run      运行容器
-d       后台运行
-p       端口映射,该参数后面的80:8080就是映射的端口,<宿主机端口>:<容器端口>
--name   设置容器名称,该参数后面的java-app-container就是这个容器的名称
java-app 指定镜像

运行之后执行docker ps查看是否启动成功,如果没有启动成功可以执行docker logs java-app-container查看日志信息

在这里插入图片描述

运行成功之后,用浏览器访问
在这里插入图片描述
成功访问到,部署完成

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值