Docker入门:在云服务器上跑你的第一个容器
Docker是现在部署应用的主流方式之一,但对新手来说概念有点抽象——镜像、容器、仓库……搞清楚之前看起来云里雾里。
这篇从最实际的角度说:怎么在服务器上装Docker,然后用Docker跑一个Nginx网站,让你有个直观感受。
Docker是什么,为什么要用它
最简单的理解:Docker帮你把应用和它需要的环境打包在一起。不管什么服务器、什么系统,只要装了Docker,同一个"镜像"跑出来的效果都一样,不会出现"在我电脑上能跑,到服务器上就报错"的情况。
对个人来说,Docker的好处是:
- 部署简单,一条命令就能跑起来一个服务
- 环境隔离,多个应用互不干扰
- 方便迁移,换服务器直接迁镜像
准备服务器
Ubuntu 22.04。服务器配置不用高,1核2G就够练手,后面部署实际应用再根据需求升配。
我用的是雨云服务器 rainyun+com,入门配置性价比极高,拿来折腾Docker学习完全够用。
注册时用这个码:2026off可领1张5折券
安装Docker
官方推荐的安装方式:
# 安装依赖sudoaptupdatesudoaptinstall-yca-certificatescurlgnupg# 添加Docker官方GPG keysudoinstall-m0755-d/etc/apt/keyringscurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudogpg--dearmor-o/etc/apt/keyrings/docker.gpgsudochmoda+r /etc/apt/keyrings/docker.gpg# 添加Docker仓库echo"deb [arch=$(dpkg --print-architecture)signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu$(./etc/os-release&&echo"$VERSION_CODENAME")stable"|sudotee/etc/apt/sources.list.d/docker.list>/dev/null# 安装Dockersudoaptupdatesudoaptinstall-ydocker-ce docker-ce-cli containerd.io docker-compose-plugin验证安装成功:
docker--version让当前用户不用sudo也能用Docker:
sudousermod-aGdocker$USERnewgrpdocker跑第一个容器:Nginx
从Docker Hub拉取Nginx镜像并启动:
dockerrun-d-p80:80--namemynginx nginx参数说明:
-d:后台运行(detach)-p 80:80:把容器的80端口映射到主机的80端口--name mynginx:给容器起个名字nginx:使用官方Nginx镜像
执行完,在云服务器安全组放行TCP 80端口,然后浏览器访问服务器IP,看到Nginx欢迎页就说明成功了。
几个常用的Docker命令
# 查看正在跑的容器dockerps# 查看所有容器(包括停止的)dockerps-a# 停止容器dockerstop mynginx# 启动停止的容器dockerstart mynginx# 删除容器(先stop再删)dockerrmmynginx# 查看本地镜像dockerimages# 删除镜像dockerrmi nginx# 查看容器日志dockerlogs mynginx# 进入容器内部dockerexec-itmynginxbash用Docker Compose同时跑多个服务
实际应用通常需要多个服务配合,比如Web应用 + MySQL + Redis。每个都单独run很麻烦,Docker Compose可以用一个文件定义所有服务,一条命令全部启动。
新建一个文件夹,里面创建docker-compose.yml:
version:'3'services:web:image:nginxports:-"80:80"volumes:-./html:/usr/share/nginx/htmldepends_on:-dbdb:image:mysql:8.0environment:MYSQL_ROOT_PASSWORD:你的密码MYSQL_DATABASE:mydbvolumes:-mysql_data:/var/lib/mysqlvolumes:mysql_data:启动所有服务:
dockercompose up-d停止:
dockercompose down这个配置同时启动了Nginx和MySQL,depends_on让Web在MySQL启动后才启动。
挂载自己的网站文件
上面的Nginx例子,怎么让它显示你自己的网页?
用-v参数把本地目录挂载进容器:
dockerrun-d-p80:80\-v/root/mysite:/usr/share/nginx/html\--namemynginx nginx把你的HTML文件放到/root/mysite/里,Nginx就会提供这些文件。
开机自启
启动容器时加--restart always参数:
dockerrun-d-p80:80--restartalways--namemynginx nginx这样Docker重启、服务器重启后,容器都会自动起来。
Docker上手之后你会发现很多东西都可以用它部署:博客、数据库、各种工具,省去了手动配环境的麻烦。有问题评论区说。
服务器推荐:雨云官网