Ubuntu系统下Docker镜像构建与容器管理的完整指南

 更新时间:2026年05月07日 08:46:13   作者:炘爚  
这篇文章主要为大家详细介绍了Docker镜像构建与容器管理的核心知识,主要内容包括镜像构建,容器启动,端口映射等,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

一、安装Docker

依次按照下面步骤即可完成docker的安装。

1、更新软件源

sudo apt update

2、安装基本软件

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y

3、指定使用阿里云镜像

sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

4、安装docker-ce

sudo apt-get install docker-ce -y

5、查看docker版本

docker version

6、配置可用镜像源,创建daemon.json文件,切换到/etc/docker

cd /etc/docker
sudo touch daemon.json

7、编辑/etc/docker/daemon.json文件

sudo vim daemon.json

8、把下面的内容复制到daemon.json文件中

{
    "registry-mirrors": [
        "https://docker.1panel.live",
        "https://hub.rat.dev"
    ]
}

9、重启docker

systemctl daemon-reload
systemctl restart docker

10、继续验证和部署

# 1. 拉取测试镜像
docker pull hello-world
docker run hello-world

11、拉取nginx

# 1. 拉取 Nginx
docker pull nginx

# 2. 运行 Nginx 容器
docker run -d --name my-nginx -p 8080:80 nginx

# 3. 查看运行状态
docker ps

12、拉取redis

docker run -d --name my-redis -p 6380:6379 redis

13、拉取mysql

docker run -d --name my-mysql -p 3366:3365 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

二、镜像构建

1. 什么是 Docker 镜像

  • 它是一个只读的模板,包含了运行应用所需的一切:代码、依赖库、配置文件、环境变量等。
  • 可以把它想象成一个打包好的绿色软件安装包,拿到哪里都能直接运行,不用再装依赖。
  • 镜像的底层是分层存储:比如 nginx:alpine 镜像,底层是 Alpine Linux 系统,上层是 Nginx 服务,每一层都是只读的,修改时只会在最上层添加新层,节省空间。

2. 镜像构建的两种方式

方式 1:拉取官方镜像(docker pull)

命令格式:

docker pull 镜像名:版本
# 比如:
docker pull nginx:alpine
docker pull mysql:8.0
docker pull redis:alpine

原理:从 Docker Hub(官方镜像仓库)下载别人已经构建好的镜像,直接用,不用自己写配置。

配置的国内镜像源 ustc.edu.cn 就是用来加速下载的,面试可以说:“我配置了国内镜像源,解决了官方仓库访问慢的问题”

方式 2:自定义构建(docker build+ Dockerfile)

核心文件:Dockerfile(镜像的构建脚本)

一个完整的 Nginx 项目镜像构建流程:

1.准备项目文件:index.html(你的网页代码)

2.写 Dockerfile

# 1. 基础镜像:基于轻量版 Nginx 构建
FROM nginx:alpine
# 2. 复制本地文件到容器的 Nginx 目录
COPY index.html /usr/share/nginx/html/index.html
# 3. 声明容器提供服务的端口
EXPOSE 80
# 4. 容器启动时执行的命令(让 Nginx 前台运行,容器不会退出)
CMD ["nginx", "-g", "daemon off;"]

3.构建镜像:

docker build -t my-web-app:v1 .

我了解 Dockerfile 编写,能将静态项目打包成镜像,实现一次构建、随处运行,解决了开发环境和生产环境不一致的问题

二、容器启动、端口映射与环境隔离

1. 容器是什么?和镜像的关系?

  • 容器是镜像运行起来的实例,一个镜像可以启动无数个容器。
  • 镜像只读,容器可写:启动容器时,Docker 会在镜像的只读层上添加一个可写层,所有修改都发生在可写层,不会影响镜像本身。
  • 容器和虚拟机的区别:
    • 虚拟机:模拟一整套硬件,运行完整的操作系统,占用资源多、启动慢。
    • Docker 容器:共享主机的内核,只打包应用和依赖,占用资源少、秒级启动,这就是 “轻量级容器化” 的优势。

