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镜像构建与容器管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于iptables的Docker端口白名单控制实现

    基于iptables的Docker端口白名单控制实现

    本文主要介绍了通过iptables为Docker Compose部署的容器设置宿主机端口IP白名单,强调规则顺序与持久化配置,提供单端口和multiport两种实现方式,感兴趣的可以了解一下
    2025-07-07
  • 使用TLS加密通讯远程连接Docker的示例详解

    使用TLS加密通讯远程连接Docker的示例详解

    这篇文章主要介绍了使用TLS加密通讯远程连接Docker的示例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Linux下保存Docker镜像文件至本地及启动实现方式

    Linux下保存Docker镜像文件至本地及启动实现方式

    文章介绍了如何在Linux环境下将Docker镜像保存到本地,并将其导入到其他Docker主机,主要内容包括保存镜像为`.tar`文件、验证保存的文件、以及如何在另一台Docker主机上导入该镜像
    2025-12-12
  • 使用Docker安装向量数据库milvus并且安装图形化界面的方法

    使用Docker安装向量数据库milvus并且安装图形化界面的方法

    文章介绍了如何在Windows上使用Docker安装并配置Milvus向量数据库,包括启用WSL2、安装Ubuntu、配置Docker仓库、安装Milvus服务端和用户图形界面Attu,并提供了一个修改后的Dockerfile以提高Attu的安装速度,感兴趣的朋友一起看看吧
    2025-02-02
  • Docker镜像pull失败两种解决办法小结

    Docker镜像pull失败两种解决办法小结

    有时候我们在拉取Docker镜像的过程中会遇到一些问题,这篇文章主要介绍了Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • 安装Milvus向量数据库全过程

    安装Milvus向量数据库全过程

    这篇文章主要介绍了安装Milvus向量数据库全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-08-08
  • docker网络及部署集群和打包镜像问题

    docker网络及部署集群和打包镜像问题

    这篇文章主要介绍了docker网络及部署集群和打包镜像问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 迁移Docker中MySQL容器的全过程

    迁移Docker中MySQL容器的全过程

    在这篇文章中,我们将介绍如何将在 Docker 中运行的 MySQL 容器从一台机器(我们称之为A机器)迁移到另一台机器(我们称之为B机器),这个过程主要包括五个步骤:提交容器为镜像,保存镜像为 tar 包等,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12
  • Docker开启远程安全访问的流程步骤

    Docker开启远程安全访问的流程步骤

    这篇文章主要介绍如何开启docker的远程访问并通过idea进行远程操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作有一定的帮助,需要的朋友们下面随着小编来一起学习吧
    2023-12-12
  • Docker使用、容器迁移的方案详解

    Docker使用、容器迁移的方案详解

    Docker 是一个开源的容器化平台,用于打包、部署和运行应用程序及其依赖环境,本文给大家介绍Docker使用、容器迁移的方案,感兴趣的朋友一起看看吧
    2025-04-04

最新评论