news 2026/10/20 2:15:18

把项目打包成Docker镜像,一条命令部署上线(附镜像瘦身记录)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
把项目打包成Docker镜像,一条命令部署上线(附镜像瘦身记录)

学Docker这事我拖了大半年。

每次看教程都是"打开你的虚拟机",然后我就卡在虚拟机那步——装系统半小时,网络配半天,内存一开2G没了,电脑风扇嗷嗷转。学个Docker跟渡劫似的,热情耗没了。

后来买了台云服务器,寻思在上面装个Docker试试。好家伙,完全是另一个世界。装好就是Linux环境,网络现成的,玩坏了重装系统就行,不用心疼。

下面是我从零折腾到能用的全过程,坑也都记着了。想学的照着走一遍,半天差不多能上手。

一、装Docker

我服务器是CentOS 7,其他发行版命令差不多,搜一下都有。

先卸掉旧的(如果有的话):

yum removedockerdocker-common docker-selinux docker-engine

装依赖:

yuminstall-yyum-utils device-mapper-persistent-data lvm2

然后设置仓库源。这里有个坑:默认的官方源国内拉不动或者巨慢,别用。直接用国内的镜像源:

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

然后装:

yuminstall-ydocker-ce systemctl startdockersystemctlenabledocker

跑一下验证:

dockerrun hello-world

看到"Hello from Docker!"就说明装好了。

二、跑第一个容器:Nginx

光跑hello-world没感觉,直接上Nginx:

dockerrun-d-p80:80 nginx

这条命令的意思:-d后台跑,-p 80:80把容器的80端口映射到服务器的80端口。

然后浏览器输入你服务器的IP,看到Nginx欢迎页,行,第一个容器跑起来了。

这步我踩了个坑:访问不通,页面打不开。排查了半天,发现是服务器防火墙没开80端口。云服务器一般有安全组规则,去控制台把80端口放行就行。我用的芯飞云控制台里安全组配置挺直观的,加一条规则就搞定。

几个常用命令先记住:

dockerps# 看正在跑的容器dockerps-a# 看所有容器包括停掉的dockerstop 容器ID# 停掉dockerrm容器ID# 删掉dockerlogs 容器ID# 看日志

三、数据卷:新手最容易踩的坑

容器这东西,删了就啥都没了。你容器里存的数据、改的配置,一删全没。

我第一次跑MySQL容器,往里写了一堆测试数据,后来容器出问题删了重建,数据全没了,当场愣住。

数据卷就是干这个的,把数据搁容器外面,容器随便删,数据不丢。

dockerrun-d-p3306:3306\-v/data/mysql:/var/lib/mysql\-eMYSQL_ROOT_PASSWORD=你的密码\mysql:5.7

-v /data/mysql:/var/lib/mysql的意思是:把容器里的/var/lib/mysql(MySQL数据目录)映射到服务器的/data/mysql。这样容器删了重建,数据还在。

记住一条:凡是存数据的容器,一定要挂-v数据卷,不然就是给自己埋雷。

四、Docker Compose:一键起一堆服务

单容器好说,但真实场景你往往要跑好几个:一个Web服务+一个数据库+一个缓存。一个个docker run命令又长又容易敲错。

Compose就是解决这个的,多个容器写一个配置文件里,一条命令全拉起来。

先装:

curl-Lhttps://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)-o/usr/local/bin/docker-composechmod+x /usr/local/bin/docker-compose

坑来了:这个下载地址是GitHub的,国内服务器拉不动。两个办法:一是本地下好再传上去,二是找个国内能用的镜像地址。我当时折腾了半天,最后本地下了scp上去的。

装好之后写个docker-compose.yml:

version:'3'services:web:image:nginxports:-"80:80"volumes:-./html:/usr/share/nginx/htmldb:image:mysql:5.7environment:MYSQL_ROOT_PASSWORD:你的密码volumes:-/data/mysql:/var/lib/mysql

然后:

docker-composeup-d

