docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker镜像构建与容器管理

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

作者:炘爚

这篇文章主要为大家详细介绍了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 镜像

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. 容器是什么?和镜像的关系?

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 的核心优势)

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

1. Nginx 部署(Web 服务器)

# 拉取镜像
docker pull nginx:alpine

# 启动容器,端口映射 8080:80
docker run -d -p 8080:80 --name my-nginx nginx:alpine

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

四、容器生命周期管理

阶段命令格式作用
创建启动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 会在主机上监听指定端口,把请求转发到容器的对应端口,外部通过主机端口访问容器服务

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

您可能感兴趣的文章:
阅读全文