手把手教你部署前端项目CI/CD 第一篇 Docker 篇
1 Docker
Docker 是一个开源的应用容器引擎。Docker 可以将应用程序及其依赖项打包到一个可移植的容器中,这个容器包含了应用程序的代码、运行环境、依赖库、配置文件等必须的资源。通过 Docker 可以实现快速部署并且隔离环境。无论部署的环境如何,Docker 能保证容器中的应用程序都会运行在同一种环境下。
手把手教你部署前端项目CI/CD 第二篇 Jenkins freestyle 篇
手把手教你部署前端项目CI/CD 第三篇 Jenkins pipeline 篇
1.1 Docker 核心概念
Docker 的核心概念包括镜像(Image)、容器(Container)和仓库(Repository):
- 镜像:可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像类似于虚拟机中的快照,用于启动容器或创建新的容器。
- 容器:是镜像的运行实例,每个容器都是独立运行的,并且相互之间不会有任何接口。容器内的应用程序直接运行在宿主内核中,没有自己的内核,也没有进行硬件虚拟,因此比传统虚拟机更轻量级、占用资源更小、启动速度更快。
- 仓库:提供一个注册服务器,用于存储多个仓库,而仓库是用来存储镜像的。用户可以将自己创建的镜像上传到仓库中,并在需要时从仓库下载。
1.2 Docker 优点
- 简化开发和部署流程:
- Docker 使得应用程序的开发和部署更加简单和高效。开发人员可以将所有应用程序、库和依赖项打包到一个完整的容器中,确保它可以在任何环境中稳定运行。
- Docker 容器提供了一致的运行环境,避免了“在我的机器上可正常工作,其他机器不能正常工作”的问题。
- 提高资源利用率:
- Docker 容器轻量级且占用资源少,可以在一台物理机上运行多个容器实例,从而大大提高资源利用率。
- Docker 容器可以迅速启动和停止,降低了系统开销。
- 增强安全性和隔离性:
- Docker 容器提供了应用级别的隔离,每个容器都是独立运行的,相互之间不会有任何接口,这有助于提升应用的安全性。
- Docker 容器默认提供超强的隔离性,即使某个应用出现问题,也只是单个容器的问题,不会影响到整台机器。
- 支持持续集成和持续部署(CI/CD):
- Docker 容器易于版本管理、复制、分享和修改,使得持续集成和持续部署变得更加容易和高效。
- 开发人员可以轻松地构建、测试和部署应用程序,而无需担心环境不一致的问题。
- 提高可移植性和兼容性:
- Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户轻松地将一个应用程序从一个平台迁移到另一个平台。
2 Docker 安装
2.1 卸载之前安装过的 Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin
# 删除镜像、容器、配置文件等内容
rm -rf /var/lib/docker
2.2 Docker 安装
- yum 包更新
yum update
- 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置yum仓库并更新yum缓存
# 官方源(慢,不推荐)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 清华大学源
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 更新yum缓存
yum makecache fast
# 验证仓库是否添加成功(三选一)
# 查看仓库文件 输出 docker-ce.repo 表示安装成功
ls /etc/yum.repos.d/ | grep docker-ce
# 查看已配置仓库及其状态 输出 docker-ce 仓库相关信息 表示安装成功
yum repolist | grep docker-ce
# 查看所有仓库 输出 docker-ce.repo表 示安装成功
ls /etc/yum.repos.d/
- 安装docker,Y到底
# docker-ce Docker社区版
# docker-ce-cli Docker命令行界面(CLI)
# containerd.io Docker插件,直接调用 Docker Compose
# docker-compose-plugin Docker插件,直接调用 Docker Compose
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 查看docker版本
# 输出版本则验证成功
docker version
# 输出docker相关的安装包
rpm -qa |grep docker
# docker-buildx-plugin-0.14.1-1.el7.x86_64
# docker-compose-plugin-2.27.1-1.el7.x86_64
# docker-ce-cli-26.1.4-1.el7.x86_64
# docker-ce-26.1.4-1.el7.x86_64
# docker-ce-rootless-extras-26.1.4-1.el7.x86_64
2.3 切换 Docker 镜像源
- 创建 Docker 镜像源配置文件目录
# 创建配置文件夹
mkdir /etc/docker
# 编辑配置文件
vim /etc/docker/daemon.json
# 以下json格式直接黏贴进daemon.json文件。
# 数组中为镜像源列表(以下镜像源在文档书写时可用,如果后期不可用需要另外找新的)。
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://82m9ar63.mirror.aliyuncs.com"
]
}
# 重新加载配置项文件
systemctl daemon-reload
- 验证镜像源是否有效
# 启动docker
systemctl start docker
# 拉取测试镜像
docker pull hello-world
# 查看镜像是有刚下载的hello-world,验证通过则镜像源有效
docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
# hello-world latest d2c94e258dcb 14 months ago 13.3kB
3 Docker 使用
3.1 容器操作
创建容器
# 创建容器
# OPTIONS:这是可选的,您可以在这里指定容器的名称(--name)、分配的资源限制(如内存和CPU)、网络设置等。
# IMAGE:指定要基于哪个镜像来创建容器。
# COMMAND 和 ARG...:这些是可选的,用于指定容器启动时要执行的命令和传递给该命令的参数。如果不指定,则默认执行镜像中定义的默认命令。
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
启动和停止容器
# 启动一个或多个已经被停止的容器。
docker start <容器名或ID>
# 停止一个运行中的容器。
docker stop <容器名或ID>
# 重启容器。
docker restart <容器名或ID>
查看容器状态
# 查看当前正在运行的容器。
docker ps
# 查看所有容器(包括停止的)。
docker ps -a
# 查看容器的详细信息。
docker inspect <容器名或ID>
进入容器
# 进入正在运行的容器并以命令行进行交互。推荐使用docker exec命令,因为使用docker attach命令时,如果从容器中退出(使用exit命令),会导致容器停止。
docker exec -it <容器名或ID> /bin/bash
删除容器
# 删除已经停止的容器。
docker rm <容器ID>
# 强制删除正在运行的容器。
docker rm -f <容器ID>
查看容器日志
# 查看容器的实时日志。
docker logs -f <容器名或ID>
查看容器IP
# 查看容器的IP地址。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名或ID>
3.2 镜像操作
拉取和推送镜像
# 从远程仓库下载镜像到本地。
docker pull <镜像名>:<标签>
# 将本地的镜像推送到远程仓库。
docker push <镜像名>:<标签>
构建镜像
# 基于Dockerfile构建镜像。
docker build -t <镜像名>:<标签> <Dockerfile路径>:
查看本地镜像
# 列出本地所有镜像。
docker images
# 查看镜像的详细信息。
docker inspect <镜像名>
删除镜像
# 删除单个镜像。
docker rmi -f <镜像ID>
# 删除所有镜像(请谨慎使用)。
docker rmi -f $(docker images -qa)
3.3 网络操作
查看网络
# 列出所有网络。
docker network ls
创建和删除网络
# 创建自定义网络。
docker network create <网络名>
# 删除网络。
docker network rm <网络名>
3.4 数据卷操作
创建和删除数据卷
# 创建数据卷。
docker volume create <卷名>
# 删除数据卷。
docker volume rm <卷名>
3.5 日志和事件操作
查看Docker事件
# 查看Docker引擎事件。
docker events
3.6 其他常用命令
启动Docker服务
systemctl start docker(适用于基于systemd的系统)。
停止Docker服务
systemctl stop docker(适用于基于systemd的系统)。
重启Docker服务
systemctl restart docker(适用于基于systemd的系统)。
查看Docker状态
systemctl status docker(适用于基于systemd的系统)。
设置Docker开机启动
systemctl enable docker(适用于基于systemd的系统)。
查看Docker概要信息
docker info。
查看Docker总体帮助文档
docker --help。
查看Docker命令帮助文档
docker 具体命令 --help。
4 docker-compose 安装
运行一个由多个容器组成的服务时。它允许你使用一个单独的文件(通常称为 docker-compose.yml)来配置应用程序的服务,然后使用该文件快速启动整个应用的所有服务。
直接安装,可以尝试,但是基本会失败
# github 下载,太慢了基本成功不了
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 三方镜像网站,我测试的时候已挂
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
去docker-compose官网https://github.com/docker/compose/releases
下载最新版或指定版本,找到文件名 docker-compose-linux-x86_64,下载到本地后重命名为 docker-compose,上传至服务器路径下 /usr/local/bin/
,最终文件路径/usr/local/bin/docker-compose
# 将docker-compose设置为可执行文件
sudo chmod +x /usr/local/bin/docker-compose
# 查看docker-compose版本 输出版本号验证下载成功
# Docker Compose version v2.28.1
docker-compose -v