一、安装
1.卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.配置Docker的yum库
首先要安装一个yum工具
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker
最后,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4.启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5.配置镜像加速(可选)
可以找阿里云的容器镜像服务来配置,具体操作自行百度或看学习文档
具体命令如下:
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
二、部署项目
1、创建Docker网桥
docker network create test_net
2、部署MySQL环境
提前创建挂载目录conf、data和conf下的my.cnf文件
docker run -d \
--name mysql \
-p 3306:3306 \
--log-opt max-size=10m \
--log-opt max-file=50 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /home/obj/demo/mysql/data:/var/lib/mysql \
-v /home/obj/demo/mysql/conf:/etc/mysql/conf.d \
-v /home/obj/demo/mysql/init:/docker-entrypoint-initdb.d \
--network test_net \
mysql:5.7.36
解读:
docker run -d
:创建并运行一个容器,-d
则是让容器以后台进程运行
--name mysql
: 给容器起个名字叫mysql
,你可以叫别的
-p 3306:3306
: 设置端口映射。
- 容器是隔离环境,外界不可访问。但是可将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
- 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
- 格式:
-p 宿主机端口:容器内端口
,示例中就是将宿主机的3306映射到容器内的3306端口
-e TZ=Asia/Shanghai
: 配置容器内进程运行时的一些参数
- 格式:
-e KEY=VALUE
,KEY和VALUE都由容器内进程决定TZ=Asia/Shanghai
是设置时区;MYSQL_ROOT_PASSWORD=123456
是设置MySQL默认密码
--network test-net \
加入的网桥
mysql:5.7.36
: 设置镜像名称和版本,Docker会根据这个名字搜索并下载镜像
- 格式:
REPOSITORY:TAG
,例如mysql:8.0
,其中REPOSITORY
可以理解为镜像名,TAG
是版本号- 在未指定
TAG
的情况下,默认是最新版本,也就是mysql:latest
# 挂载本地目录 -v 本地目录:容器内目录 # 挂载本地文件 -v 本地文件:容器内文件
-v mysql:/var/lib/mysql # 会被识别为一个数据卷叫mysql,运行时会自动创建这个数据卷 -v ./mysql:/var/lib/mysql # 会被识别为当前目录下的mysql目录,运行时如果不存在会创建目录
命令总结:
docker run 参数 | docker compose 指令 | 说明 |
---|---|---|
–name | container_name | 容器名称 |
-p | ports | 端口映射 |
-e | environment | 环境变量 |
-v | volumes | 数据卷配置 |
–network | networks | 网络 |
挂载的配置文件: my.cnf
[client]
#设置客户端默认字符集utf8mb4
default-character-set=utf8mb4
[mysql]
#设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
#配置服务器的服务号,具备日后需要集群做准备
server-id = 1
#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
log-bin=mysql-bin
#设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满
expire_logs_days=30
#解决MySQL8.0版本GROUP BY问题
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
#允许最大的连接数
max_connections=1000
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'
# 无需密码
# skip-grant-tables
3.部署redis环境
提前创建挂载目录data和redis.conf文件
docker run \
--restart=always \
--log-opt max-size=10m \
--log-opt max-file=50 \
-p 6379:6379 \
--name redis \
-v /home/obj/demo/redis/redis.conf:/etc/redis/redis.conf \
-v /home/obj/demo/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf \
--appendonly yes
挂载的配置文件: redis.conf ,配置文件中包含密码设置
# Redis服务器配置
# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1
#bind 127.0.0.1
# 服务器端口号
port 6379
#配置密码,不要可以删掉
#requirepass pxh123456
#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no
#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /data/dockerData/redis/run/redis6379.pid
#默认为no,redis持久化,可以改为yes
appendonly yes
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
save 900 1
save 300 10
save 60 10000
# 按需求调整 Redis 线程数
tcp-backlog 511
# 设置数据库数量,这里设置为16个数据库
databases 16
# 启用 AOF, AOF常规配置
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128
# 是否记录系统日志,默认为yes
syslog-enabled yes
#指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice
# 日志输出文件,默认为stdout,也可以指定文件路径
logfile stdout
# 日志文件
#logfile /var/log/redis/redis-server.log
# 系统内存调优参数
# 按需求设置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
将redis加入到网络
docker network connect test_net redis
4.部署jar包
4.1配置启动文件 Dockerfile
文件内容:
# 基础镜像
FROM openjdk:17
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY ***.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
基础镜像可以选择相对应得Java版本,可以为:openjdk:8
***.jar 为你需要创建镜像得jar包名
启动配置文件名必须是: Dockerfile
配置文件和jar包放在同一个文件夹下。
常用语法有:
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./xx.jar /tmp/app.jar |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN yum install gcc |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
4.2创建镜像
cd 到你文件夹的目录下
docker build -t jarweb-test .
命令解释:
docker build:Docker构建镜像的命令
-t:指定镜像的名称可以指定版本(如:-t jarweb-test:1.0)
.:最后的点表示Dockerfile所在的路径,点表示当前目录
4.3运行镜像
docker run -d --name jarweb-test-v1.0 --network test_net \
-p 18083:8083 \
--log-opt max-size=100m \
--log-opt max-file=5 \
-v /home/obj/demo/jars/v1.0/logs:/logs \
jarweb-test
注:数据库账号和密码需要对应,数据库连接地址直接使用创建的网桥名即可
三、相关文档视频
安装文档:(https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d)
学习文档:(https://b11et3un53m.feishu.cn/wiki/MWQIw4Zvhil0I5ktPHwcoqZdnec)
配套视频:(https://www.bilibili.com/video/BV1HP4118797/)