linux系统下使用docker笔录
1. 初始docker
-
Docker 是一个开源的容器化平台,用于开发、部署和运行应用程序。它通过“容器”技术,将应用及其依赖环境打包成一个轻量级、可移植的单元,实现**“一次构建,到处运行”**
-
核心概念
-
容器
-
轻量化的独立运行环境,包含应用代码、运行时、系统工具和库。
-
共享主机操作系统内核,无需完整的操作系统,启动快、资源占用少。
-
与虚拟机相比,容器更轻便、性能更高。
-
-
镜像
-
容器的“模板”,定义了运行环境和应用文件
-
镜像分层的结构使得重复部分可以复用,节省存储空间。
-
-
Dockerfile
- 文本文件,用于定义镜像的构建步骤(如安装依赖、复制文件等)。
-
Docker Hub
- 公共镜像仓库,可以分享和获取官方或社区制作的镜像。
-
2. linux下 安装docker-ce版
2.1 系统更新
sudo yum update -y
2.2 安装docker必要的工具
# 1. 安装必要的工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.3 添加阿里云的Docker CE YUM源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.4 安装Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
2.5 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
至此 docker 安装完成
3. docker的常用指令
3.1关于镜像的常用命令
| 操作类别 | 指令 | 主要参数/示例 | 作用与说明 |
|---|---|---|---|
| 🔍 查看镜像 | docker images | docker images | 列出本地所有镜像(仓库名、标签、ID、大小)。 |
docker image ls | docker image ls | 同上,为更现代的命令格式。 | |
docker image inspect | docker image inspect nginx:latest | 显示镜像的详细信息(元数据、层、配置)。 | |
| ⬇️ 拉取镜像 | docker pull | docker pull ubuntu:20.04 | 从仓库(默认Docker Hub)下载镜像到本地。 |
| 🏷️ 标记镜像 | docker tag | docker tag nginx myrepo/nginx:v1 | 为镜像创建一个新标签(常用于推送到私有仓库)。 |
| ⬆️ 推送镜像 | docker push | docker push myrepo/nginx:v1 | 将本地镜像推送到远程仓库。 |
| 🐳 运行镜像 | docker run | docker run -it --rm ubuntu bash | 从镜像创建并启动一个新容器。 |
| 🧹 删除镜像 | docker rmi | docker rmi old_image | 删除本地一个或多个镜像(需无容器依赖)。 |
docker image prune | docker image prune -a | 清理所有未被使用的悬虚镜像(无标签)或全部无用镜像。 | |
| 📦 保存与加载 | docker save | docker save -o nginx.tar nginx | 将镜像保存为离线tar包(完整镜像)。 |
docker load | docker load -i nginx.tar | 从tar包加载镜像到本地。 | |
| 🔄 导出与导入 | docker export | docker export -o cont.tar 容器ID | 将容器当前状态导出为文件系统快照(非完整镜像)。 |
docker import | docker import cont.tar new_image | 从容器快照文件导入为新镜像。 | |
| 🔎 搜索镜像 | docker search | docker search mysql | 在Docker Hub中搜索镜像。 |
3.2 常用指令详解与场景
1. 镜像拉取与运行 (pull & run)
这是最核心的组合操作。最佳实践是始终指定标签,以确保环境一致。
# 拉取官方MySQL 8.0镜像
docker pull mysql:8.0
# 以后台模式运行MySQL容器,并设置环境变量
docker run -d --name my_mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
2. 镜像清理 (prune)
随着使用,系统中会产生很多名为 <none> 的中间层镜像(称为“悬虚镜像”),定期清理可以释放磁盘空间。
# 交互式安全清理(推荐新手)
docker image prune
# 强制清理所有悬虚镜像
docker image prune -f
# 清理所有未被任何容器引用的镜像(危险,但彻底)
docker image prune -a
区别说明:docker image prune 只清理 <none> 的中间镜像。-a 会额外清理那些未被任何容器使用的、但有标签的镜像,使用前请确认。
3. 镜像保存与加载 (save & load)
适用于离线环境迁移或完整备份。
# 将镜像打包成文件
docker save -o my_nginx_backup.tar nginx:alpine
# 将tar文件复制到另一台机器后,加载镜像
docker load -i my_nginx_backup.tar
核心区别:
save/load针对的是“镜像”:保留完整的历史和元数据,是镜像的完整克隆。export/import针对的是“容器”:只保存容器当时的文件系统快照,会丢弃历史记录和部分元数据,生成的镜像更小,但不可逆。
3.3 容器常用指令
| 操作类别 | 指令 | 主要参数/示例 | 作用与说明 |
|---|---|---|---|
| 🚀 创建与运行 | docker run | docker run -d -p 80:80 --name my_nginx nginx | 核心指令:从镜像创建并启动新容器。-d后台运行,-p端口映射。 |
docker create | docker create --name temp_nginx nginx | 只创建容器但不启动,用于预先配置。 | |
| 📋 查看列表 | docker ps | docker ps -a | 列出容器(-a包含已停止的)。 |
| ⏯️ 启停与重启 | docker start | docker start my_nginx | 容器ID | 启动一个已停止的容器。 |
docker stop | docker stop my_nginx | 容器ID | 优雅停止容器(发送SIGTERM信号)。 | |
docker restart | docker restart my_nginx | 容器ID | 重启容器。 | |
docker pause/unpause | docker pause my_nginx | 容器ID | 暂停/恢复容器内所有进程。 | |
| 🔌 进入与执行 | docker exec | docker exec -it my_nginx | 容器ID bash | 重要:在运行中的容器内执行新命令。-it进入交互式终端。 |
docker attach | docker attach my_nginx | 附加到容器的主进程(退出可能导致容器停止)。 | |
| 📤 输入输出 | docker logs | docker logs -f --tail 10 my_nginx | 查看容器日志(-f实时跟踪)。 |
docker cp | docker cp file.txt my_nginx:/path/ | 在容器和宿主机间复制文件。 | |
| 💾 提交与检查 | docker commit | docker commit my_nginx my_image:v1 | 将容器的当前状态保存为新镜像(慎用)。 |
docker inspect | docker inspect my_nginx | 查看容器的详细配置和状态(JSON格式)。 | |
| 🧹 删除容器 | docker rm | docker rm -f my_nginx | 删除已停止的容器(-f强制删除运行中的)。 |
docker container prune | docker container prune | 一键删除所有已停止的容器。 | |
| 📊 资源监控 | docker stats | docker stats | 实时显示所有容器的资源占用(CPU、内存)。 |
docker top | docker top my_nginx | 显示容器内运行的进程列表。 |
典型场景:Web服务
# 1. 创建并后台运行一个Nginx容器,映射宿主机的8080端口到容器的80端口
docker run -d --name my_web -p 8080:80 nginx:alpine
# 2. 查看容器是否运行
docker ps
# 3. 优雅停止容器
docker stop my_web
# 4. 重新启动
docker start my_web
# 5. 当不再需要时,停止并删除容器
docker stop my_web && docker rm my_web
# 或者使用强制删除(不推荐用于生产)
docker rm -f my_web
2. 容器交互与调试 (exec & logs)
# 1. 进入运行中的容器,启动一个bash shell进行调试(最常用)
docker exec -it my_web /bin/bash # 或 /bin/sh(Alpine镜像)
# 2. 在容器内执行单条命令,例如查看配置文件
docker exec my_web cat /etc/nginx/nginx.conf
# 3. 实时查看日志,常用于调试应用输出
docker logs -f --tail 50 my_web
# 4. 从容器复制日志文件到宿主机分析
docker cp my_web:/var/log/nginx/error.log ./nginx_error.log
注意:docker attach 会连接到容器的主进程(如Nginx)。如果该进程是交互式的(如bash),你才能输入命令;退出(按Ctrl+C或Ctrl+P Ctrl+Q)可能会终止容器。因此,docker exec 是更安全、更常用的进入方式。
3. 容器维护与清理 (prune)
定期清理已停止的容器可以释放资源。
# 交互式删除所有已停止的容器(安全)
docker container prune
# 或直接强制删除
docker container prune -f
4. 配置关于docker 加速问题
由于docker hub 停止了国内的访问,镜像文件我们无法pull到,这里我配置的方式是毫秒镜像 https://1ms.run/
-
注册毫秒镜像,因为需要登录才能pull到镜像文件
-
登录毫秒镜像看他官方文档 https://1ms.run/docs/1ms.run/docker-login/linux
-
登录成功后就可正常拉起镜像啦
5. 安装DPanel社区版来可视化管理操作docker
如果是新手小白,可以通过安装DPanel来管理和操作docker,既方便又快捷
-
安装命令
-
lite 版
docker run -d --name dpanel --restart=always \ -p 8807:8080 -e APP_NAME=dpanel \ -v /var/run/docker.sock:/var/run/docker.sock -v dpanel:/dpanel \ dpanel/dpanel:lite -
标准版
docker run -d --name dpanel --restart=always \ -p 80:80 -p 443:443 -p 8807:8080 -e APP_NAME=dpanel \ -v /var/run/docker.sock:/var/run/docker.sock -v dpanel:/dpanel \ dpanel/dpanel:latest
-
安装成功即可通过ip:8807端口访问到管理页面
官方安装教程: https://github.com/donknap/dpanel
docker、DPanel一件安装脚本教程 使用安装脚本
更多推荐
所有评论(0)