docker加docker-compose加运维账户部署示例

环境:华为云服务器

首次使用华为云服务器,新用户一般都有优惠,2核2G2M 40G硬盘一年,确实已经相当实惠啦。

image

 服务器广告示例-

image

 

自己就想着来部署一下之前做过的项目,当做是练手。

项目整体部署内容和环境如下:

CentOS 7.9、Docker + Docker Compose、运维账户、部署 Java Web + Nginx + MySQL + Redis

 

.1.登陆root账户,创建运维用户,建议使用密钥进行连接。

sudo useradd  dengyilang

sudo passwd dengyilang

密码:在线生成一个随机高强度密码。

 

image

 

.2.添加必要权限

# 格式:用户名  主机=(可切换的用户)  可执行的命令列表

 

visudo

 

Cmnd_Alias DC_VIEW = \

    /usr/bin/docker compose ps *, \

    /usr/bin/docker compose ls *, \

    /usr/bin/docker compose logs *, \

    /usr/bin/docker compose config *, \

    /usr/bin/docker compose top *, \

    /usr/bin/docker compose images *

 

Cmnd_Alias SYS_INFO = \

    /usr/bin/df, \

    /usr/bin/du -sh /data/*, \

    /usr/bin/ss, \

    /usr/sbin/ip addr show, \

    /usr/bin/ps aux, \

    /usr/bin/tail -f /data/logs/*.log

 

dengyilang ALL=(root) NOPASSWD: DC_VIEW, SYS_INFO, /usr/bin/yum list, /usr/bin/yum info

 

# 授权必要 sudo 权限(部署 + 运维命令)

dengyilang ALL=(ALL) NOPASSWD: /bin/systemctl *, /usr/bin/docker *, /bin/journalctl

 

查看编辑结果-

sudo nl -ba /etc/sudoers

image

 

.3.将运维账号建议添加到 docker 组

sudo usermod -aG docker dengyilang

 

重新登录或刷新会话-你需要重新登录才能使组变更生效

newgrp docker

 

验证组是否添加成功

groups dengyilang 

 

.4.使用root用户创建项目目录

sudo mkdir -p /opt/u01/exam/

sudo chown dengyilang:dengyilang /opt/u01/exam/

sudo chmod 755 /opt/u01/exam/

image

 

.5.运维用户远程登陆-

 

创建目录

mkdir -p /opt/u01/exam/nginx/{html,log,sslkey,conf.d}

mkdir -p /opt/u01/exam/java/logs

mkdir -p /opt/u01/exam/mysql/{logs,data}

mkdir -p /opt/u01/exam/redis/{log,data}

image

 

设置nginx宿主机权限-

sudo groupadd -g 101 nginx          # 宿主机创建 GID=101 的组

sudo chgrp -R 101 /data/nginx/logs

sudo chmod -R 775 /data/nginx/logs

 

.6.上传部署文件到服务器-

启动服务-报错

image

 分析问题,由于未拉取到openjdk8这个镜像导致出现问题,上一台服务器用的腾讯云可以正常拉取服务。

 

修改docker镜像加速地址-

 

重启容器-

sudo systemctl restart docker

image

 

 

问题未解决。

 

继续尝试新的解决方案-

{

  "registry-mirrors": [

    "https://mirror.baidubce.com",

    "https://docker.mirrors.ustc.edu.cn",

    "https://registry.docker-cn.com",

    "https://hub-mirror.c.163.com"

  ]

}

只保留上面的镜像源地址,再次测试,发现问题仍然未解决。

 

尝试修改镜像版本-

eclipse-temurin:8-jre

 

docker compose up -d --build

发现可行-

 

image

 

启动服务出现新的错误-

 

image

 

修改Dockerfile中指定的命令,不指定GID,并且修改后面的用户bigstuff为dengyilang

 

image

 

启动成功。

image

 

.7.继续查看容器运行状态,发现有两个容器没有启动成功,一直处于重启状态-

image

 

docker compose logs web

java web容器报错,初步判断可能是权限设置不对。

image

 

单独启动容器,然后进入容器中查看目录权限。

image

 

image

 

查看宿主机上,运维用户信息。

image

 

发现问题,宿主机运维用户和容器内创建的用户,用户名一致,但是UID不一致,导致java容器启动后,没有权限执行日志保存操作。

 

解决方案:

修改运维用户的UID和GID,为一个较大的指定ID,并且在构建Java镜像时,使用同样的用户名和UID和GID。

 

image

 

需要注意的问题:由于运维用户之前已经创建了项目存放的目录,因此需要将该目录下所有子目录以及文件的权限,使用root用户重新修改为运维账户即可。

 

最终问题解决。

image

 

容器状态信息如下:

image

 

访问效果如下:

image

 访问nginx静态页面。

image

 

至此,使用docker+docker compose 部署java Web + Mysql + Redis + Nginx服务 全部完成。

感谢 【豆包 + deepSeek + 千问】 提供的各种各样的问题解决方案。

posted @ 2025-12-25 14:41  一只爱阅读的程序员  阅读(3)  评论(0)    收藏  举报