专业网站设计开发公司,视频网站开发源码,html网站源码下载,wordpress根目录403一、容器部署的发展 今天我们来说说容器部署。我们知道容器部署的发展大致分三个阶段#xff0c;下面来介绍一下不同阶段的部署方式的优缺点 物理机部署 优点是可以提供更高的性能、资源控制#xff0c;也可以提供更好的数据隔离和安全性#xff0c;因为不同的应用程序运行在… 一、容器部署的发展 今天我们来说说容器部署。我们知道容器部署的发展大致分三个阶段下面来介绍一下不同阶段的部署方式的优缺点 物理机部署 优点是可以提供更高的性能、资源控制也可以提供更好的数据隔离和安全性因为不同的应用程序运行在独立的物理服务器上拥有彼此之间的资源和数据都相互隔离等优点。缺点是采用物理机部署这种方式通常不能充分的利用好硬件资源如果应用程序的负载较轻会浪费一定的资源。但是如果我们要将多个应用进程、数据库和缓存进程等都部署在同一台机器上这样虽然达到了高效利用物理机的资源的目的但是也会发生一个很重要的问题就是进程之间发生资源抢占的问题最终导致其他进程无法提供正常服务。并且应用程序与硬件设备是绑定的所以我们扩展起来就不太容易。 虚拟机部署 优点就是通过虚拟化技术将物理机分割成多台虚拟机每个虚拟机在物理机上预先分配了一定的计算机资源比如CPU、内存、磁盘空间等多个虚拟机可以在同一台物理服务器上运行共享硬件资源提高了资源利用率。虚拟机部署也可以快速创建、复制和迁移虚拟机实例为我们的扩展提供了便捷等等。缺点就是如果在大规模集群部署的情况下虚拟机技术可能导致软件的版本和配置文件有碎片化问题。不同虚拟机中的软件版本和配置文件可能不同这或许会使问题排查变得困难。 容器化部署 为了解决以上部署方式的痛点容器技术就应运而生了而Docker就是一种常见的容器化平台。 docker与虚拟机对比图 二、Docker 1. Docker简介 1.什么是Docker Docker 是一个开源的应用容器引擎可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中然后发布到任何流行的 Linux 机器上。 2.Docker部署的优势 通过使用Docker等容器技术可以将应用程序及其依赖项打包成轻量级的容器这个容器中包含了应用程序所需的所有运行环境和配置。这样一来无论在测试还是生产环境中都可以保证应用程序运行的一致性并且易于部署、扩展和管理。容器化技术使得应用程序在不同环境之间的迁移更加简单并且可以高效地利用资源。 2. Docker核心组件 docker基础架构图 从上图中我们可以看出Docker 在运行时分为 Docker 引擎和客户端工具。我们使用docker命令时就是在使用客户端工具与Docker引擎进行交互。客户端工具 我们可以从官网下载安装我们主要来说上图中的 Images(镜像)、Containers(容器)、 Registry(仓库) 这三个核心组件。 镜像 可以把镜像文件理解成一个进程运行所需软件的集装箱在部署时我们每台机器都会拉取相同版本的镜像文件进行安装生成对应的容器。所有机器使用的镜像文件全部相同容器的软件版本也一致。即使我们修改了容器的软件版本但要是销毁容器软件的改动也会消失。如果需要再次部署我们只需要使用现有的镜像文件即可生成的容器也与之前保持一致。即使需要升级软件版本只需要修改镜像文件这样集群内的所有机器都会重新拉取更新后的镜像实现软件的统一升级解决了软件版本混乱的问题。镜像相关常用命令 docker search 镜像名称 # 从网络上查找需要的镜像
docker pull 镜像名称 # 从Docker的仓库下载镜像到本地镜像名称格式为名称:版本号。例如docker pull ubuntu:latest
docker images # 查看本地镜像 -a: 查看本地所有镜像 -q: 查看本地镜像的id
docker rmi [-f] 镜像id[镜像名称] # 删除镜像 -f表示强制删除
docker rmi -f $(docker images -qa) # 删除所有镜像 一次性删除且删除后无法恢复
docker build -t your-image-name . # 根据Dockerfile创建一个镜像
docker tag your-image-name your-registry/your-repository:tag # 给镜像添加一个标签
... 容器 容器是基于 Docker 镜像创建的可运行实例。容器具有轻量级、独立性、可移植、灵活性的重要特性。每个容器都是一个独立的运行环境并且是相互隔离的且都拥有自己的文件系统、网络空间和进程空间避免出现应用程序间的干扰容器是镜像运行时的实体容器可以被创建、启动、停止、删除、暂停等。容器相关常用命令 docker ps # 查看正在执行的容器
docker ps # 查看所有正在运行的容器 -a: 包括运行中和已停止的
docker run 参数
#参数说明
#-i保持容器运行。通过和-t同时使用。加入-it这两个参数以后容器创建后会自动进入容器中退出容器后容器会自动关闭。
#-t为容器重新分配一个伪输入终端通常和-i同时使用。
#-d以守护后台模式运行容器。创建一个容器在后台运行需要使用docker exec 进入容器。
#-it创建的容器一般称为交互式容器。
#-id创建的容器一般称为守护式容器、
#--name威创建的容器命名。
#-p映射端口 外部端口:容器内部暴露的端口
docker exec -it 容器id[容器名称] /bin/bash # 进入容器
docker rm 容器id[容器名称] # 删除容器
docker kill 容器id[容器名称] # 强制停止容器
... 仓库 Docker仓库主要是用来存储和共享Docker镜像的地方。我们可以从仓库中获取镜像并将本地构建的镜像推送到仓库中进行存储。仓库相关常用命令 docker login you-registry.com # 登录docker仓库
docker logout you-registry.com # 从Docker仓库注销 3. Docker部署案例 在执行以下命令前请确保已经安装Docker环境了 下边三个案例分别采用替换dist、采用Dockerfile方式、采用Dockerfiledocker-compose的方式进行部署并运行项目您可以自行选择自己想要部署的项目进行操作。 1.部署nginx 控制台输入如下命令docker run 通过nginx:alpine镜像创建一个新的容器并运行容器名称为nginx_demo容器设置成自动重启映射容器80、443端口到主机80、443绑定nginx相关配置等卷挂载路径。 docker run -d \
--name nginx_demo --restart always \
-p 80:80 \
-e TZAsia/Shanghai \
-v /Users/xxx/nginx/home/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/xxx/nginx/home/nginx/logs:/var/log/nginx \
-v /Users/xxx/nginx/home/nginx/html:/usr/share/nginx/html \
nginx:alpine nginx目录 7fdd2f5f7e0874e619914632f819b0dfa5aa594fe3d2056bbd22b99da3e3d1be 就是我们的容器Id 容器运行后修改nginx.conf配置文件配置文件如下 user nginx;
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;sendfile on;keepalive_timeout 65;server{listen 80;server_name host.docker.internal;index index.html;root /usr/share/nginx/html/dist; #dist上传的路径# 避免访问出现 404 错误location / {try_files $uri $uri/ router;index index.html;}location router {rewrite ^.*$ /index.html last;}}
} 构建打包-部署 在前端项目中安装依赖执行打包命令生成dist文件夹将打包好的dist文件夹拷贝到nginx目录下 npm install
npm run build
cp -r dist/* /Users/xxxx/home/nginx/html 运行结果 执行完以上操作我们可以直接访问本地 http://127.0.0.1:80 来查看结果 运行结果 采用Dockerfile方式部署前端项目 项目中新增Docker文件夹 项目目录 Dockerfile文件 Dockerfile 分为四部分基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。 # 拉取nginx基础镜像
FROM nginx:1.21.1# 维护者信息
MAINTAINER xxxx# 将dist文件中的内容复制到 /usr/share/nginx/html/dist 这个目录下面
COPY dist /usr/share/nginx/html/dist
# 用本地配置文件来替换nginx镜像里的默认配置
COPY nginx/nginx.conf /etc/nginx/nginx.conf# 对外暴露的端口号
EXPOSE 80# 启动nginx容器
CMD [nginx, -g, daemon off;] 修改nginx.conf文件与上方 案例1 中的nginx.conf配置文件保持一致即可构建打包-部署 在前端项目中安装依赖打包生成dist文件夹将dist文件夹复制到Docker文件夹中进行docker build命令打包docker镜像最后运行起来。 npm install
npm run build
cp -r dist Docker/
cd Docker
docker build -f Dockerfile -t [镜像名称] . --no-cache
docker run -d -p 80:80 --restartalways --name [容器名称] [镜像名称] d839a08958cdbf47747870f737da4e6e3b76668913781cd517a0f03d799973b6 就是我们的容器Id 运行结果 执行完以上操作我们可以直接访问本地 http://127.0.0.1:80 来查看结果 运行结果 采用DockerFileDockerCompose方式部署项目 Compose 定位是“defining and running complex applications with Docker”前身是 Fig兼容 Fig 的模板文件。Dockerfile可以让用户管理一个单独的应用容器而 Compose 则允许用户在一个模板YAML 格式中定义一组相关联的应用容器被称为一个 project即项目。 修改构建脚本 将这条命令 docker run -d -p 80:80 --restartalways --name my_proect_container my_project:dev 替换成: docker-compose up -d 项目中新增docker-compose.yml文件 services:my_project:ports:- 80:80restart: alwayscontainer_name: my_proect_containerimage: my_project:dev 运行结果 执行完以上操作我们同样可以直接访问本地 http://127.0.0.1:80 来查看结果 三、结束 使用Docker部署应用带来了很多好处。开发人员可以在测试环境中构建Docker容器测试通过后就可以将Docker容器轻松地部署到沙箱环境、生产环境中而无需担心测试、沙箱环境和生产环境之间的配置差异问题。在这种情况下应用程序在任何运行环境中都能保持一致无需重新部署整个环境减少了出错的可能性。同样Docker这种一致性和可移植性也使得开发团队能够更加专注于应用本身的开发和优化不需要花费大量时间来处理环境配置和兼容性问题。此外Docker的轻量级特性意味着它可以更高效地利用系统资源提供快速的启动时间和部署过程从而加速开发周期并实现持续集成和持续部署等等。 总之使用Docker部署应用可以简化开发流程、提高部署效率并确保应用在不同环境中的一致性为开发团队带来了极大的便利和效益。