一条命令,Nginx和MySQL全起来了。不想要了就docker-compose down,全停。

五、清理垃圾,省磁盘

Docker用久了会堆一堆没用的镜像和停掉的容器,占磁盘。我有一回磁盘满了登不上服务器,就是这玩意搞的。

定期清一下:

dockersystem prune-a

会把停掉的容器、没用的镜像、没用的网络全清了。注意:跑着的容器和数据卷不会动,放心用。

六、踩坑汇总

把前面提到的坑集中列一下,方便避雷:

  1. Docker安装源:别用官方默认源,慢到怀疑人生,直接用国内镜像源
  2. 端口不通:容器跑起来了但访问不了,先查云服务器安全组/防火墙有没有放行端口
  3. 数据丢失:存数据的容器必须挂-v数据卷,容器删了数据就没了
  4. Compose下载:GitHub地址国内拉不动,本地下了传上去最省事
  5. 磁盘占满:定期docker system prune清理,不然哪天服务器就登不上了

说说服务器配置

学Docker吃配置,2核2G能玩但很勉强,跑个MySQL加两个容器内存就见底了。而且这东西会上瘾,今天跑一个Nginx,明天想加个MySQL,后天再挂个Redis,配置小了很快就不够用。

我的建议是别省这个钱,之前买的直接上4核8G,后来升级了。我现在这台8核16G的,也就几十块钱的事,同时跑着Nginx、MySQL、Redis加一个SpringBoot项目,内存占用一半左右,还有余量,不用天天提心吊胆怕它喘。

节点选国内的,拉镜像装依赖都快,SSH敲命令也不卡。我在芯飞云天津节点上,性价比真香。

还有一点,个人玩服务器我建议选不自动续费的。用一个月买一个月,学到啥程度就续到啥时候,不想玩了到期停掉就行,不用担心忘了关被扣钱。

最后

Docker这东西,入了门就离不开了。部署项目不用再"在我电脑上能跑",一条docker run环境全搞定。在云服务器上折腾更省心,玩坏了重装系统就行,随便造。

有啥问题评论区聊,踩过的坑可以一起交流。


相关文章:学Docker别再用虚拟机了,一台云服务器半天入门(附踩坑记录)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 2:14:29

湖南焊接培训:从长沙辐射怀化的技能基地

引言焊接技能人才的培养,历来与地区产业升级和用工需求紧密相连。长沙市汇德职业培训学校旗下品牌焊将军学园,成立于2022年,总部位于长沙市雨花区高升路465号才子嘉都三期东门裙楼二楼,业务覆盖湖南省范围,怀化地区学员…

作者头像 李华
网站建设 2026/10/20 2:14:27

合同纠纷怎么破?北京商业租赁律所五强之外的十强全榜单

企业租办公室,租的是场地,更是未来几年的稳定经营预期。但现实中,写字楼租赁的纠纷一点也不少:租金递增条款有歧义、装修投入被房东终止合同、免租期后突然加价、转租被限制、退租时要求恢复原状,每一个都能让企业主头…

作者头像 李华
网站建设 2026/10/20 2:14:25

ORB-SLAM3 bool Tracking::TrackLocalMap()

该函数在恒速模型跟踪或参考关键帧跟踪成功之后调用,利用局部地图进一步优化当前帧位姿,并统计内点数量,最终判断跟踪是否成功。 bool Tracking::TrackLocalMap() {// We have an estimation of the camera pose and some map points tracked in the frame.// We retrieve …

作者头像 李华
网站建设 2026/10/20 2:13:15

让有限显存扛住更多并发:KV Cache 调度与加速引擎详解

最近一直在折腾多智能体框架,组里有人用那个叫 OpenClaw 的开源项目跑了一周,GPU 显存肉眼可见地被吃掉,直接把一台 80G 的卡干到 OOM。群里有人嘴快,说 OpenClaw 这下真成“吞金龙虾”了——又贵又能吃,还得给它剥壳。…

作者头像 李华