Ubuntu系统下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 个核心参数:
-d:后台运行容器,不占用终端,比如docker run -d nginx:alpine--name:给容器起个名字,方便管理,比如docker run -d --name my-nginx nginx:alpine-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 run | docker run [参数] 镜像名 | 创建并启动容器 |
| 查看状态 | docker ps | docker ps | 查看正在运行的容器 |
docker ps -a | docker ps -a | 查看所有容器(包括已停止的) | |
| 运行中操作 | docker exec | docker exec -it 容器名 /bin/bash | 进入运行中的容器,调试命令 |
docker logs | docker logs 容器名 | 查看容器日志 | |
| 停止重启 | docker stop | docker stop 容器名 | 优雅停止容器 |
docker start | docker start 容器名 | 启动已停止的容器 | |
docker restart | docker restart 容器名 | 重启容器 | |
| 删除清理 | docker rm | docker rm 容器名 | 删除已停止的容器 |
docker rmi | docker rmi 镜像名 | 删除无用镜像 |
我熟练掌握 Docker 容器的生命周期管理,能通过命令实现容器的创建、启动、停止、重启、删除,也能通过 docker exec 进入容器调试,查看日志排查问题”。
五、将项目打包镜像并发布运
- 准备项目文件:你的网页代码
index.html - 编写
Dockerfile:定义镜像的构建规则 - 构建镜像:
docker build -t my-project:v1 . - 运行容器:
docker run -d -p 8080:80 my-project:v1 - 发布运行:可以把镜像推送到私有仓库,在其他服务器上拉取运行,实现一次构建、随处运行。
我了解 Docker 项目打包流程,能将静态项目通过 Dockerfile 构建成镜像,实现应用的容器化部署,解决了开发环境和生产环境不一致的问题,也方便了项目的持续集成与交付”。
六、高频问题
Docker 镜像和容器的区别?
- 镜像:只读模板,用来创建容器,多个容器可以共享同一个镜像
- 容器:镜像运行起来的实例,可写,每个容器相互隔离
Docker 容器和虚拟机的区别?
- 虚拟机:模拟硬件,运行完整操作系统,占用资源多、启动慢
- Docker 容器:共享主机内核,只打包应用和依赖,轻量、秒级启动,隔离性稍弱但足够满足业务需求
Docker 端口映射的原理?
Docker 会在主机上监听指定端口,把请求转发到容器的对应端口,外部通过主机端口访问容器服务
到此这篇关于Ubuntu系统下Docker镜像构建与容器管理的完整指南的文章就介绍到这了,更多相关Docker镜像构建与容器管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
使用Docker安装向量数据库milvus并且安装图形化界面的方法
文章介绍了如何在Windows上使用Docker安装并配置Milvus向量数据库,包括启用WSL2、安装Ubuntu、配置Docker仓库、安装Milvus服务端和用户图形界面Attu,并提供了一个修改后的Dockerfile以提高Attu的安装速度,感兴趣的朋友一起看看吧2025-02-02


最新评论