首页 > 其他分享 >Docker部署及项目的生命周期

Docker部署及项目的生命周期

时间:2024-10-25 11:24:47浏览次数:1  
标签:容器 生命周期 部署 sudo -- 镜像 Docker docker

目标

了解传统项目生命周期的阶段特点
了解新型项目生命周期的特点
了解部署方案的一般流程

1. 项目生命周期

​ 世间万物皆有其生命,软件项目也是如此。随着互联网的发展,软件项目的生命周期也发生了很大的变化,为了更好的让大家理解软件项目,项目生命周期有狭义(具体)、广义(缘起/缘灭)之分,我们一般所说的项目生命周期主要指的是狭义的项目生命周期,我们以传统的软件项目为例进行介绍。

传统项目生命周期

对于传统软件项目来说,它主要包含以下五个阶段:
调研阶段-->设计阶段-->开发阶段-->测试阶段-->运营阶段

  1. 调研阶段
    目的:居安思危
    人员:相关人员,侧重于产品经理
    节点:多角度思路/方案,最后领导拍板
  2. 设计阶段
    目的:市案可视化
    人员;产品团队主导,开发、测试、逗维参与
    节点:产品需求文档、项目里程表
  3. 开发阶段
    目的:方案运行
    人员:开发团队为主,运维团队参与
    节点:阶段项目正常运行
  4. 测试阶段
    目的:保证项目功能完善
    人员:测试团队为主,运维、开发参与
    节点:项目功能符合要求
  5. 运营阶段
    目的:项目部署+运行维护
    人员:运营团队为主、开发/产品团队参与
    节点:项目终止、功能迭代等

Docker

一,安装准备

能上外网

yum -y install gcc
yum -y install gcc c++

卸载旧版本

	yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

如果 yum 报告未安装任何这些软件包,这表示情况正常。

Linux系统安装Docker:

# 更新包列表
sudo apt-get update

# 安装必要的依赖
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加Docker的APT仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新包列表
sudo apt-get update

# 安装Docker
sudo apt-get install -y docker-ce

# 验证Docker是否安装成功
sudo docker --version

Linux安装Docker Compose:

如果需要多容器管理则需要安装

# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证Docker Compose是否安装成功
docker-compose --version

Docker安装(yum方式)

安装依赖包

	yum install -y yum-utils device-mapper-persistent-data lvm2

设置stable镜像仓库

	yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
或
	yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引

yum makecache fast

安装docker
安装指定版本:

yum list docker-ce.x86_64  --showduplicates | sort -r

从高到低列出Docker-ce的版本

该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。

yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
例如:指定版本(docker-ce-18.09.9)进行安装:
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
安装最新版本:
	yum -y install docker-ce

启动docker
执行以下命令启动docker:
	systemctl start docker

设置开机自启动
	systemctl enable docker

测试docker
	查看docker版本
	docker version

	查看docker日志
	cat /var/log/docker

目前 Docker 只能支持 64 位系统。
 
systemctl stop firewalld.service
setenforce 0
 
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
--------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------------------
 
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
 
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.io
 
systemctl start docker.service
systemctl enable docker.service 
--------------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
--------------------------------------------------------------------------------------------
 
#查看 docker 版本信息
docker version
 
#docker 信息查看
docker info 

镜像加速下载

浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置
 
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

Docker安装(npm方式)

Docker安装:
npm i docker -g

Docker-compose安装:
npm i docker-compose -g

把Flask项目部署成Web服务

将 Flask 项目通过 Docker 部署成 Web 服务是一个很好的实践,可以让应用程序更加便携和易于维护。下面是完整的步骤,包括创建 Dockerfile 和相关的配置文件,以及如何构建和运行容器。

1. 准备项目文件 (app.py 等)

确保你的 Flask 项目已经准备就绪,并且有一个 app.py 文件来启动 Flask 应用。

2. 生成 requirements.txt

列出你的项目依赖,并生成 requirements.txt 文件:

pip freeze > requirements.txt

3. 创建映射目录

创建一个目录来存放你的 Dockerfile 和项目文件:

