学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会把停掉的容器、没用的镜像、没用的网络全清了。注意:跑着的容器和数据卷不会动,放心用。
六、踩坑汇总
把前面提到的坑集中列一下,方便避雷:
- Docker安装源:别用官方默认源,慢到怀疑人生,直接用国内镜像源
- 端口不通:容器跑起来了但访问不了,先查云服务器安全组/防火墙有没有放行端口
- 数据丢失:存数据的容器必须挂
-v数据卷,容器删了数据就没了 - Compose下载:GitHub地址国内拉不动,本地下了传上去最省事
- 磁盘占满:定期
docker system prune清理,不然哪天服务器就登不上了
说说服务器配置
学Docker吃配置,2核2G能玩但很勉强,跑个MySQL加两个容器内存就见底了。而且这东西会上瘾,今天跑一个Nginx,明天想加个MySQL,后天再挂个Redis,配置小了很快就不够用。
我的建议是别省这个钱,之前买的直接上4核8G,后来升级了。我现在这台8核16G的,也就几十块钱的事,同时跑着Nginx、MySQL、Redis加一个SpringBoot项目,内存占用一半左右,还有余量,不用天天提心吊胆怕它喘。
节点选国内的,拉镜像装依赖都快,SSH敲命令也不卡。我在芯飞云天津节点上,性价比真香。
还有一点,个人玩服务器我建议选不自动续费的。用一个月买一个月,学到啥程度就续到啥时候,不想玩了到期停掉就行,不用担心忘了关被扣钱。
最后
Docker这东西,入了门就离不开了。部署项目不用再"在我电脑上能跑",一条docker run环境全搞定。在云服务器上折腾更省心,玩坏了重装系统就行,随便造。
有啥问题评论区聊,踩过的坑可以一起交流。
相关文章:学Docker别再用虚拟机了,一台云服务器半天入门(附踩坑记录)