说实话,换服务器部署传统应用的坑我前几年踩得太多了,后来逼着自己啃了一点Docker入门,再后面全改成容器化打包了——现在哪怕是临时换三台异构服务器(一会儿CentOS一会儿Ubuntu一会儿Debian),部署同个应用也不会超过15分钟,连测试用的Redis和MySQL数据都能跟着挂载目录一起带过去。
今天就用最常用的CentOS Stream 9系统做演示,手把手教大家从零到一快速完成服务器Docker容器部署教程,快速部署应用。首先得确保你们的服务器能正常联网,root权限也拿到手了——如果是普通用户记得加sudo前缀。
先检查下有没有预装Docker,直接敲docker version就行,要是显示类似“command not found”的报错,那我们就用国内阿里云的镜像源快速安装,别用官方源,慢到怀疑人生。具体步骤敲curl -fsSL https://get.docker.com | bash -s docker mirror Aliyun,等个一两分钟,显示“Client version”“Server version”就说明装好了。接下来启动Docker服务,并且设置成开机自启,省得下次重启服务器还要手动开,命令是systemctl start docker && systemctl enable docker,敲完之后再用docker ps试试,虽然现在没容器,但不会报错了。
踩过这个坑才明白,Docker镜像拉取如果还用官方的Docker Hub,在国内网络环境下大概率会超时或者只有几KB/s。这里一定要敲黑板,赶紧配置国内的阿里云私有镜像加速器,这个是免费的,每个阿里云账号都能申请一个专属的加速器地址。怎么弄?先登录阿里云控制台,搜“容器镜像服务”,点进去之后左侧导航栏找“镜像工具”→“镜像加速器”,复制加速器地址,然后回到服务器上编辑配置文件/etc/docker/daemon.json——如果文件不存在就自己创建一个,把内容写成{"registry-mirrors": ["你的专属阿里云加速器地址"]},注意逗号引号都是英文的,别写错格式。写完之后敲systemctl daemon-reload && systemctl restart docker重启Docker,再用docker info看最后一行,显示“Registry Mirrors: [你的地址]”就配置成功了。

接下来我们用一个现成的官方Redis镜像做演示,顺便挂载新手常忘的持久化目录,不然容器一删数据全没了——这种事故我以前带实习生的时候亲眼见过两次。先创建一个本地的Redis数据目录,命令是mkdir -p /data/redis,然后给这个目录加777权限?不对不对,生产环境别这么干,权限太大容易被利用,我个人 给Docker默认的redis用户(uid是999)加读写执行权限就行,敲chown -R 999:999 /data/redis。
然后就可以启动容器了,敲docker run -d -p 6379:6379 name myredis restart=always -v /data/redis:/data redis:7-alpine。解释一下几个核心参数,-d是后台运行容器,-p是宿主机端口和容器端口的映射,宿主机6379映射到容器的6379,name是给容器起个好记的名字,别用随机生成的一长串字母,restart=always是设置容器挂了之后自动重启,适合生产环境,-v是挂载本地目录到容器,把刚才创建的/data/redis挂载到容器的/data目录,这样Redis的持久化文件就会保存在本地宿主机上,不怕容器重启或删除,redis:7-alpine是指定拉取的镜像版本,alpine是轻量级的Linux发行版,镜像只有几十MB,比完整的CentOS/Ubuntu镜像快太多。
启动之后敲docker ps应该能看到myredis容器在运行了,要是不放心可以用docker exec -it myredis redis-cli进容器里测试一下,随便set一个key,比如set test 2026,然后get一下get test,能正常返回“2026”就说明没问题。退出Redis-cli敲exit,退出容器不用敲啥,Ctrl+C或者直接关掉SSH窗口都不会影响容器运行。
如果要部署自己的应用,比如Java Web应用,那我们只需要写一个简单的Dockerfile,把自己的jar包、JDK镜像打包进去,然后构建成自己的镜像,再像刚才启动Redis那样启动就行,这里就不展开写Dockerfile了,下次有空单独发一篇中小团队常用Java应用的Dockerfile避坑指南。
好了,今天的服务器Docker容器部署教程,快速部署应用就分享到这里,核心就是换个思路,用Docker把应用和依赖环境一起打包成镜像,不管换到哪台服务器,只要有Docker就能直接跑。你们在运维工作中有没有遇到过类似的换服务器部署麻烦的坑?欢迎在评论区分享你的解决办法。

评论列表 (0条):
加载更多评论 Loading...