2. 容器启动(docker run)

命令格式:

docker run [参数] 镜像名

你必须掌握的 3 个核心参数:

  1. -d:后台运行容器,不占用终端,比如 docker run -d nginx:alpine
  2. --name:给容器起个名字,方便管理,比如 docker run -d --name my-nginx nginx:alpine
  3. -e:设置环境变量,比如启动 MySQL 时设置密码:docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

3. 端口映射(-p)—— 外部访问容器服务的关键

命令格式:

docker run -p 主机端口:容器端口 镜像名
# 比如:
docker run -d -p 8080:80 --name my-nginx nginx:alpine

含义:把主机的 8080 端口,映射到容器的 80 端口(Nginx 默认端口),外部访问主机IP:8080 就能访问容器里的 Nginx 服务。

我了解 Docker 端口映射原理,能将容器服务暴露到主机网络,实现外部访问,同时通过不同主机端口区分多个同类型容器,避免端口冲突

4. 环境隔离(Docker 的核心优势)

  • 每个容器都有独立的:
    • 文件系统:容器里的文件不会影响主机和其他容器
    • 网络栈:默认使用桥接网络,每个容器有独立的 IP,互相隔离
    • 进程空间:容器里的进程是主机进程的子进程,互相不干扰
  • 作用:提升应用部署的安全性,比如你在容器里装的软件,不会污染主机环境;Nginx 容器崩溃了,不会影响 MySQL 容器。
  • 我了解 Docker 的环境隔离机制,容器之间相互隔离,互不影响,提升了应用部署的安全性和稳定性,也方便了多版本、多服务的并行部署

三、快速部署 MySQL、Redis、Nginx 等中间件

1. Nginx 部署(Web 服务器)

# 拉取镜像
docker pull nginx:alpine

# 启动容器,端口映射 8080:80
docker run -d -p 8080:80 --name my-nginx nginx:alpine
  • 验证:主机浏览器访问 http://虚拟机IP:8080,能看到 Nginx 欢迎页
  • 我能通过 Docker 快速部署 Nginx 服务,配置端口映射,实现静态资源的访问,也能通过挂载本地配置文件修改 Nginx 配置

2. MySQL 部署(数据库)

# 拉取镜像
docker pull mysql:8.0
# 启动容器,设置 root 密码,端口映射 3306:3306
docker run -d -p 3306:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

验证:用主机的数据库工具(Navicat)连接 虚拟机IP:3306,用户 root,密码 123456

我能通过 Docker 快速部署 MySQL 服务,设置 root 密码,配置端口映射,实现外部客户端连接,也了解数据卷挂载,将数据持久化到主机,避免容器删除后数据丢失

3. Redis 部署(缓存)

# 拉取镜像
docker pull redis:alpine
# 启动容器,端口映射 6379:6379
docker run -d -p 6379:6379 --name my-redis redis:alpine
  • 验证:用 Redis 客户端连接 虚拟机IP:6379,能正常读写数据
  • 我能通过 Docker 快速部署 Redis 缓存服务,配置端口映射,实现外部客户端连接,也了解 Redis 持久化配置

四、容器生命周期管理

阶段命令格式作用
创建启动docker rundocker run [参数] 镜像名创建并启动容器
查看状态docker psdocker ps查看正在运行的容器
docker ps -adocker ps -a查看所有容器(包括已停止的)
运行中操作docker execdocker exec -it 容器名 /bin/bash进入运行中的容器,调试命令
docker logsdocker logs 容器名查看容器日志
停止重启docker stopdocker stop 容器名优雅停止容器
docker startdocker start 容器名启动已停止的容器
docker restartdocker restart 容器名重启容器
删除清理docker rmdocker rm 容器名删除已停止的容器
docker rmidocker rmi 镜像名删除无用镜像

