Docker - 入门教程

发布时间:2026/10/24 5:15:14
Docker - 入门教程 官网Docker 官网http://www.docker.comDocker Hub 官网镜像商店https://hub.docker.com/官方手册地址英文https://docs.docker.com/engine/install/解决的痛点使用Docker容器解决环境重新创建时复杂的配置流程开发人员利用 Docker 可以消除协作编码时“换台机器不能正常工作”的问题。与虚拟机的区别说白了就是轻量很多虚拟机还要带着操作系统Docker 介绍1.Docker三要素镜像是容器的“模板”容器是镜像的“运行态”。镜像提供基础环境容器在其上实现动态操作。三者关系 我们从 仓库 pull (拉取) 镜像到本地然后以这个镜像为模板run (运行) 起一个或多个容器。项目仓库Registry镜像Image容器Container生活比喻超市月饼模具用模具做出来的月饼作用存放、下载各种镜像只读模板用来创建容器真正运行、可使用、可修改的实例数量关系1 个仓库 包含无数镜像1 个镜像 可创建出无数容器1 个容器 只来自 1 个镜像静态/动态静态存放文件静态文件模板不可运行动态运行状态占用资源是否可修改一般不修改远程公共只读不可直接修改可读写临时修改生命周期长期存在远程服务器本地持久存在启动→运行→停止→删除与其他关系提供镜像来源从仓库下载用于创建容器由镜像创建依赖镜像存在常用命令docker pull、docker pushdocker images、docker rmidocker run、docker ps、docker rm2.Docker与Docker Desktop对比Linux 下原生 Docker vs Docker Desktop 对比对比项原生 Docker命令行Docker Desktop桌面版正式名称Docker EngineDocker Desktop运行方式直接跑在 Linux 内核上跑在QEMU 虚拟机里性能极高几乎无损耗有虚拟机开销更耗资源容器/镜像和系统共享全局可用独立一套和原生不互通启动速度快慢要启虚拟机图形界面无纯命令行有 GUI 面板适用场景服务器、生产、开发环境本地测试、新手体验服务器推荐✅强烈推荐❌不推荐Ubuntu安装Docker Engine官方手册地址https://docs.docker.com/engine/install/ubuntu/这里安装的是纯命令行dockerDocker Engine1.前置条件系统版本要求Ubuntu 22.04、24.04 或最新版本非 LTS 的 x86-64 系统。网络要求检查Ubuntu的网络配置。选择最佳的软件源连接外网。网络问题会导致很多莫名其妙的问题。卸载旧docker有的Linux系统会自带docker卸载旧的防止冲突如果找不到说明没安装旧docker不用管了sudoaptremove$(dpkg --get-selections docker.iodocker-composedocker-compose-v2 docker-doc podman-docker containerd runc|cut-f1)2.设置apt在首次在新主机上安装 Docker Engine 之前,您需要设置 Dockerapt仓库。之后,您可以安装和更新来自仓库的 Docker。# Add Dockers official GPG key:sudoaptupdatesudoaptinstallca-certificatescurlsudoinstall-m0755-d/etc/apt/keyringssudocurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg-o/etc/apt/keyrings/docker.ascsudochmodar /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:sudotee/etc/apt/sources.list.d/docker.sourcesEOF Types: deb URIs: https://download.docker.com/linux/ubuntu Suites:$(./etc/os-releaseecho${UBUNTU_CODENAME:-$VERSION_CODENAME})Components: stable Signed-By: /etc/apt/keyrings/docker.asc EOFsudoaptupdate执行以下命令若能看到docker-ce的安装信息说明配置成功apt-cachepolicy docker-ce3.安装 Docker 软件包安装dockersudoaptinstalldocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin#启动dockersudosystemctl startdocker#查看docker版本dockerversion4.配置 Docker 镜像加速注意阿里云的docker现在只能阿里云服务器用其它公网连接会报错403这里配置其他的镜像地址sudomkdir-p/etc/docker# 创建全新的daemon.json配置文件# min-api-version是为了和后面的Portainer工具适配不使用的话也可以不配置否则会有兼容性问题sudotee/etc/docker/daemon.jsonEOF { registry-mirrors: [ https://docker.1ms.run, https://hub-mirror.c.163.com, https://docker.m.daocloud.io ], dns: [223.5.5.5, 119.29.29.29], min-api-version: 1.24 } EOF重启docker#1、直接重启sudosystemctl restartdocker#2、先停止再启动# 停止Docker服务sudosystemctl stopdocker# 启动Docker服务sudosystemctl startdocker5.验证是否安装成功#验证镜像#此命令下载测试镜像并将其运行在容器中。当容器运行,打印确认消息并退出sudodockerrun hello-world显示下面内容则安装成功添加用户权限防止Ubuntu系统docker命令前面还要每次加sudo#将当前用户添加到 docker 组sudousermod-aGdocker$USER#刷新组权限无需重启newgrpdockerDocker Compose总结用来批量管理容器的避免记很多命令和配置和镜像关系不大1.适用场景场景执行docker compose up -d后的效果对你的价值备注场景1什么容器都没有新增并运行docker-compose 配置的容器简化多个服务器时的容器配置场景2容器已运行yml配置没改输出xxx is up-to-date容器已是最新无任何变化验证配置和运行状态一致确认容器没异常场景3修改了yml配置比如Gitea改端口、加重启策略自动停止旧容器 → 按新配置重建/启动容器 → 保留原有数据卷数据不丢不用手动删容器一键更新容器配置场景4容器已经被手动停止docker stop gitea直接启动已停止的容器复用原有配置和数据比docker start更统一不用记容器名注意旧容器需要是docker compose启动的才行场景5服务器重启后容器全部停止一键启动所有配置的容器按yml里的重启策略/依赖顺序替代逐个执行docker start批量恢复服务场景6yml里新增了服务比如加了Redis只创建启动新增的Redis容器原有Gitea/MySQL容器不受影响无缝扩展服务不用单独跑docker run启动新容器2.安装#先查看是否安装按照前面操作新安装的docker会自带#返回版本号就是已安装dockercompose version#如果没安装#对于Ubuntu和Debian运行sudoapt-getupdatesudoapt-getinstalldocker-compose-plugin#再次查看是否安装我这里是自带的5.0.2版本dockercompose version3.创建配置文件目录#找个位置存着cd/service/docker# 存放 docker-compose.yml 配置文件sudomkdir-pcompose#安装查看目录树工具sudoaptinstalltree# version 2.1.1-2ubuntu3.24.04.2#查看目录树tree /service/dockercd/service/docker/compose#修复目录权限# 赋予ubuntu用户对该目录的所有权限sudochown-Rubuntu:ubuntu /service/docker/compose# 确保目录有写入权限sudochmod-R755/service/docker/compose#安装vimsudoaptinstallvim#创建 docker-compose.yml 文件用 vim 编辑新手也可用 nanovimdocker-compose.yml4.创建配置文件这里以Gitea版本控制软件服务端部署为例Gitea详细使用手册可以参考https://blog.csdn.net/weixin_46707734/article/details/157969264?spm1001.2014.3001.5501services:# Gitea 服务配置gitea: image: gitea/gitea:latest# 使用官方最新镜像和命令中的镜像一致container_name: gitea# 容器名称对应 --name gitearestart: unless-stopped# 重启策略对应 --restart unless-stoppedports: -3000:3000# 端口映射对应 -p 3000:3000volumes:# 数据卷挂载对应 -v /service/docker/gitea:/data- /service/docker/gitea:/data校验配置文件需要docker compose 新版本# 校验配置语法是否正确无报错输出格式化配置即正常dockercompose config5.停止并删除容器因为之后使用Docker Compose管理时数据券挂载的目录相同这一步只是删除容器并没有删除数据券所以之后Docker Compose创建容器时数据和配置是相同的不删除会导致Docker Compose创建容器时报错容器命名冲突#查看现在容器情况dockerps-a#这里因为之前已经单独启动容器了所以会有一个gitea的容器#输出为可以看到gitea现在正在运行CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6147d7688e77 gitea/gitea:latest/usr/bin/entrypoint…7days ago Up14minutes22/tcp,0.0.0.0:3000-3000/tcp,[::]:3000-3000/tcp gitea 7ecc482679e3 hello-world/hello7days ago Exited(0)7days ago affectionate_dijkstra# 停止并删除手动创建的 gitea 容器gitea的数据保存在 /service/docker/gitea# 如果原来没有重名的旧容容器这步就不需要操作了dockerstop giteadockerrmgitea#再次查看现在容器情况dockerps-a6.使用Docker Compose启动默认读取「当前工作目录」下的默认配置文件【docker-compose.yml】或者 -f 则指定读取的路径和文件。执行命令时注意所在目录# Docker Compose启动服务此时容器归 Compose 管理dockercompose up-dgitea#执行之后显示为:ubuntuubuntu-VMware:/service/docker/compose$dockercompose up-dgitea[]up1/1 ✔ Container gitea Created# 查看容器是否正常运行下面两个命令都可以# docker compose命令之后看到纳入docker compose管理的# docker命令可以看到所有的dockercomposepsgiteadockerps-a执行完毕可以尝试是否可以正常打开gitea的页面http://localhost:3000/可以重启下ubuntu测试是否实现开机自动启动服务可视化工具PortainerPortainer 本质是一个运行在 Docker 容器中的管理工具它通过 Docker Engine 提供的 API默认通过 /var/run/docker.sock 套接字与 Docker Engine 通信相当于 “可视化的命令行客户端”而非替代或修改 Docker Engine。1.compose新增配置portainer修改配置文件docker-compose.yml新增下面的配置这里拉取的不是官方的镜像优点是汉化版本生产环境不建议使用官方镜像image: portainer/portainer-ce:latest#Portainer配置portainer: image:6053537/portainer-ce:latest container_name: portainer restart: unless-stopped# 开机自启privileged:true# 确保能访问 Docker 套接字ports: -9000:9000# Portainer Web UI HTTP 端口-9443:9443# Portainer Web UI HTTPS 端口推荐使用-8000:8000# 边缘节点通信端口可选单机可保留volumes: - /var/run/docker.sock:/var/run/docker.sock# 核心连接本地 Docker Engine- /service/docker/portainer:/data# 统一将 Portainer 数据放在和 Gitea 同目录下便于管理# 挂载宿主机的 passwd 和 group 文件解决用户识别问题- /etc/passwd:/etc/passwd:ro - /etc/group:/etc/group:ro校验配置文件需要docker compose 新版本# 校验配置语法是否正确无报错输出格式化配置即正常dockercompose config2.启动容器# 一键启动 Gitea Portainer 两个服务后台运行cd/service/docker/composedockercompose up-d#启动成功则显示ubuntuubuntu-VMware:/service/docker/compose$dockercompose up-d[]up11/11 ✔ Image portainer/portainer-ce:latest Pulled21.0s ✔ Container portainer Created0.3s ✔ Container gitea Running# 查看容器dockerps-a3.访问管理页面#首次登录需要设置密码https://localhost:9443Docker常用命令1.启动类命令#启动dockersystemctl startdocker#停止dockersystemctl stopdocker#重启dockersystemctl restartdocker#查看docker状态systemctl statusdocker#开机启动systemctlenabledocker#查看docker概要信息dockerinfo#查看docker总体帮助文档docker--help#查看docker命令帮助文档docker具体命令--help2.镜像命令1. 查看本地镜像#列出所有本地镜像dockerimages# 按名称过滤dockerimages ubuntu -a列出本地所以镜像含历史映像号 -q只显示镜像ID#表头各个选项说明:REPOSITORY表示镜像的仓库源 TAG镜像的标签版本号 IMAGE ID镜像ID CREATED镜像创建时间 SIZE镜像大小 同一仓库源可以有多个 TAG版本代表这个仓库源的不同个版本我们使用 REPOSITORY:TAG 来定义不同的镜像。 如果你不指定一个镜像的版本标签例如你只使用 ubuntudocker 将默认使用 ubuntu:latest 最新镜像#显示镜像的元数据和配置dockerinspect镜像名#显示镜像的构建历史Dockerfile 的层dockerhistory镜像名2. 远程仓库搜索镜像dockersearch hello-world#显示点赞数最多的前5个镜像dockersearch--limit5hello-world#返回参数NAME镜像名称。提交者/镜像名称 DESCRIPTION镜像说明 STARS点赞数 OFFICIAL是否经过官方认证 AUTOMATED是否是自动构建的3. 拉取镜像从远程仓库如 Docker Hub下载镜像dockerpull镜像名:标签# 示例dockerpull ubuntu:20.04#没有加标签等价于最新版latestdockerpull nginx:latest4. 删除镜像# 正常删除dockerrmi镜像ID或名称# 强制删除忽略运行中的容器依赖# 不太建议使用容器可能会残留建议先删除容器再删除镜像dockerrmi-f镜像ID# 删除所有镜像谨慎使用dockerrmi$(dockerimages-q)#删除所有未被使用的镜像悬空镜像dockerimage prune# 强制清理无需确认dockerimage prune-f5. 查看docker空间dockersystemdf#返回参数TYPE类型 TOTAL总数 ACTIVE活动中的数量 SIZE大小 RECLAIMABLE对应的可伸缩性6. 构建和保存镜像#通过 Dockerfile 构建镜像dockerbuild-t镜像名:标签上下文路径# 示例dockerbuild-tmyapp:v1.dockerbuild-tmyapp:dev-f./Dockerfile.dev.#将镜像导出为 .tar 文件dockersave-o文件名.tar镜像名# 示例dockersave-omyapp.tar myapp:v17. 从文件加载镜像从.tar文件导入镜像dockerload-i文件名.tar# 示例dockerload-imyapp.tar8. 标记和推送镜像#为镜像打标签常用于推送到私有仓库dockertag原镜像名新镜像名:标签# 示例dockertag myapp:v1 myregistry.com/myapp:v1#将镜像推送到远程仓库需先登录dockerpush镜像名:标签# 示例dockerpush myregistry.com/myapp:v1Docker Compose常用命令1.基础命令命令作用示例单个容器/所有容器对比docker compose up 服务名前台启动单个容器实时日志单个docker compose up gitea所有docker compose updocker compose up -d 服务名后台启动单个容器生产首选单个docker compose up -d gitea所有docker compose up -ddocker compose up -d --build 服务名重建并后台启动单个容器修改镜像后单个docker compose up -d --build gitea所有docker compose up -d --builddocker compose stop 服务名停止单个容器保留容器数据不丢单个docker compose stop gitea所有docker compose stopdocker compose start 服务名启动已停止的单个容器复用原有容器单个docker compose start gitea所有docker compose startdocker compose restart 服务名重启单个容器修改配置后生效单个docker compose restart gitea所有docker compose restartdocker compose down 服务名停止并删除单个容器保留数据卷单个docker compose down gitea所有docker compose downdocker compose ps 服务名查看单个容器运行状态单个docker compose ps gitea所有docker compose ps2.日志与排障命令命令作用示例单个容器docker compose logs 服务名查看单个容器所有历史日志docker compose logs giteadocker compose logs -f 服务名实时跟踪单个容器日志排障核心docker compose logs -f giteadocker compose logs --tail100 服务名查看单个容器最后100行日志docker compose logs --tail100 giteadocker compose exec 服务名 命令进入单个容器执行命令调试docker compose exec gitea bash进入Gitea容器docker compose exec gitea cat /data/gitea/conf/app.ini查看Gitea配置3.管理命令命令作用示例单个容器docker compose pause 服务名暂停单个容器临时冻结docker compose pause giteadocker compose unpause 服务名恢复暂停的单个容器docker compose unpause giteadocker compose rm 服务名删除已停止的单个容器清理冗余docker compose rm giteadocker compose pull 服务名拉取单个容器的最新镜像docker compose pull giteadocker compose top 服务名查看单个容器内运行的进程docker compose top gitea

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询