Docker使用方法

极客

Docker使用方法:从入门到“真香”的实战指南(附避坑心得)

嘿,朋友们!今天咱们来聊聊Docker——这玩意儿我一开始真没当回事,觉得不就是个容器嘛,能有啥了不起的?结果用了俩月,我直接“真香”了!😅 如果你也正被环境配置折磨得头大,或者部署项目时总想摔键盘,那这篇Docker使用方法的文章,绝对值得你花5分钟看完,我尽量用大白话,加上我自己的踩坑经历,让你少走弯路。

Docker使用方法

Docker是个啥?别整虚的,就说人话!

Docker就是“轻量级虚拟机”,但比虚拟机轻太多了,打个比方,虚拟机是搬一整套房子(包括装修),而Docker是打包一个“集装箱”(只装你要的家具和电器),我的天,这效率差别太大了!以前我配个MySQL环境,各种版本冲突、依赖缺失,能折腾一整天,现在用Docker,一条命令,三分钟搞定,简直爽到起飞!🚀

Docker核心三件套:镜像、容器、仓库

镜像(Image) :你可以理解成是“安装包”或“模板”,比如mysql:8.0就是一个MySQL的镜像。容器(Container) :是镜像运行起来的实例,就像你点开安装包后运行的程序。仓库(Repository) :存放镜像的地方,比如Docker Hub就是官方“应用商店”。

我第一次用的时候,傻傻分不清镜像和容器的区别,后来我用了个笨办法记:镜像类比成“食谱”,容器就是按照食谱做出来的“菜”,是不是好记多了?嗯哼,这个方法我推荐给所有新手!

Docker使用方法:我亲测最顺手的5个步骤

安装Docker(别怕,真不难)

Linux用户用一条命令搞定(curl -fsSL https://get.docker.com | sh),Windows/Mac直接下载桌面版,装完记得输docker --version验证下,看到版本号就说明成功了,我当时装完,激动得差点跳起来!

拉取镜像(下载“食谱”)

docker pull nginx:latest

这条命令会从Docker Hub拉取最新版Nginx镜像,你可能会说:“哎,这不就是下载个文件吗?” 还真不是!它会在你本地建一个层级文件系统,重新利用底层数据,下载速度飞起!

运行容器(做“菜”)

docker run -d -p 8080:80 --name mynginx nginx

来解释下:-d后台运行,-p 8080:80把容器的80端口映射到宿主的8080端口(这样浏览器就能访问了),--name给容器起名,运行后,打开浏览器输入http://localhost:8080,看到Nginx欢迎页了吗?那一刻,我真的被震撼到了——“就这么简单?!”

查看和管理容器(“厨房”管理)

  • 看运行中的容器:docker ps
  • 看所有容器(包括已停止的):docker ps -a
  • 停止容器:docker stop mynginx
  • 删掉容器:docker rm mynginx

我经常忘记-a这个参数,然后发现容器咋没了,原来是被停了,各位,记住啊,-a是“all”的意思,很关键!

构建自己的镜像(定制你的“私房菜”)

写一个Dockerfile大概像这样:

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

然后执行docker build -t myapp .,就能打包你自己的应用了,我第一次构建时,连续报错三次,那个急啊!后来发现是路径写错了,气死我了!各位一定要仔细检查目录结构啊。

我踩过的“坑”(含泪分享,希望你别重蹈覆辙)

坑1:端口冲突

有一次我跑容器,提示端口被占用了,排查了一圈,才发现是之前有个容器没删干净,解决办法:docker rm -f $(docker ps -a -q),一次清空所有容器,爽是爽,但别乱用啊!

坑2:镜像太大,拉取超时

碰到过一次拉取大镜像(比如PyTorch),网络一波动就中断,后来我配置了国内镜像加速器(阿里的),速度快到起飞!设置方法很简单,改/etc/docker/daemon.json加一行"registry-mirrors": ["https://你的加速器地址"],然后重启Docker就OK。

坑3:持久化数据丢失

容器一删,里面的数据全没了!我可是吃过亏的,后来我用-v /宿主机路径:/容器路径挂载数据卷,把MySQL的数据目录挂到宿主机,再也不用担心数据丢啦!

Docker Compose:多容器编排的“指挥官”

如果你要跑个“前端+后端+数据库”的组合,一个个docker run不得累死?用docker-compose写个docker-compose.yml文件:

version: '3'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db

然后一条docker-compose up -d全部搞定!天哪,这个功能我第一次用时,简直是“打开了新世界的大门”!效率提升了不止一倍好吗!

最后的碎碎念

Docker这东西,你用熟了以后,会发现它其实没啥神秘的,但就是这份“平常心”,让我把更多的精力放在了业务逻辑上,而不是环境配置上,说真的,它就像你厨房里的“多功能料理机”——听着复杂,用着真香!💪

如果我说得还不够清楚,或者你有更奇葩的坑要分享,欢迎留言讨论,别客气,咱们都是“容器汪”😄,想要了解更多高级玩法(比如K8s、Swarm),关注我,后续咱们慢慢聊!

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]