我熟练掌握 Docker 容器的生命周期管理,能通过命令实现容器的创建、启动、停止、重启、删除,也能通过 docker exec 进入容器调试,查看日志排查问题”

五、将项目打包镜像并发布运

  1. 准备项目文件:你的网页代码 index.html
  2. 编写 Dockerfile:定义镜像的构建规则
  3. 构建镜像:docker build -t my-project:v1 .
  4. 运行容器:docker run -d -p 8080:80 my-project:v1
  5. 发布运行:可以把镜像推送到私有仓库,在其他服务器上拉取运行,实现一次构建、随处运行。

我了解 Docker 项目打包流程,能将静态项目通过 Dockerfile 构建成镜像,实现应用的容器化部署,解决了开发环境和生产环境不一致的问题,也方便了项目的持续集成与交付”

六、高频问题

Docker 镜像和容器的区别?

  • 镜像:只读模板,用来创建容器,多个容器可以共享同一个镜像
  • 容器:镜像运行起来的实例,可写,每个容器相互隔离

Docker 容器和虚拟机的区别?

  • 虚拟机:模拟硬件,运行完整操作系统,占用资源多、启动慢
  • Docker 容器:共享主机内核,只打包应用和依赖,轻量、秒级启动,隔离性稍弱但足够满足业务需求

Docker 端口映射的原理?

Docker 会在主机上监听指定端口,把请求转发到容器的对应端口,外部通过主机端口访问容器服务

到此这篇关于Ubuntu系统下Docker镜像构建与容器管理的完整指南的文章就介绍到这了,更多相关Docker镜像构建与容器管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker加载镜像时报错no space left on device的彻底解决方案

    Docker加载镜像时报错no space left on device的彻底解

    本文详细记录了在部署FastDDS镜像时遇到磁盘空间不足的问题,并介绍了从排查到彻底解决的完整过程,通过分析根分区空间占用情况,将Docker数据根目录迁移到大分区,并修改daemon.json文件中的data-root配置,最终成功解决了问题,需要的朋友可以参考下
    2025-11-11
  • docker安装portainer方法详细步骤

    docker安装portainer方法详细步骤

    portainer是一款容器管理可视化界面,不想在虚拟中使用命令管理容器的小伙伴,可以选择安装portainer对容器进行管理,查看日志、启动、停止容器等非常方便,这篇文章主要介绍了docker安装portainer方法详细步骤,需要的朋友可以参考下
    2022-10-10
  • Docker 教程之私有仓库详解

    Docker 教程之私有仓库详解

    这篇文章主要介绍了Docker 教程之私有仓库详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • Docker数据卷挂载及宿主机目录挂载使用和区别

    Docker数据卷挂载及宿主机目录挂载使用和区别

    本文主要介绍了Docker数据卷挂载及宿主机目录挂载使用和区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • docker添加网桥并设置ip地址范围操作

    docker添加网桥并设置ip地址范围操作

    这篇文章主要介绍了docker添加网桥并设置ip地址范围操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker搭建lnmp环境的实现步骤

    docker搭建lnmp环境的实现步骤

    DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一键安装程序,本文就来介绍一下docker搭建lnmp环境的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • Docker安装Nginx问题及错误分析

    Docker安装Nginx问题及错误分析

    这篇文章主要介绍了Docker安装Nginx的问题及错误分析正确的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Docker 特性与原理详细介绍与解析

    Docker 特性与原理详细介绍与解析

    这篇文章主要介绍了Docker 特性与原理的相关资料,大家在了解基本命令和基本知识后,来看下原理性的通信,需要的朋友可以参考下
    2016-10-10
  • docker镜像封装方便打包上传一键部署

    docker镜像封装方便打包上传一键部署

    这篇文章主要为大家介绍了docker镜像封装方便打包上传一键部署,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 通过Docker运行AnythingLLM的方法

    通过Docker运行AnythingLLM的方法

    这篇文章主要介绍了通过Docker运行AnythingLLM的方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-12-12

最新评论