当前位置: 首页 > news >正文

微网站的好处网站建设与管理(第2版)

微网站的好处,网站建设与管理(第2版),杭州人才招聘网,安装wordpress博客网址更改目录 一、Docker减小镜像大小的方式 1、基础镜像选择 2、减少镜像层数 3、清理无用文件和缓存 4、优化文件复制#xff08;COPY和ADD指令#xff09; 二、Docker镜像多阶段构建 1、什么是dockers镜像多阶段构建 1.1 概念介绍 1.2 构建过程和优势 2、怎样在Dockerfil…目录 一、Docker减小镜像大小的方式 1、基础镜像选择 2、减少镜像层数 3、清理无用文件和缓存 4、优化文件复制COPY和ADD指令 二、Docker镜像多阶段构建 1、什么是dockers镜像多阶段构建 1.1 概念介绍 1.2 构建过程和优势 2、怎样在Dockerfile中实现多阶段构建 2.1 基本语法和步骤 2.2 示例构建一个 Java 应用程序的多阶段镜像 2.3 注意事项 三、使用Dockerfile构建MySQL8.0.11 1、创建Dockerfile 2、启动新容器并创建用户 3、创建新容器并使用之前的数据 一、Docker减小镜像大小的方式 1、基础镜像选择 选择合适的基础镜像 从官方仓库选择精简的基础镜像如alpine。alpine是一个轻量级的 Linux 发行版它的镜像体积通常很小。例如构建一个 Python 应用使用python:alpine作为基础镜像相比python:ubuntu等镜像体积会小很多。因为alpine在设计上注重小巧和简单包含的软件包都是最基本的没有过多的额外组件。基于特定场景定制基础镜像 如果对基础系统有特殊要求可以基于更底层的基础镜像如scratch来构建。scratch是一个空白的镜像几乎没有任何内容。这种情况下需要自己将应用所需的最小运行时环境打包进去。例如对于一个静态编译的 Go 程序可以使用scratch作为基础镜像将编译好的二进制文件直接复制到镜像中这样构建出来的镜像体积会非常小。 2、减少镜像层数 合并RUN指令 在Dockerfile中每一个RUN指令都会创建一个新的镜像层。为了减少层数应尽量合并相关的命令。例如不要使用多个RUN指令分别安装软件包而是将它们合并在一个RUN指令中。比如不是这样写 RUN apt-get update RUN apt-get install -y package1 RUN apt-get install -y package2 3、清理无用文件和缓存 在构建过程中清理缓存 对于基于aptDebian/Ubuntu或yumCentOS 等的系统在安装完软件包后清理软件包缓存。例如在RUN指令中安装完apt - get软件包后使用RUN apt-get clean来清理apt缓存。同样对于yum可以使用RUN yum clean all来清理yum缓存。这样可以减少镜像中不必要的文件占用空间。删除临时文件和无用文件 在构建过程中如果生成了一些临时文件或者不再需要的文件应该及时删除。例如在编译软件时可能会生成一些中间的编译文件这些文件在软件安装完成后就不再需要可以在Dockerfile中添加命令来删除它们。比如在构建一个 C/C 应用的镜像时在RUN指令中编译完程序后可以使用RUN rm -rf /path/to/temporary/compilation/files来删除编译过程中的临时文件。 4、优化文件复制COPY和ADD指令 只复制必要的文件 在使用COPY或ADD指令时只复制应用真正需要的文件和目录到镜像中。避免将整个项目目录包括开发工具、测试文件等都复制进去。例如如果是一个 Web 应用只需要将生产环境下的 HTML、CSS、JavaScript 文件和服务器端代码复制到镜像中而不需要复制开发过程中的单元测试文件等。使用.dockerignore文件 创建一个.dockerignore文件在这个文件中列出不需要复制到镜像中的文件和目录模式。例如如果项目目录中有.git文件夹包含版本控制信息、node_modules对于 Node.js 应用如果已经有package.json和package - lock.json可以在镜像构建过程中重新安装依赖不需要复制本地的node_modules等可以在.dockerignore文件中添加.git和node_modules这样在构建镜像时Docker会自动忽略这些文件和目录从而减小复制到镜像中的文件体积。 二、Docker镜像多阶段构建 1、什么是dockers镜像多阶段构建 1.1 概念介绍 Docker 多阶段构建是一种在构建 Docker 镜像时使用的技术它允许将镜像构建过程划分为多个不同的阶段。每个阶段都可以基于不同的基础镜像或者具有不同的构建目的并且可以在不同阶段之间传递文件。通过这种方式可以构建出更加精简、高效且安全的 Docker 镜像。 1.2 构建过程和优势 减小镜像体积 在传统的单阶段构建中如果要构建一个包含编译环境和运行环境的应用镜像例如一个 Go 语言应用构建过程中需要安装 Go 编译器和相关的编译工具来编译代码同时还需要将运行应用所需的库和二进制文件打包到镜像中。这会导致镜像中包含大量的编译工具和中间文件使镜像体积变大。而在多阶段构建中可以先使用一个包含 Go 编译器的基础镜像来编译应用生成可执行文件。然后在第二阶段使用一个更精简的基础镜像如alpine只将编译好的可执行文件复制到这个镜像中抛弃了编译环境相关的工具和文件从而大大减小了最终镜像的体积。提高安全性 以一个包含敏感信息如数据库连接密码的应用为例。在单阶段构建中如果构建过程中涉及到在镜像中设置密码等操作这些敏感信息可能会留在最终的镜像中存在安全风险。在多阶段构建中可以在一个阶段如开发环境阶段处理敏感信息相关的操作然后在构建最终生产环境镜像的阶段只将必要的、经过处理的应用组件复制过来避免敏感信息泄露到生产环境镜像中提高了镜像的安全性。 分离关注点 对于复杂的应用构建不同的构建阶段可能有不同的目标。例如在第一阶段进行代码编译、测试在第二阶段进行打包和配置运行环境。多阶段构建可以清晰地将这些不同的关注点分开使得构建过程更加易于理解和维护。示例 以构建一个 Node.js 应用为例第一阶段可以使用node:14 - builder假设这是一个包含构建工具的 Node.js 镜像来安装项目依赖并构建应用 FROM node:14 - builder WORKDIR /app COPY package*.json./ RUN npm install COPY.. RUN npm run build 2、怎样在Dockerfile中实现多阶段构建 2.1 基本语法和步骤 多个FROM指令 在Dockerfile中通过使用多个FROM指令来划分不同的构建阶段。每个FROM指令开始一个新的构建阶段并且可以基于不同的基础镜像。例如第一阶段可能基于一个包含编译工具的基础镜像用于构建应用程序第二阶段可以基于一个更精简的运行时基础镜像用于运行最终的应用。阶段命名可选 可以为每个阶段指定一个名称这在需要引用特定阶段时非常有用。命名是在FROM指令后使用AS关键字来实现的。例如FROM node:14 - builder AS builder_stage这里将第一个阶段命名为builder_stage。文件复制COPY或ADD在阶段之间 使用COPY或ADD指令在不同阶段之间传递文件。关键是要使用--from选项来指定从哪个阶段复制文件。例如COPY --from builder_stage /app/dist.表示从名为builder_stage的阶段复制/app/dist目录下的文件到当前阶段的当前目录.。 2.2 示例构建一个 Java 应用程序的多阶段镜像 第一阶段构建应用使用maven构建工具 FROM maven:3.8.4 - openjdk - 11 AS build WORKDIR /app COPY pom.xml. RUN mvn dependency:go-off-line COPY src./src RUN mvn package - DskipTests 2.3 注意事项 缓存利用 在多阶段构建中每个阶段的构建缓存是独立的。Docker 会根据每个阶段的FROM指令和后续的构建指令来判断是否可以使用缓存。因此合理安排构建顺序和指令内容可以更好地利用缓存提高构建效率。基础镜像选择 每个阶段要根据其功能选择合适的基础镜像。如在编译阶段选择包含完整编译工具链的镜像在运行阶段选择只包含运行时必要组件的镜像这样才能充分发挥多阶段构建减小镜像体积的优势。 三、使用Dockerfile构建MySQL8.0.11 1、创建Dockerfile # 使用官方MySQL 8.0镜像作为基础镜像 FROM mysql:8.0# 设置环境变量用于初始化数据库 ENV MYSQL_DATABASEdb_name ENV MYSQL_USERuser_name ENV MYSQL_PASSWORDuser_password ENV MYSQL_ROOT_PASSWORDroot_password# 复制初始化脚本到容器内 COPY ./init.sql /docker-entrypoint-initdb.d/# 容器将以daemon模式运行MySQL服务 CMD [mysqld] 命令示例 cat Dockerfile eof FROM mysql:8.0.11 ENV MYSQL_DATABASEMineGi ENV MYSQL_USERtest11 ENV MYSQL_PASSWORD123456 ENV MYSQL_ROOT_PASSWORD666666 COPY ./init.sql /docker-entrypoint-initdb.d/ CMD [mysqld] eofcat init.sql eof CREATE TABLE test11 (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); eofls docker build -t mysql:v8 . 输出结果 [rootMineGi ~]# cat Dockerfile eofFROM mysql:8.0.11ENV MYSQL_DATABASEMineGiENV MYSQL_USERtest11ENV MYSQL_PASSWORD123456ENV MYSQL_ROOT_PASSWORD666666COPY ./init.sql /docker-entrypoint-initdb.d/CMD [mysqld]eof [rootMineGi ~]# cat init.sql eofCREATE TABLE test11 (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);eof [rootMineGi ~]# ls Dockerfile init.sql [rootMineGi ~]# docker build -t mysql:v8 . [] Building 0.1s (7/7) FINISHED docker:default [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 222B 0.0s [internal] load metadata for docker.io/library/mysql:8.0.11 0.0s [internal] load .dockerignore 0.0s transferring context: 2B 0.0s [internal] load build context 0.0s transferring context: 187B 0.0s [1/2] FROM docker.io/library/mysql:8.0.11 0.0s CACHED [2/2] COPY ./init.sql /docker-entrypoint-initdb.d/ 0.0s exporting to image 0.0s exporting layers 0.0s writing image sha256:10b79382712d1c5e721fd28cab3194c6818606784110fa68520bce220c33474d 0.0s naming to docker.io/library/mysql:v8 0.0s [rootMineGi ~]# 2、启动新容器并创建用户 命令示例 docker run --name my_mysql -v mysql_data:/var/lib/mysql -d mysql:v8 docker exec -it my_mysql mysql -uroot -p666666 create user test-1% identified by 123456; grant all on MineGi.* to test-1%; flush privileges; exit docker stop my_mysql docker rm my_mysql 输出结果 [rootMineGi ~]# docker run --name my_mysql -v mysql_data:/var/lib/mysql -d mysql:v8 c397aefbc2b61dba29ba48c3c32322058b052b5c45cd5c1c7162734d076bd09d [rootMineGi ~]# docker exec -it my_mysql mysql -uroot -p666666 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.11 MySQL Community Server - GPLCopyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type help; or \h for help. Type \c to clear the current input statement.mysql create user test-1% identified by 123456; Query OK, 0 rows affected (0.11 sec)mysql grant all on MineGi.* to test-1%; Query OK, 0 rows affected (0.03 sec)mysql flush privileges; Query OK, 0 rows affected (0.00 sec)mysql exit Bye [rootMineGi ~]# docker stop my_mysql my_mysql [rootMineGi ~]# docker rm my_mysql my_mysql [rootMineGi ~]# 3、创建新容器并使用之前的数据 命令示例 mkdir -p /data/mysql/data cp -a /var/lib/docker/volumes/mysql_data/_data/* /data/mysql/data docker run --name my_mysql -v /data/mysql/data:/var/lib/mysql -d mysql:v8 docker exec -it my_mysql mysql -utest-1 -p123456 show databases; show tables in MineGi; 输出结果 [rootMineGi ~]# mkdir -p /data/mysql/data [rootMineGi ~]# cp -a /var/lib/docker/volumes/mysql_data/_data/* /data/mysql/data [rootMineGi ~]# docker run --name my_mysql -v /data/mysql/data:/var/lib/mysql -d mysql:v8 e5b8cec1fda1bd811c3e2828369b5380b623f02e4c1b9d8cde47ca87aaa3d82e [rootMineGi ~]# docker exec -it my_mysql mysql -utest-1 -p123456 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.11 MySQL Community Server - GPLCopyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type help; or \h for help. Type \c to clear the current input statement.mysql show databases; -------------------- | Database | -------------------- | MineGi | | information_schema | -------------------- 2 rows in set (0.01 sec)mysql show tables in MineGi; ------------------ | Tables_in_MineGi | ------------------ | test11 | ------------------ 1 row in set (0.01 sec)mysql 情况说明对于数据库的数据目录。可以直接使用Bind Mount方式挂载 关于这方面的解释如下 理解数据持久化的概念 当你将 Docker 容器中的数据库目录持久化到宿主机时实际上是将容器内的数据存储位置映射到了宿主机的文件系统中。例如对于 MySQL 容器其内部存储数据的目录如/var/lib/mysql通过-vvolume参数挂载到宿主机的某个目录。容器启动时的数据加载 如果在容器启动之前挂载的宿主机目录中已经存在有效的数据库文件容器内的数据库服务在启动时会加载这些文件。以 MySQL 为例当容器中的 MySQL 服务启动时它会检查数据目录现在已经挂载到宿主机中的文件。如果存在数据库文件如.frm、.ibd等 MySQL 数据文件格式它会读取这些文件来恢复数据库的状态包括数据库、表结构和数据等内容。数据共享和同步机制 这种持久化方式使得容器和宿主机之间的数据共享成为可能。在容器运行期间对数据库的任何写入操作如插入、更新数据实际上是在宿主机挂载的目录中对应的文件上进行写入。这是因为容器内的数据库进程认为数据目录就是它正常存储数据的地方而这个目录已经被挂载到宿主机所以数据会持久地保存在宿主机上并且在容器重新启动等情况下可以被再次加载和使用。容器镜像初始内容的复制 当你使用docker run命令并挂载了一个宿主机上不存在的目录如/data/test01到容器内的/var/lib/mysqlMySQL 数据存储目录时Docker 会自动将容器内部/var/lib/mysql目录中的初始内容复制到宿主机挂载点。对于mysql:v8这个镜像其内部/var/lib/mysql目录已经包含了 MySQL 初始化所需要的一些系统文件如配置文件auto.cnf、证书文件ca.pem、client - cert.pem等以及数据库初始文件ibdata1、ib_logfile0等。这些文件在容器启动并挂载卷时被复制到了宿主机的/data/test01目录。数据库文件系统的初始化机制 MySQL 等数据库在启动时会检查数据目录是否为空。如果数据目录不存在某些关键文件它会尝试初始化这些文件。由于容器镜像中已经有了这些初始化文件当通过挂载卷的方式将容器内的数据目录和宿主机目录关联起来时这些初始化文件就被复制到了宿主机使得在宿主机挂载点看起来有了内容。这些文件是数据库正常运行所必需的后续数据库的操作如创建表、插入数据等也会将数据存储在这个挂载的目录中保证数据的持久化。
文章转载自:
http://www.morning.gqwpl.cn.gov.cn.gqwpl.cn
http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn
http://www.morning.rcqyk.cn.gov.cn.rcqyk.cn
http://www.morning.lveyue.com.gov.cn.lveyue.com
http://www.morning.nwmwp.cn.gov.cn.nwmwp.cn
http://www.morning.kjxgc.cn.gov.cn.kjxgc.cn
http://www.morning.srmdr.cn.gov.cn.srmdr.cn
http://www.morning.ghccq.cn.gov.cn.ghccq.cn
http://www.morning.ylyzk.cn.gov.cn.ylyzk.cn
http://www.morning.fyskq.cn.gov.cn.fyskq.cn
http://www.morning.feites.com.gov.cn.feites.com
http://www.morning.fmry.cn.gov.cn.fmry.cn
http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn
http://www.morning.gycyt.cn.gov.cn.gycyt.cn
http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn
http://www.morning.tgtsg.cn.gov.cn.tgtsg.cn
http://www.morning.rxfbf.cn.gov.cn.rxfbf.cn
http://www.morning.pbsfq.cn.gov.cn.pbsfq.cn
http://www.morning.qgzmz.cn.gov.cn.qgzmz.cn
http://www.morning.jxpwr.cn.gov.cn.jxpwr.cn
http://www.morning.tkcz.cn.gov.cn.tkcz.cn
http://www.morning.rnnts.cn.gov.cn.rnnts.cn
http://www.morning.yjtnc.cn.gov.cn.yjtnc.cn
http://www.morning.nthyjf.com.gov.cn.nthyjf.com
http://www.morning.snjpj.cn.gov.cn.snjpj.cn
http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn
http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn
http://www.morning.yuminfo.com.gov.cn.yuminfo.com
http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn
http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn
http://www.morning.bgnkl.cn.gov.cn.bgnkl.cn
http://www.morning.bqfpm.cn.gov.cn.bqfpm.cn
http://www.morning.nclbk.cn.gov.cn.nclbk.cn
http://www.morning.ghjln.cn.gov.cn.ghjln.cn
http://www.morning.redhoma.com.gov.cn.redhoma.com
http://www.morning.lflnb.cn.gov.cn.lflnb.cn
http://www.morning.gtjkh.cn.gov.cn.gtjkh.cn
http://www.morning.gnlyq.cn.gov.cn.gnlyq.cn
http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn
http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn
http://www.morning.bfgbz.cn.gov.cn.bfgbz.cn
http://www.morning.npkrm.cn.gov.cn.npkrm.cn
http://www.morning.glxdk.cn.gov.cn.glxdk.cn
http://www.morning.xxrwp.cn.gov.cn.xxrwp.cn
http://www.morning.xdlwm.cn.gov.cn.xdlwm.cn
http://www.morning.qnbgk.cn.gov.cn.qnbgk.cn
http://www.morning.lsjgh.cn.gov.cn.lsjgh.cn
http://www.morning.txzqf.cn.gov.cn.txzqf.cn
http://www.morning.tqjks.cn.gov.cn.tqjks.cn
http://www.morning.xnkh.cn.gov.cn.xnkh.cn
http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn
http://www.morning.fglxh.cn.gov.cn.fglxh.cn
http://www.morning.gcszn.cn.gov.cn.gcszn.cn
http://www.morning.kryxk.cn.gov.cn.kryxk.cn
http://www.morning.gmrxh.cn.gov.cn.gmrxh.cn
http://www.morning.sfnr.cn.gov.cn.sfnr.cn
http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn
http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn
http://www.morning.tfqfm.cn.gov.cn.tfqfm.cn
http://www.morning.czgtt.cn.gov.cn.czgtt.cn
http://www.morning.mdmc.cn.gov.cn.mdmc.cn
http://www.morning.fhcwm.cn.gov.cn.fhcwm.cn
http://www.morning.dglszn.com.gov.cn.dglszn.com
http://www.morning.rqxch.cn.gov.cn.rqxch.cn
http://www.morning.nwclg.cn.gov.cn.nwclg.cn
http://www.morning.trqsm.cn.gov.cn.trqsm.cn
http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn
http://www.morning.mcjrf.cn.gov.cn.mcjrf.cn
http://www.morning.dhpjq.cn.gov.cn.dhpjq.cn
http://www.morning.wxfjx.cn.gov.cn.wxfjx.cn
http://www.morning.bljcb.cn.gov.cn.bljcb.cn
http://www.morning.byshd.cn.gov.cn.byshd.cn
http://www.morning.ndxrm.cn.gov.cn.ndxrm.cn
http://www.morning.qxgmp.cn.gov.cn.qxgmp.cn
http://www.morning.kbgzj.cn.gov.cn.kbgzj.cn
http://www.morning.smj78.cn.gov.cn.smj78.cn
http://www.morning.pyxtn.cn.gov.cn.pyxtn.cn
http://www.morning.ydwnc.cn.gov.cn.ydwnc.cn
http://www.morning.guofenmai.cn.gov.cn.guofenmai.cn
http://www.morning.rmrcc.cn.gov.cn.rmrcc.cn
http://www.tj-hxxt.cn/news/237451.html