mkdir flask_app
cd flask_app
cp -r /path/to/your/app/* .

4. 创建 Dockerfile

在项目根目录下创建 Dockerfile 文件,并添加以下内容:

# 使用官方的 Python 运行时作为父镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 将当前目录的内容复制到容器中
COPY . /app

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露端口
EXPOSE 8000

# 运行 Flask 应用
CMD ["python", "app.py"]

Dockerfile配置

以下是一个.net core项目的Dockerfile配置内容,新建一个Dockerfile文件,编辑内容如下:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.1 #项目运行时需引用镜像 可从dockerhub搜索
EXPOSE 9401 #指定项目运行端口
WORKDIR /app #指定容器内项目运行目录
COPY . /app #将当前目录下的文件copy至容器内项目运行目录
ENTRYPOINT ["dotnet", "helloworld.dll"] #项目启动命令

5. 创建镜像

进入 Dockerfile 文件所在的目录,并构建镜像:

docker build -t flask_app:v1.0 .

构建Docker镜像:

在项目根目录运行以下命令构建Docker镜像:

# 构建镜像
docker build -t 镜像名:tag .

运行Docker容器:

  1. 单容器运行

    直接运行构建好的Docker镜像:

    docker run -d -p 8000:8000 镜像名:tag
    
  2. 使用Docker Compose

    如果项目使用Docker Compose,创建一个 docker-compose.yml 文件,内容如下:

    version: '3.8'
    
    services:
      app:
        image: your-image-name:tag
        ports:
          - "8000:8000"
        environment:
          - ENV_VAR1=value1
          - ENV_VAR2=value2
        volumes:
          - ./data:/app/data
    
    

    然后运行以下命令启动服务:

    docker-compose up -d
    

部署到服务器

0. 打包文件

# 查看块设备信息,确认 USB 设备的设备名
lsblk

# 将 USB 设备挂载到 /mnt/usb 目录,以便访问其内容
sudo mount /dev/sdg1 /mnt/usb

# 进入 USB 设备的挂载点
cd /mnt/usb

# 列出当前目录下的所有文件和隐藏文件
ll -a

# 将 web 目录递归复制到 /home/bai/web1.3 目录
sudo cp -r web /home/bai/web1.3

# 进入新复制的 web1.3 目录
cd /home/bai/web1.3

# 列出当前目录下的所有文件
ls

# 构建新的 Docker 镜像,标签为 dify-web-new:1.2
sudo docker build -t dify-web-new:1.2 .

# 列出所有 Docker 镜像,并过滤出包含 "dify" 的镜像
docker images | grep dify

# 将构建好的镜像导出为 tar 文件,并保存到 USB 设备
sudo docker save -o /mnt/usb/dify-web.tar dify-web-new:1.2

# 列出 USB 设备挂载点下的所有文件,包括隐藏文件
ls -a /mnt/usb

# 删除 USB 设备上的旧镜像文件
sudo rm -f /mnt/usb/dify-web-new.tar

# 卸载 USB 设备
sudo umount /mnt/usb

# 进入 Docker 配置文件所在的目录
cd /home/bai/dify/docker

# 列出当前目录下的所有文件
ls

# 使用 nano 编辑器打开 docker-compose.yaml 文件
nano docker-compose.yaml

# 跳到 230-240 行,修改镜像文件名
# (在 nano 中,可以使用 Ctrl+_ 输入行号跳转,例如 Ctrl+_ 230)

# 保存并退出 nano 编辑器(按 Ctrl+X,然后按 Y 保存,最后按 Enter)

# 停止当前运行的 Docker Compose 服务
sudo docker-compose down

# 重新启动 Docker Compose 服务
sudo docker-compose up -d

1.使用 scp 拷贝

bash深色版本

scp /mnt/usb/dify-web.tar user@target-server:/path/to/destination
  • user 是目标服务器的用户名。
  • target-server 是目标服务器的 IP 地址或主机名。
  • /path/to/destination 是目标服务器上存放 dify-web.tar 文件的目录。

2. 加载镜像到目标服务器

在目标服务器上,使用 docker load 命令将压缩包加载为 Docker 镜像。

bash深色版本

sudo docker load -i /path/to/destination/dify-web.tar

3. 验证镜像是否加载成功

使用 docker images 命令查看已加载的镜像。

bash深色版本

docker images | grep dify

4. 运行镜像

使用 docker run 命令启动一个新的容器。

bash深色版本

sudo docker run -p 3000:3000 -it --rm dify-web-new:1.2

5. 使用 Docker Compose 运行(如果适用)

如果您使用 docker-compose 来管理多个服务,可以将 docker-compose.yaml 文件也拷贝到目标服务器,然后启动服务。

拷贝 docker-compose.yaml 文件

bash深色版本

scp /home/bai/dify/docker/docker-compose.yaml user@target-server:/path/to/destination

进入目标目录并启动 Docker Compose

bash深色版本

cd /path/to/destination
sudo docker-compose up -d

总结

  1. 拷贝镜像文件

    bash深色版本

    scp /mnt/usb/dify-web.tar user@target-server:/path/to/destination
    
  2. 加载镜像

    bash深色版本

    sudo docker load -i /path/to/destination/dify-web.tar
    
  3. 验证镜像

    bash深色版本

    docker images | grep dify
    
  4. 运行镜像

    bash深色版本

    sudo docker run -p 3000:3000 -it --rm dify-web-new:1.2
    
  5. 使用 Docker Compose(如果适用)

    bash深色版本

    scp /home/bai/dify/docker/docker-compose.yaml user@target-server:/path/to/destination
    cd /path/to/destination
    sudo docker-compose up -d
    
  6. 1将镜像推送到Docker Hub(可选)
    如果你希望将镜像推送到Docker Hub以便在其他服务器上拉取

# 登录Docker Hub
docker login

# 标记镜像
docker tag your-image-name:tag your-dockerhub-username/your-image-name:tag

# 推送镜像
docker push your-dockerhub-username/your-image-name:tag

  1. 2 在目标服务器上拉取并运行镜像
    在目标服务器上运行以下命令:Docker镜像打包及容器运行
# 拉取镜像
docker pull your-dockerhub-username/your-image-name:tag

# 运行容器
docker run -d -p 8000:8000 your-dockerhub-username/your-image-name:tag

编写了一个sh文件

#!/bin/bash
nowtime=$(date "+%Y%m%d%H%M%S") #此处以时间为版本,用于留存镜像版本,否则会覆盖
docker build -t helloworld:$nowtime . #镜像打包命令
docker stop helloworld_con #停止运行中的容器
docker rm helloworld_con #移除容器
docker run \ #运行容器
--name helloworld_con -d \ #容器名称
--link mysql \ #容器间通信,此处连接mysql数据库容器
--network test_default \ #指定容器网络
--restart=always \ #自动启动
-p 9401:9401 \ #映射端口 本地端口:容器内端口
helloworld:$nowtime #指定镜像及其版本

直接运行sh文件

Docker镜像

  1. 是什么
  • Docker Image本质上是一个只读文件, 这个文件包含了文件系统、 源码、库文件、依赖、工具等一些运行application所必须的文件
  • 可以把Docker Image理解成一个模板, 可以通过这个模板实例化出来很多容器
  • Image里面是一层层文件系统Union FS(联合文件系统),可以将几层目录挂载到一起,形成一个虚拟文件系统
  1. Docker镜像加载原理

  2. bootfs
    bootfs主要包含bootloader和kernel,Linux刚启动时会加载bootfs
    在Docker镜像的最底层就是bootfs,这一层与Linux是一样的,包含bootloader和kernel
    当boot加载完成之后,整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时OS也会卸载bootfs

  3. rootfs
    rootfs在bootfs之上,包含的就是典型的Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
    rootfs就是各种不同的OS发行版
    如Ubuntu,CentOS

6. 创建容器

创建并运行容器:

docker run -dit --restart=always -p 5000:5000 --name flask_container flask_app:v1.0

如果你的应用程序监听的端口不是默认的 5000,你需要将 -p 5000:5000 替换为正确的端口映射,例如:

docker run -dit --restart=always -p 5012:5012 --name flask_container flask_app:v1.0

7. 进入容器

如果需要进入容器内部进行调试或检查:

docker exec -it flask_container /bin/bash

查看镜像和容器状态

创建镜像之后,可以执行以下命令查看镜像文件:

docker images

创建容器之后,可以执行以下命令查看容器状态:

docker ps -a

使用 IP 地址访问

一旦容器运行起来,你就可以通过容器绑定的主机 IP 地址和映射的端口来访问 Flask 应用。例如,如果主机 IP 地址是 192.168.1.100,并且你将容器端口 5000 映射到了主机端口 5000,那么可以通过 http://192.168.1.100:5000 访问你的 Flask 应用。

总结

通过上述步骤,你可以将 Flask 项目打包成 Docker 镜像,并运行在一个容器中。这种方式不仅便于部署,还可以确保应用在任何环境中都能一致地运行。

Docker使用

创建镜像之后就可以执行下面的命令docker images查看镜像文件然后创建容器之后,可以执行docker ps-a可以查看创建好的容器可以用镜像打开,也可以用IP打开。

可以用容器名去访问也可以用1P号访问

Docker:
一,创建容器docker run
二,查看容器dockerps/docker ps -s

三,查看日志dockerlogs-f容器名或者容器的编号。

四,删除容器dockerrm 容器名字或容器编号

​ 创建容器的时候,端口号和映射关系要设计

好。所以在创建容器之前的时候要想好跟什么参数。

五,查看容器镜像dockerinspect容器名或者是编号

Docker示意图

用Docker下载MySQL5.7的镜像

下载 MySQL5.7的 docker 镜像

docker pull mysql:5.7

使用如下命令启动MySQL服务

docker run p 3306:3306-name mysql
-v /mydata/mysql/log:/var/log/mysql
-v/mydata/mysql/data:/var/lib/mysql\-v/mydata/mysql/conf:/etc/mysql \
-e MYSQL ROOT PASSWORD-root
networkhuicenetwork
-d mysql:5.7

参数说明

  • -p3306:3306:将容器的 3306端口映射到主机的 3306端口
  • -v/mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
  • -v/mydata/mysqllog:/var/log/mysql:将日志文件夹挂载到主机
  • -v/mydata/mysqldata:/var/lib/mysql:将数据文件夹挂载到主机
  • -e MYSQL ROOT PASSWORD=root:初始化 root用户的密码
进入运行 MySQL的 docker 容器
docker exec -it mysql /bin/bash

使用mysql命令登录到MySQL客户端
mysql -uroot proot-default-character-set=utf8

创建一个reader:123456账号并修改权限,使得任何IP都能访问

grant all privileges on *,* to 'reader’G'%' identified by ’123456'

创建项目数据库:
create database fecmall character set utf8;

标签:容器,生命周期,部署,sudo,--,镜像,Docker,docker
From: https://www.cnblogs.com/chengzixi/p/18502123

相关文章

  • iis部署tms web core
    iis部署tmswebcore首先准备好你要发布的网站文件夹 1)iis设置网站2)1、打开“IIS信息服务管理器”——》选择你发布的网站——》选择功能视图中的“身份验证”——》右键匿名身份验证,选择“编辑”,选择“特定用户IUSR”;2、右键要发布的网站文件夹,选择“安全”——》“编辑......
  • 在虚拟机里部署 Dify 模型
    在虚拟机里部署Dify模型的一般步骤:1. 准备虚拟机环境:选择操作系统:常见的选择有Ubuntu、CentOS等Linux发行版。确保虚拟机的配置满足Dify的最低系统要求,一般建议CPU核心数不少于2个,内存不少于4GB。安装必要软件:在虚拟机中安装Docker(用于容器化部署)、Git(用于拉......
  • 大华乐橙设备私有平台EasyCVR私有化部署视频平台监控摄像机安装注意事项与具体步骤
    在当今数字化时代,视频监控已成为保障安全的重要手段。监控摄像机的安装和配置是一个涉及多个步骤的细致过程。本文将探讨在安装过程中需要注意的事项以及具体的安装步骤,确保用户能够高效、安全地部署监控系统。首先,确保监控摄像机的选址合理,避免监控盲区,并考虑到光线变化对图像质......
  • Docker和虚拟机在资源利用上有什么区别
    Docker和虚拟机在资源利用上的主要区别包括:1.启动速度不同;2.性能开销不同;3.硬件隔离水平不同;4.资源分配策略不同;5.存储管理不同;6.网络管理不同;7.系统占用空间不同。其中,Docker以其轻量级和高效的特点被广大开发者喜欢,而虚拟机则提供了更强大的隔离性和完整的操作系统环境。1.启......
  • 基于SpringBoot+Vue+uniapp的乡村政务办公系统的详细设计和实现(源码+lw+部署文档+讲
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • ClickHouse的下载与安装部署
    ClickHouse安装一、了解ClickHouseClickHouse是一个关系型数据库,说到关系型数据库,我们之前也学习到一个数据库Mysql,但是两者之间是有着很大区别的。MySQL数据库一般存储较少的数据(100万以内),而今天学习的ClickHouse存储的数据就相当之大,可以存储亿条数据。再者说两者的工作原理......
  • centos7离线安装nvidia-docker2(附安装包)
    说实话全网没有找到一个安装包,如果你刚好从我这里找到,给我留言我就能看到发给你。或者你按照我的教程使用yum离线下载也可以在自己的docker中拉取一个centos:7镜像,创建一个容器在容器中安装docker-ce#设置docker镜像源yum-config-manager\--add-repo\https://mirro......
  • 使用 docker 的方式部署 NFS server 提供文件共享能力
    目录构建NFSserver镜像准备Dockerfile准备.bashrc文件准备nfsd.sh构建镜像特权模式dockerdocker-composedockerrun的方式环境变量方式配置文件挂载方式docker-compose的方式本地挂载NFS题外话什么是Capabilities常见的Capabilities列表获取Capabilities列表方法一......
  • docker 镜像中的uid
    docker镜像中的uid在Docker镜像中,UID(用户标识符)的具体数值并不是固定的,它取决于镜像的构建方式和构建时指定的用户配置。以下是对Docker镜像中UID的详细解释:UID的分配基础镜像:当从一个基础镜像(如Ubuntu、CentOS等)构建新的Docker镜像时,该基础镜像中已经存在的用户和组会被......
  • 基于surging的木舟平台如何上传模块热部署
    一、概述      通过3个月的赶工,基本上快完成1.0版本的研发,将在下个月发布社区1.0版本。      木舟(Kayak)是什么?      木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的,平台包含了微服务和物联网平台。支持异步和响应式编程开发,功......