1、提前准备centos系统,此步骤自行搜索
2、安装docker
2.1、安装yum-utils、 安装Docker所需的依赖包
先卸载旧docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux
安装yum-utils
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.2、配置国内源
#提升下载速达
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3、安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io --nobest
我用的是centos8,其中已经安装了containerd.io,所以加上--nobest参数,让他自己选择相应的包即可
2.4查看docker版本
docker -v
2.5启动docker并验证
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
3、安装java环境 mysql、redis、nginx
- mysql:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /mysoft/mysql/data:/var/lib/mysql \
-v /mysoft/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /mysoft/mysql/init:/docker-entrypoint-initdb.d \
-v /mysoft/mysql/logs:/var/log/mysql \
--network hm-net\
mysql
docker run :创建并运行一个容器 , -d 后台运行
--name mysql :容器名
-p 3306:3306 :设置端口映射 宿主机端口映射到容器端口
-e key=value :设置环境变量
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
-v path1:path2 :设置文件映射 宿主文件口映射到容器映射路径 容器映射路径不可更改
-v /root/mysql/data:/var/lib/mysql
-v /root/mysql/conf:/etc/mysql/conf.d
-v /root/mysql/init:/docker-entrypoint-initdb.d
--network hm-net\ :设置网络
--restart=always \ :开机自启
mysql :镜像名 镜像名结果 repository(镜像名):tag(版本号) 不指定tag时,默认是latest,代表最新版本的镜像
- nginx:
提前创建/mysoft/nginx/conf目录和default.conf文件
docker run -d \
--name nginx \
-p 80:80 \
-v /mysoft/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ #省略此行
-v /mysoft/nginx/conf.d:/etc/nginx/conf.d \
-v /mysoft/nginx/html:/usr/share/nginx/html \
-v /mysoft/nginx/logs:/var/log/nginx \
--network hm-net\
nginx
-
nginx-temp:/etc/nginx/nginx.conf 容器内核心配置 nginx.conf,该文件是 Nginx 的全局配置,一般无需大幅修改,其中包括:
#末尾已有该配置,无需修改,作用是加载 conf.d 目录下所有 .conf 后缀的配置 include /etc/nginx/conf.d/*.conf;
-
nginx-temp:/etc/nginx/conf.d 容器内虚拟主机配置目录,默认的站点配置default.conf,个人配置可在此文件实现
- redis:
提前创建/mysoft/redis/conf目录和redis.conf文件
docker run -d \
--name redis \
-p 6379:6379 \
-e TZ=Asia/Shanghai \
-v /mysoft/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /mysoft/redis/data:/data \
-v /mysoft/redis/logs:/var/log/redis \
--network hm-net \
redis:latest \
redis-server /etc/redis/redis.conf
命令参数解释(关键部分重点说明)
-
-d:后台运行容器
-
--name redis:给容器命名为 redis,方便后续操作
-
--restart always:Docker 重启时,该容器也自动重启(实用配置)
-
-p 6379:6379:端口映射,本地 6379 端口映射到容器内 6379 端口(本地可通过 127.0.0.1:6379 访问
-
Redis)
-
第一个 -v:/usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
-
本地配置文件 :/ 容器内配置文件(路径必须精确到 redis.conf,不是目录)
-
容器内 Redis 配置文件路径可通过 docker inspect redis 确认,官方镜像默认在 /usr/local/etc/redis/redis.conf
-
第二个 -v:/usr/local/redis/data:/data
-
本地数据目录映射到容器内 /data 目录(对应 redis.conf 中 dir 配置,实现数据持久化)
-
redis:latest:使用的 Redis 镜像版本(latest 为最新版,可替换为 7.0、6.2 等指定版本)
-
redis-server /usr/local/etc/redis/redis.conf:容器启动命令,指定 Redis 以容器内的配置文件启动(这是映射配置生效的关键,必须加上)
4、构建jar包镜像
先编辑Dockerfile,可根据实际需求配置
# 引用本机镜像
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/adoptopenjdk/openjdk8:x86_64-centos-jre8u472-b08
# 容器内工作目录
WORKDIR /app
# 拷贝本地 app.jar 到容器内
COPY app.jar /app/app.jar
# 暴露项目端口
EXPOSE 8080
# 容器启动命令
ENTRYPOINT ["java", "-jar", "-Djava.security.egd=file:/dev/./urandom", "/app/app.jar"]
4.1、将Dockerfile 和 jar包方在同一目录下,执行构建镜像命令,后面的“.”一带要带上。
在执行下方命令是,容易报错;大体意思就是因为各种原因无法拉取openJDK,(主要是docker官方镜像对国内不友好),可以先拉取jdk镜像, 然后引用本机jdk镜像打包。
docker build -t my-app:latest .
若是一直报错,使用绝招
- 从其他能正常访问 Docker 仓库的机器上拉取
openjdk:8-jre-alpine镜像,导出为 tar 包:
docker pull openjdk:8-jre-alpine
docker save -o openjdk8-jre-alpine.tardisopenjdk:8-jre-alpine
- 将 tar 包拷贝到你的服务器上,执行导入命令:
docker load -i openjdk8-jre-alpine.tar
-
导入成功后,重新构建镜像。
4.2、构建成功后docker images 检查是否构建成功,成功后启动
docker run -d \
--name my-project \
-p 8081:8080 \
-v /mysoft/my-project/logs:/app/logs \
--network hm-net\
my-app