ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Docker 从零入门:一篇笔记搞定核心命令

Docker 从零入门:一篇笔记搞定核心命令 前言Docker 是什么为什么你需要它在软件开发中环境问题一直是让人头疼的痛点——我电脑上明明跑得好好的怎么到你那里就不行了 这种对话几乎每个开发者都经历过。Docker 就是来解决这个问题的。它通过容器化技术把应用程序和它所需要的运行环境操作系统、依赖库、配置文件等打包在一起形成一个可移植的镜像。这个镜像可以在任何安装了 Docker 的机器上运行保证运行结果完全一致。你可以把 Docker 想象成一个轻量级的虚拟机但它比虚拟机快得多、资源消耗小得多启动时间以秒计算。Docker 的核心概念就三个概念通俗理解镜像Image相当于一个安装包包含了程序和环境。只读不能修改容器Container镜像跑起来之后就是容器。相当于正在运行的程序仓库Registry存放镜像的地方就像代码托管平台存代码一样下面我会按照「镜像 → 容器 → 数据卷 → 镜像构建 → 仓库推送 → Docker Compose」这条主线带你一步步掌握 Docker 的常用操作。第一部分镜像操作镜像是 Docker 的基石所有容器都从镜像启动。1. 查看本地所有镜像bashdocker images输出示例text可以看到镜像的仓库名、标签、ID、创建时间和大小。这个命令会列出你本地已经下载好的所有镜像。2. 搜索镜像如果你想找某个镜像可以先搜索看看bashdocker search nginx输出中重点关注两列OFFICIAL显示[OK]表示官方镜像安全性更高优先选择STARS星数越多说明使用的人越多口碑越好搜索可以帮助你发现有哪些可用的镜像版本以及社区对它的认可程度。3. 下载镜像bash# 下载最新版本标签名默认是 latest docker pull nginx # 下载指定版本 docker pull mysq:8.4如果不指定标签默认下载latest最新版本。docker pull是使用镜像的第一步只有下载到本地才能创建容器。4. 删除镜像bash# 删除指定镜像 docker rmi 镜像名:latest # 如果镜像正在被容器使用需要先删除容器或者加 -f 强制删除 docker rmi -f nginx:latest如果镜像还在被某个容器使用哪怕容器已经停止直接删除会报错。要么先删除容器要么用-f强制删除。第二部分容器操作镜像是模板容器是运行起来的实例。你可以把镜像理解成一个类容器就是那个类 new 出来的对象。1. 创建并运行容器bashdocker run --name my-nginx -p 8080:80 -d nginx:latest参数解释参数含义--name my-nginx给容器起个名字方便后续管理-p 8080:80端口映射宿主机的 8080 端口 → 容器内的 80 端口-d后台运行detach 模式不会占用终端nginx:latest使用哪个镜像来创建容器运行后打开浏览器访问http://你的服务器IP:8080就能看到 Nginx 的欢迎页面了。如果是在本地虚拟机访问http://localhost:8080。补充说明-p参数可以多次使用比如-p 8080:80 -p 8443:443可以同时映射多个端口。2. 查看容器bash# 查看正在运行的容器 docker ps # 查看所有容器包括已停止的 docker ps -adocker ps -a会列出所有容器包括已经停止的方便你找到容器的 ID 或名字。输出中可以看到容器 ID、镜像、创建时间、状态、端口映射等信息3. 进入正在运行的容器有时候你需要进容器里面查看文件、修改配置或者调试程序可以用这个命令bashdocker exec -it my-nginx bash-it交互式终端i 表示保持输入流t 表示分配伪终端my-nginx容器名也可以用容器 IDbash进入后使用的 shell进入之后你就相当于在容器内部的操作系统里了可以执行各种 Linux 命令——查看文件、安装软件、修改配置等。退出时输入exit即可。4. 启动 / 停止 / 重启容器bash# 停止容器 docker stop my-nginx # 启动已停止的容器 docker start my-nginx # 重启容器 docker restart my-nginx注意docker run是创建并启动而docker start是用来启动已经创建但停止了的容器。docker restart则相当于先 stop 再 start。5. 删除容器bash# 删除已停止的容器 docker rm my-nginx # 强制删除运行中的容器 docker rm -f my-nginx容器删除后里面的数据会全部丢失除非使用了数据卷。所以生产环境的重要数据一定要挂载到数据卷里。第三部分数据卷Volume容器是无状态的——当容器被删除里面的所有数据都会丢失。但很多场景下我们需要持久化数据比如数据库文件MySQL、PostgreSQL网站上传的图片和附件日志文件配置文件这时候就需要用到数据卷。数据卷相当于宿主机上一个由 Docker 管理的目录被挂载到容器内部容器删除后数据依然保留。1. 查看所有数据卷bashdocker volume ls显示当前系统中所有数据卷的列表。2. 创建数据卷bashdocker volume create my-data创建一个名为my-data的数据卷。Docker 会在宿主机上为它分配一个存储位置通常在/var/lib/docker/volumes/下。3. 使用数据卷启动容器bashdocker run --name my-nginx -p 8080:80 -v my-data:/usr/share/nginx/html -d nginx:latest-v my-data:/usr/share/nginx/html表示把my-data这个数据卷挂载到容器内的/usr/share/nginx/html目录。这个目录是 Nginx 的默认网页根目录。你在宿主机上修改数据卷里的内容容器里的网页就会同步更新。反过来容器里写入的数据也会持久化到数据卷中。4. 删除数据卷bashdocker volume rm my-data⚠️ 删除数据卷会永久丢失所有数据操作前请确认是否需要备份。第四部分使用 Dockerfile 构建镜像当你需要定制自己的镜像时就需要用到 Dockerfile。它就是一个文本文件里面写满了构建镜像的指令告诉 Docker 如何一步步组装出你想要的镜像。1. 项目结构text/workspace/ ├── home.conf # Nginx 站点配置文件 ├── home.html # 网站首页 ├── img/ # 图片资源 ├── my_font/ # 自定义字体 └── nosleep/ # 子页面目录home.conf内容如下nginxserver { listen 10000; root /usr/share/nginx/html; index home.html index.htm; }3. 构建镜像在/workspace目录执行bashdocker build -t my-site:v1 .-t my-site:v1指定镜像名为my-site标签为v1.表示使用当前目录的 Dockerfile4. 运行容器bashdocker run --name my-site -p 10000:10000 -d my-site:v15. 验证容器状态bash# 查看容器是否正常运行 docker ps # 查看容器日志 docker logs my-site # 进入容器内部检查文件 docker exec -it my-site bash ls -la /usr/share/nginx/html/第五部分推送镜像到仓库自己构建的镜像可以推送到远程仓库方便在别的机器上下载使用。Docker 官方提供免费的镜像仓库 Docker Hub。1. 给镜像打标签Docker Hub 要求镜像名以用户名开头所以需要重新打一个标签bashdocker tag my-site:v1 你的用户名/my-site:v1举个例子如果你的 Docker Hub 用户名是yournamebashdocker tag my-site:v1 yourname/my-site:v12. 登录 Docker Hubbashdocker login -u 你的用户名执行后会提示输入密码或 access token正确输入后登录成功。3. 推送镜像bashdocker push 你的用户名/my-site:v1推送完成后你就可以在 Docker Hub 上看到这个镜像了。在其他机器上直接用docker pull 你的用户名/my-site:v1就能下载使用。2. 启动所有服务bashdocker compose up -d-d表示后台运行。执行后两个容器会同时启动并且通过同一个网络互相连通。3. 停止所有服务bashdocker compose down4. 其他常用命令docker compose ps # 重启所有服务 docker compose restart # 查看实时日志 docker compose logs -f第七部分实用工具命令1. 从容器拷贝文件到本地docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf2. 从本地拷贝文件到容器bashdocker cp ./index.html my-nginx:/usr/share/nginx/html/3. 查看容器日志bash# 查看完整日志 docker logs my-nginx # 实时跟踪日志 docker logs -f my-nginx # 查看最近 100 行日志 docker logs --tail 100 my-nginx第八部分常用命令速查表镜像命令命令说明docker images查看所有镜像docker pull 镜像名:标签下载镜像docker rmi 镜像名:标签删除镜像docker search 关键词搜索镜像docker build -t 镜像名:标签 .构建镜像容器命令命令说明docker run --name 容器名 -p 宿主机:容器 -d 镜像名创建并运行容器docker ps查看运行中的容器docker ps -a查看所有容器docker start 容器ID启动容器docker stop 容器ID停止容器docker restart 容器ID重启容器docker exec -it 容器名 bash进入容器docker rm 容器ID删除容器docker logs 容器名查看日志数据卷命令命令说明docker volume ls显示所有数据卷docker volume create 名字创建数据卷docker volume rm 名字删除数据卷仓库命令命令说明docker tag 镜像名:标签 用户/镜像名:标签打标签docker login -u 用户名登录docker push 用户/镜像名:标签推送镜像Docker Compose 命令命令说明docker compose up -d启动所有服务docker compose down停止所有服务docker compose ps查看状态docker compose logs -f查看日志Docker 的学习曲线比 Git 要平缓得多核心命令也就那么十几个。只要理解了「镜像 → 容器 → 仓库」这条主线再配合数据卷做持久化、Dockerfile 做定制化、Compose 做编排Docker 就算入门了。在实际开发中Docker 最大的价值在于环境一致性——你再也不用担心在我电脑上能跑这种问题了。而且现在几乎所有云平台都支持容器化部署学会 Docker 已经成了一项必备技能。文中的命令都是我自己日常使用中反复敲过的你可以放心地在自己的环境里练习。如果遇到任何问题回头看看速查表或者用docker --help查看命令帮助都能找到答案。希望这篇博客能帮到你。
返回列表