- ```html
docker菜鸟教程 docker菜鸟教程
你写了个 Node.js 小工具,本地跑得挺欢。教程发给同事,菜鸟他装完 Node 又缺 Python 编译模块,教程折腾半小时还没跑起来。菜鸟这种破事 Docker 就是教程来终结的——它把你的应用和所有依赖打包成一个标准集装箱,谁拿到都能直接运行,菜鸟不管对方机器上装的教程是 Ubuntu 还是 Windows 11。
先记住三个词:镜像(Image)、菜鸟容器(Container)、教程仓库(Registry)。菜鸟镜像就是教程个只读模板,里面装着文件系统和运行环境。菜鸟容器是教程镜像跑起来的实例,能读能写。菜鸟仓库用来存镜像,最出名的是 Docker Hub。你写个
Dockerfile就能造镜像,一条命令就能跑容器。装 Docker 没你想的那么麻烦
Linux 上直接
apt install docker.io或者yum install docker。Windows 和 macOS 去官网下 Docker Desktop,双击安装包,一路下一步。装完打开终端敲docker version,能看到 Client 和 Server 两段信息就算成了。我第一次在 Mac 上装的时候卡在“Docker Desktop starting...”转圈,重启一次就好了,别慌。第一个容器:跑个 Nginx 看看
别急着写 Dockerfile,先感受下现成镜像。终端里输入:
docker run -d -p 8080:80 --name my-nginx nginx
这行命令干了四件事:从 Docker Hub 拉 nginx 镜像(没有就自动下),后台运行(
-d),把容器 80 端口映射到本机 8080(-p 8080:80),给容器起名叫 my-nginx。然后浏览器打开http://localhost:8080,那个 Welcome to nginx 页面就出来了。整个过程不到十秒,比你装个桌面版 Nginx 快得多。想看看跑着的容器?
docker ps。想停掉?docker stop my-nginx。想删掉?docker rm my-nginx。注意,删容器不会删镜像,镜像还在硬盘上躺着。自己写 Dockerfile 才叫入门
假设你有个 Python 脚本
app.py,依赖 Flask。在同目录下建个文件叫Dockerfile,内容这么写:FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python", "app.py"]
逐行解释:
FROM指定基础镜像,slim 版本体积小;WORKDIR设工作目录;COPY把本地文件拷进去;RUN在构建时执行命令;CMD是容器启动时跑的默认命令。注意COPY requirements.txt .和COPY . .分两步,这是为了利用 Docker 的层缓存——只要 requirements.txt 没变,pip install 那层就不会重新跑,构建速度飞快。然后
docker build -t my-python-app .,-t给镜像起名。跑起来:docker run -p 5000:5000 my-python-app。如果 Flask 监听 5000 端口,本机就能访问了。踩坑提醒: 容器里的 localhost 不是你的宿主机。容器里连数据库得用宿主机 IP 或者 Docker 网络别名。我当初在容器里写localhost:3306连 MySQL,死活连不上,后来改成host.docker.internal才通。数据别丢:挂载卷
容器删了,里面写的数据也没了。想持久化?用
-v挂载。比如 MySQL:docker run -d -p 3306:3306 -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8
mysql_data是 Docker 管理的卷,存在宿主机某个目录下,具体在哪用docker volume inspect mysql_data查。你也可以挂载本地目录:-v /home/me/mysql_data:/var/lib/mysql。后者更直观,我一般用这种。网络:容器之间怎么聊天
默认所有容器都在 bridge 网络里,但只能通过 IP 互访,IP 还会变。最好自己建个网络:
docker network create my-net docker run -d --name db --network my-net mysql:8 docker run -d --name web --network my-net my-python-app
这样 web 容器里直接
ping db就能通,Docker 内置 DNS 会解析容器名。省心。最后一条实用命令
docker system prune -a能清掉所有没在用的镜像、容器、网络。慎用,但磁盘爆了的时候真救命。我上次跑了一堆测试容器,硬盘少了 20 个 G,一条命令全回来了。Docker 没那么玄乎,核心就是“打包—分发—运行”三步。你先跑通一个 nginx,再自己 build 一个 Python 镜像,剩下的命令边用边查。别一开始就啃官方文档几百页,容易劝退。
``` 顶: 1踩: 36






评论专区