使用Docker部署之前写的一个博客项目,主要用到了MySQL和Redis,Redis作网站访问量统计。下面会对具体的部署方式作详细讲解
一、服务器安装Docker
1、删除docker旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、设置镜像仓库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云的
3、安装Docker
# 安装docker 相关 docker-ce 社区版 docker-ee企业版
yum install docker-ce docker-ce-cli containerd.io
这时报错
- Status code: 404 for https://mirrors.aliyun.com/docker-ce/linux/centos/2/x86_64/stable/repodata/repomd.xml
查询os版本
可以看到当前服务器版本是Huawei Cloud EulerOS 的2.0版本
[hqf@ecs-337729 ~]$ cat /etc/os-release
NAME="Huawei Cloud EulerOS"
VERSION="2.0 (x86_64)"
ID="hce"
VERSION_ID="2.0"
PRETTY_NAME="Huawei Cloud EulerOS 2.0 (x86_64)"
ANSI_COLOR="0;31"
找到mirrors.aliyun.com/docker-ce/linux/centos路径下发现并没有版本为2的路径,只有7-8。所以只需要修改该路径就行了
[hqf@ecs-337729 ~]$ sudo vim /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
将$releaserver改成8
之后再次执行
yum install docker-ce docker-ce-cli containerd.io
安装成功!
二、安装MySQL
1、拉取MySQL镜像
[hqf@ecs-337729 ~]$ docker pull mysql:8.0
8.0: Pulling from library/mysql
197c1adcd755: Pull complete
45f2e353f7d2: Pull complete
68ec6ece42ef: Pull complete
cfa4d9a7b88e: Pull complete
64cab5858b1d: Pull complete
92fcd248d982: Pull complete
2、查看镜像
[hqf@ecs-337729 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0 57da161f45ac 2 weeks ago 517MB
hello-world latest feb5d9fea6a5 17 months ago 13.3kB
3、运行镜像
[hqf@ecs-337729 ~]$ docker run -d -p 3306:3306 -v mysql_conf:/etc/mysql/conf.d -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:8.0
00afe560d1c93a750f9b021da46f9a8544cd466e6263b2574980152885daf5bb
4、查询运行中的容器
[hqf@ecs-337729 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
00afe560d1c9 mysql:8.0 "docker-entrypoint.s…" 6 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql01
5、查看容器IP
[hqf@ecs-337729 ~]$ docker inspect mysql01
... ...
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "8131aa939ac0e34ca9e00641ed5d0f21b138815d765c2d36e8e7f1882a3cef32",
"EndpointID": "38041eab55f2643c750c77235195cd7aaea1b6a16049498259d32da93f547b8e",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
“IPAddress”: “172.17.0.2”
记录下来之后会用到
6、查询卷挂载目录
[hqf@ecs-337729 ~]$ docker volume ls
DRIVER VOLUME NAME
local mysql_conf
local mysql_data
[hqf@ecs-337729 ~]$ docker volume inspect mysql_data
[
{
"CreatedAt": "2023-02-23T14:56:07+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysql_data/_data",
"Name": "mysql_data",
"Options": null,
"Scope": "local"
}
]
7、上传.sql文件
到卷挂载目录下上传.sql文件
8、将数据导入数据库
进入容器
[hqf@ecs-337729 ~]$ docker exec -it mysql01 /bin/bash
创建数据库
mysql> create database blog;
进入数据库
mysql> use blog;
导入数据
mysql> source /var/lib/mysql/blog.sql;
查看导入数据
mysql> show tables;
导入成功!
9、修改新密码并设置远程连接
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'xxxxxx';
mysql> flush privileges; // 刷新权限
使用navicate连接,成功!
三、 安装Redis
1、拉取redis镜像
docker pull redis
2、启动redis容器
docker run -p 6379:6379 --name myredis -v /home/www/redis/redis.conf:/etc/redis/redis.conf -v /home/www/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
3、查看容器进程
如果启动失败,需要将配置文件中的daemonize的参数值改为no
再次启动后成功!
4、查看redis容器IP
docker inspect myredis
记录下该地址之后项目配置会用到
5、使用连接工具连接redis
连接成功!
四、项目部署
1、项目打包
将项目数据库连接IP改成上述MySQL容器IP
将redis连接IP改成上述Redis容器IP
2、编写Dockerfile
FROM java:8
VOLUME /tmp
ADD boot-blog-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 80
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3、将Dockerfile和jar包上传至服务器
4、构建Dockerfile
docker build -t boot-blog:1.0 .
报错
Error response from daemon: manifest for java:8 not found: manifest unknown: manifest unknown
解决
将Dockerfile中FROM java:8 改成 FROM openjdk:8
然后再次执行构建,成功!
5、查看构建成功的镜像
6、运行镜像
docker run -d -p 80:80 --name boot-blog boot-blog:1.0
7、容器启动后停止
查看容器运行日志
docker logs <container-id>
在数据库连接url后添加allowPublicKeyRetrieval=true
重新打包上传并运行
8、运行成功
浏览器访问服务器IP