相关文章:

  • 做环评需要关注哪些网站wordpress 极简 模板
  • 网站建设维护保密协议网站游戏网站建设
  • 青州专业网站建设网站关键词被改
  • 蚌埠网站建设费用广州专业网站建设哪里有
  • 中交路桥建设有限公司网站免费erp系统
  • 网站建立者网站免费建站方法
  • 在线教育网站开发经验简历填写建设用地规划查询网站
  • 注册网站需要房产证网站安全狗卸载卸载不掉
  • 网站建设要咨询哪些wordpress推特登陆
  • 哪些网站可以做海报热点的asp.net 企业官网网站 源码 多风格 多模板 多皮肤
  • php做自己的网站长春营销型网站制作
  • 网页源码怎么做网站重庆网站平台
  • 互动网站建设的主页天辰工程信息网
  • 做网站需要投标吗怎么注销自己名下的营业执照
  • 广州 网站制作如何提高网站的搜索
  • 亿企邦网站建设专业俄文网站建设
  • 贵阳网站设计有哪些深圳电子商务平台设计
  • 餐饮加盟网站建设重庆网站建设制作设计
  • 公司网站推广费用下载住小帮app看装修
  • 建设单位网站营销策划方案纲要
  • 网站修改flashfxp上传多久生效花店网站模板
  • 营销型网站规划网站建设需要些什么资料
  • dw简易网站怎么做室内建筑设计
  • 深圳网站制作网站建设怎么制作网站深圳博纳重庆网站商城
  • 辽宁手机版建站系统开发东子WordPress
  • 聊城专业建网站价格网站应该怎么做运维
  • 舆情网站网址阿里巴巴国际贸易平台
  • 网站定制文章列表项怎么做网站页尾信息
  • 建企业网站浩森宇特沈阳全网推广公司哪家好
  • 江苏建设工程招投标网站网站备案要交钱吗