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

网站优化需要哪些工具做网站内嵌地图

网站优化需要哪些工具,做网站内嵌地图,中国十大服装设计公司,珠宝类网站建设一、Dockerfile 简介 Dockerfile 是构建镜像的文本文件#xff0c;通过一系列指令描述镜像构建过程#xff0c;构建操作由 Docker daemon 进行#xff0c;它会先验证语法#xff0c;然后逐一运行指令#xff0c;每次生成一个新的镜像层#xff0c;直到构建出最终的镜像。…一、Dockerfile 简介 Dockerfile 是构建镜像的文本文件通过一系列指令描述镜像构建过程构建操作由 Docker daemon 进行它会先验证语法然后逐一运行指令每次生成一个新的镜像层直到构建出最终的镜像。 Dockerfile 集成了构建镜像所需的全部步骤从选择基础镜像到运行容器极大地简化了应用程序的部署和环境配置流程。通过 Dockerfile开发者可以实现自动化、可重复、一致的构建过程这对于团队协作和持续集成 / 持续部署流程至关重要。 Docker 镜像是一个特殊的分层文件系统包含应用程序和必要的依赖环境但并不包含任何的动态信息。构建一个镜像实际上就是为镜像中的每一层创建相应的配置。因此可以把构建的命令语句、参数配置等信息都写入一个脚本中这样“docker commit” 命令的无法重复的问题、镜像臃肿的问题就都被解决了。这个脚本就是 Dockerfile。 一什么是 Dockerfile Dockerfile 是一个用来构建镜像的文本文件文本内容包含了一条条构建镜像所需的指令和说明。构建一个镜像就是为镜像中的每一层创建相应的配置而 Dockerfile 则是将这些配置信息以指令的形式记录下来。Dockerfile 可以使用 “docker build” 命令进行编译。在编译过程中每一条指令的内容就是描述该层应如何进行构建。当我们需要定制自己额外的需求时只需要在 Dockerfile 文件的基础上添加或者修改指令重新生成新的镜像即可。 二Dockerfile 示例 下面通过一个简单的示例来演示如何使用 Dockerfile。在这个示例中将基于 Nginx 的镜像来构建一个新的镜像并在该镜像中部署一个简单的 Web 网页。 创建一个文件 “Dockerfile”。在该文件中输入以下命令。 FROM nginx RUN echo h1This is a Demo HTML/h1 /usr/share/nginx/html/index.html在 Dockerfile 所在的目录下执行 “docker build” 命令构建镜像。构建的过程如下图所示。提示“docker build” 命令会在当前目录下寻找名为 “Dockerfile” 的文件然后对该文件进行编译生成镜像。如果文件名不是 Dockerfile则可以在使用 “docker build” 命令加上 “-f” 参数指定文件名称。 查看新生成的镜像如下图所示。 使用新生成的镜像创建容器。 docker run -d -p 7788:80 mynginx 使用浏览器访问宿主机的 7788 端口可以看到如下图所示界面。 三Docker File 文件详解 下图展示了 Docker 镜像、容器和 Dockerfile 三者的关系。可以看出使用 Dockerfile 文件定义镜像然后运行镜像启动容器。下表列出了一个完整的 Dockerfile 文件的组成部分。当完成了 Dockerfile 的编写后使用 “docker build” 命令将会根据 Dockerfile 中上下文的内容构建新 Docker 镜像。整个构建的过程会被递归处理。因此如果在 Dockerfile 中含有子路径或 URL 等信息则它们都将被递归进行构建。 提示在使用 “docker build” 进程镜像构建时还可以通过 “-t” 参数指定生成镜像的仓库地址和标签等信息。Dockerfile 构建镜像的过程请参考下图。“docker build” 命令在使用 Dockerfile 生成镜像时会通过 Docker 的守护进程执行 Dockerfile 中的每一条指令并在每一步执行完成后生成一个新镜像。当所有的指令执行完成后会输出最终镜像的 ID。当镜像最终生成后Docker 的守护进程会自动清理 Docker 的上下文环境并自动重用已生成的中间镜像以加速构建的速度。图中方框的部分表明在构建过程中使用到了 Dockerfile 的缓存机制。 二、Dockerfile 关键字详解 1. FROM 关键字 指定基础镜像新镜像是基于哪个镜像构建的建议使用官方镜像作为基础镜像如 Alpine体积小且严格控制。在 Dockerfile 中FROM指令必须作为第一个指令出现它为后续的构建步骤提供了基础环境。例如FROM ubuntu:20.04这里指定了以 Ubuntu 20.04 版本的镜像作为基础镜像。 2. MAINTAINER/LABEL 关键字 MAINTAINER指定维护者信息例如MAINTAINER John Doe john.doeexample.com。但按照官方文档描述MAINTAINER已逐渐过时目前更推荐使用LABEL来设置元数据。 LABEL用于给镜像打标签相对MAINTAINER更灵活。可以设置多个元数据一个LABEL是键值对多个键值对之间使用空格分开命令换行时使用反斜杠\。例如LABEL version1.0 descriptionThis is a demo image byDeveloper Name。 3. RUN 关键字 构建过程中运行的命令有 shell 格式和 exec 格式两种。 shell 格式RUN command命令在 shell 中运行默认情况下在 Linux 上是/bin/sh -c在 Windows 上是cmd /S /C。例如RUN apt-get update。 exec 格式RUN [executable, param1, param2]。例如RUN [npm, install]。 4. WORKDIR 关键字 指定进入容器时的目录。使用WORKDIR可以设置容器内的工作目录后续的指令将在这个目录下执行。例如WORKDIR /app如果目录不存在会自动创建。 5. ENV 关键字 设置容器内环境变量方便访问程序。通过ENV可以设置环境变量这些变量在构建过程和容器运行时都有效。例如ENV NODE_ENV production在后续的指令中可以使用这个环境变量如RUN echo $NODE_ENV。 6. ADD 关键字 将宿主机资源拷贝进镜像中会自动解压缩还能从远程读取资源。ADD指令可以将宿主机上的文件或目录复制到镜像中。如果源是一个压缩文件它会自动解压缩。例如ADD myfile.tar.gz /app会将myfile.tar.gz解压缩到容器的/app目录下。同时ADD还支持从远程 URL 获取资源例如ADD http://example.com/file.txt /app会从指定 URL 下载文件并复制到容器的/app目录。 7. COPY 关键字 将宿主机资源拷贝到镜像中只支持读取构建所在宿主机资源更透明。COPY与ADD功能类似但不会自动解压缩文件也不能从远程读取资源。例如COPY myfile.txt /app只会将宿主机上的myfile.txt复制到容器的/app目录。Docker 开发者推荐在满足同等功能的情况下尽量使用COPY指令以避免ADD指令可能带来的意外情况。 8. VOLUME 关键字 挂载数据卷根据构建出来的镜像运行容器时默认有构建时挂载信息。VOLUME指令用于在容器中创建一个数据卷这个数据卷可以被多个容器共享并且数据写入不会影响镜像层。例如VOLUME /data在容器运行时可以将宿主机上的目录挂载到这个数据卷上实现数据的持久化存储。 9. EXPOSE 关键字 指定运行容器时对外暴露的端口。EXPOSE指令用于指定容器在运行时要对外暴露的端口。例如EXPOSE 8080这只是声明了容器要暴露的端口但要让外部能够访问这些端口还需要在运行容器时使用-p参数进行端口映射。 10. CMD 关键字 指定启动容器时要执行的命令只有最后一个会生效创建容器时指定命令会覆盖 CMD 命令。CMD指令用于指定容器启动时默认执行的命令和参数。如果 Dockerfile 中有多个CMD指令只有最后一个会生效。并且在创建容器时可以通过命令行参数覆盖CMD指定的命令。例如CMD [node, app.js]如果在运行容器时使用docker run image bash则会覆盖CMD指定的命令执行bash命令。 11. ENTRYPOINT 关键字 指定启动容器时要执行的命令可以追加命令执行时机同 CMD。ENTRYPOINT指令用于指定容器启动时要执行的命令与CMD不同的是ENTRYPOINT指定的命令不会被docker run命令行参数覆盖而是会将这些参数作为附加参数传递给ENTRYPOINT指定的命令。例如ENTRYPOINT [node]如果运行容器时使用docker run image app.js则容器会执行node app.js。 12. ARG 关键字 定义变量和写代码时定义变量一样。ARG用于在构建镜像时定义变量这些变量可以在后续的指令中使用。例如ARG BUILD_ENVproduction在RUN指令中可以使用这个变量如RUN if [ $BUILD_ENV production ]; then npm install --production; else npm install; fi。 13. ONBUILD 关键字 基于父镜像构建新镜像时父镜像的 ONBUILD 会被触发。ONBUILD指令用于在构建新镜像时当新镜像基于包含ONBUILD指令的父镜像构建时父镜像的ONBUILD指令会被触发执行。例如ONBUILD RUN echo This is triggered when building a child image当一个新镜像基于这个镜像构建时这个命令会被执行。 三、Dockerfile 实战案例 1. 构建 Flask 镜像 使用 Python 和 Flask 构建一个简单的 Web 应用通过 Dockerfile 构建镜像并启动容器在网页输入服务器 IP 和端口即可看到输出。 首先创建一个 Flask 应用以下是一个简单的示例 from flask import Flaskapp Flask(__name__)app.route(/) def hello():return Hello from Flask!if __name__ __main__:app.run(host0.0.0.0, port5000)然后编写 Dockerfile FROM python:3.10 WORKDIR /app COPY.. RUN pip install flask EXPOSE 5000 CMD [python, your_flask_app.py]在项目目录下执行以下命令构建镜像 docker build -t flask-app.启动容器 docker run -d -p 5000:5000 flask-app现在可以在网页中输入服务器 IP 和 5000 端口就能看到 “Hello from Flask!” 的输出。 2. 配置 stress 容器 使用 Ubuntu 镜像构建一个 stress 容器通过不同的启动参数来观察容器的行为。 1、构建镜像模拟测试编写 Dockerfile FROM ubuntu:latest RUN apt-get update apt-get install stress构建镜像 docker build -t stress:latest.启动容器 docker run -it --rm --cpus2 stress:latest /bin/bash执行 stress 命令使用 stress 命令创建 4 个繁忙的进程消耗 cpu 资源 stress -c 4或者已存在的容器安装 stress 安装前准备 yum install wget gcc gcc-c make -y下载 stress https://src.fedoraproject.org/repo/pkgs/stress/stress-1.0.4.tar.gz/a607afa695a511765b40993a64c6e2f4/安装 tar zxf stress-1.0.4.tar.gz cd stress-1.0.4 ./configure make make install3. 构建 SSH、Systemctl、nginx、tomcat、mysql 镜像 介绍了多种常见服务的镜像构建方法。 构建 SSH 镜像 mkdir /opt/sshd cd /opt/sshd vim Dockerfile #第一行必须指明基于的基础镜像 FROM centos:7 #作者信息 MAINTAINER this is ssh image wl #镜像的操作指令 RUN yum -y update RUN yum -y install openssh* net-tools lsof telnet passwd RUN echoabc1234|passwd --stdin root RUN sed -i s/UsePAM yes/UsePAM no/g /etc/ssh/sshd_config\t\t\t\t\t\t#不使用 PAM 认证 RUN sed -ri /^session\\srequired\\spam_loginuid.so/s/^/#/ /etc/pam.d/sshd\t\t#取消 pam 限制 RUN ssh-keygen -t rsa -A\t\t\t\t\t\t\t\t\t\t\t\t\t\t#生成密钥认证文件 RUN mkdir -p /root/.ssh chown root.root /root chmod 700 /root/.ssh EXPOSE 22 CMD [/usr/sbin/sshd, -D] #/usr/sbin/sshd -D 用于前台启动 sshd 服务 //生成镜像 docker build -t sshd:centos. //启动容器并修改 root 密码 docker run -d -P sshd:centos docker ps -a ssh localhost -p 49155构建 Systemctl 镜像 mkdir /opt/systemctl cd /opt/systemctl vim Dockerfile FROM sshd:centos MAINTAINER this is systemctl image wl ENV container docker #除了 systemd-tmpfiles-setup.service删除其它所有文件 RUN (cd /lib/systemd/system/sysinit.target.wants/;for i in *;do[$i systemd-tmpfiles-setup.service ]||rm -f $i;done);\\rm -f /l构建 nginx 镜像 mkdir /opt/nginx cd /opt/nginx cp /opt/nginx-1.12.0.tar.gz /opt/nginx vim Dockerfile #基于基础镜像 FROM centos:7 #用户信息 MAINTAINER this is nginx image zhuo #添加环境包 RUN yum -y update RUN yum -y install pcre-devel zlib-devel gcc gcc-c make RUN useradd -M -s /sbin/nologin nginx #上传 nginx 软件压缩包并解压 ADD nginx-1.12.0.tar.gz /usr/local/src/ #指定工作目录 WORKDIR /usr/local/src/nginx-1.12.0 RUN./configure \\ --prefix/usr/local/nginx \\ --usernginx \\ --groupnginx \\ --with-http_stub_status_module make make install ENV PATH /usr/local/nginx/sbin:$PATH #指定 http 和 https 端口 EXPOSE 80 EXPOSE 443 RUN echo daemon off; /usr/local/nginx/conf/nginx.conf\t\t\t#关闭 nginx 在后台运行 #添加宿主机中 run.sh 到容器中 ADD run.sh /run.sh RUN chmod 755 /run.sh CMD [/run.sh]编写脚本 vim run.sh #!/bin/bash /usr/local/nginx/sbin/nginx生成镜像 docker build -t nginx:centos. docker run -d -P nginx:centos构建 tomcat 镜像 mkdir /opt/tomcat cd /opt/tomcat cp /opt/jdk-8u91-linux-x64.tar.gz /opt/tomcat cp /opt/apache-tomcat-8.5.16.tar.gz /opt/tomcat vim Dockerfile FROM centos:7 MAINTAINER this is tomcat image zhuo ADD jdk-8u91-linux-x64.tar.gz /usr/local/ WORKDIR /usr/local/ RUN mv jdk1.8.0_91 /usr/local/java ENV JAVA_HOME /usr/local/java ENV JRE_HOME ${JAVA_HOME}/jre ENV CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib ENV PATH $JAVA_HOME/bin:$PATH ADD apache-tomcat-8.5.16.tar.gz /usr/local/ WORKDIR /usr/local/ RUN mv apache-tomcat-8.5.16 /usr/local/tomcat EXPOSE 8080 #CMD [/usr/local/tomcat/bin/catalina.sh,run] ENTRYPOINT [/usr/local/tomcat/bin/catalina.sh,run]生成镜像 docker build -t tomcat:centos. docker run -d --name tomcat01 -p 1216:8080 tomcat:centos构建 MySQL 镜像 mkdir /opt/mysqld cd /opt/mysqld vim Dockerfile FROM centos:7 MAINTAINER this is mysql image zhuo RUN yum -y install gcc gcc-c ncurses ncurses-devel bison cmake make RUN useradd -M -s /sbin/nologin mysql ADD mysql-boost-5.7.20.tar.gz /usr/local/src/ WORKDIR /usr/local/src/mysql-5.7.20/ RUN cmake \\ -DCMAKE_INSTALL_PREFIX/usr/local/mysql \\ -DMYSQL_UNIX_ADDR/usr/local/mysql/mysql.sock \\ -DSYSCONFDIR/etc \\ -DSYSTEMD_PID_DIR/usr/local/mysql \\ -DDEFAULT_CHARSETutf8 \\ -DDEFAULT_COLLATIONutf8_general_ci \\ -DWITH_INNOBASE_STORAGE_ENGINE1 \\ -DWITH_ARCHIVE_STORAGE_ENGINE1 \\ -DWITH_BLACKHOLE_STORAGE_ENGINE1 \\ -DWITH_PERFSCHEMA_STORAGE_ENGINE1 \\ -DMYSQL_DATADIR/usr/local/mysql/data \\ -DWITH_BOOSTboost \\ -DWITH_SYSTEMD1 make make install RUN chown -R mysql:mysql /usr/local/mysql/ RUN rm -rf /etc/my.cnf ADD my.cnf /etc/ RUN chown mysql:mysql /etc/my.cnf ENV PATH/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH WORKDIR /usr/local/mysql/ RUN bin/mysqld \\ --initialize-insecure \\ --usermysql \\ --basedir/usr/local/mysql \\ --datadir/usr/local/mysql/data RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ EXPOSE 3306 ADD run.sh /usr/local/src RUN chmod 755 /usr/local/src/run.sh RUN sh /usr/local/src/run.sh vim my.cnf4. 构建自己的应用镜像 以 Tomcat 中运行程序为例展示了如何编写 Dockerfile、构建镜像、运行镜像并部署项目。 首先准备好要部署的项目文件假设是一个简单的 Web 应用。然后编写 Dockerfile FROM tomcat:latest COPY your_project_directory /usr/local/tomcat/webapps/在项目目录下执行以下命令构建镜像 docker build -t your_app_image.启动容器 docker run -d -p 8080:8080 your_app_image四、Dockerfile 注意事项 1. FROM 语法的选择 在选择镜像时应遵循三个基本原则 官方镜像优于非官方镜像选择官方认证的镜像可以保证安全性避免木马和侵入程序。 固定版本的 Tag而非每次都使用latest。进入镜像详细页面选择Tags选项卡会看到很多版本的镜像。需根据项目需求选择固定版本避免因前后版本不兼容带来的维护性和稳定性问题。 功能满足且体积小。选择基础镜像时要考虑到后续会在基础上添加很多内容和应用镜像是分层的体积越大复杂度越高所以应选择体积小的镜像以保持简洁。 2. RUN 语法的优化 将多个命令放在一起执行减少镜像层数和大小。例如避免以下错误示范 RUN apt-get update RUN apt-get install wget RUN wget https://github.com/ipinfo/cli/releases/download/ipinfo-2.0.1/ipinfo_2.0.1_linux_amd64.tar.gz RUN tar zxf ipinfo_2.0.1_linux_amd64.tar.gz RUN mv ipinfo_2.0.1_linux_amd64 /usr/bin/ipinfo RUN rm -rf ipinfo_2.0.1_linux_amd64.tar.gz正确的做法是 RUN apt-get update apt-get install wget wget https://github.com/ipinfo/cli/releases/download/ipinfo-2.0.1/ipinfo_2.0.1_linux_amd64.tar.gz tar zxf ipinfo_2.0.1_linux_amd64.tar.gz mv ipinfo_2.0.1_linux_amd64 /usr/bin/ipinfo rm -rf ipinfo_2.0.1_linux_amd64.tar.gz这样用将多个命令放在一起只RUN一次可控制最终得到的镜像大小。 3. COPY 与 ADD 的区别 在复制普通文件时COPY和ADD相似但ADD在添加 gzip 文件时可自动解压。同时COPY不支持从远程读取资源而ADD可以从远程 URL 获取资源例如ADD http://example.com/file.txt /app会从指定 URL 下载文件并复制到容器的/app目录。然而Docker 开发者推荐在满足同等功能的情况下尽量使用COPY指令以避免ADD指令可能带来的意外情况。 4. WORKDIR 切换工作目录 WORKDIR命令类似于 Linux 的cd命令为后续指令配置工作目录。例如WORKDIR /app如果目录不存在会自动创建。 5. ARG 与 ENV 命令的不同 ARG和ENV都可以用来设置变量但有以下不同 作用域不同ARG声明后可在构建时修改变量而ENV在构建过程和容器运行时都有效。 ARG在构建阶段之外不能在后续指令中使用如果想在构建阶段使用ARG声明的带有默认值的变量需要在构建阶段通过ARG声明没有值的同名参数。 6. CMD 容器启动命令 CMD设置容器启动时默认执行的命令可被docker run提供的参数覆盖多个CMD时只有最后一个执行。例如CMD [node, app.js]如果在运行容器时使用docker run image bash则会覆盖CMD指定的命令执行bash命令。 五、在项目中运用 Dockerfile 1. Docker 和 Dockerfile 的重要性 Docker 起源于 dotCloud 公司创始人 Solomon Hykes 在法国发起的一个公司内部项目它是基于该公司多年云服务技术的一次革新并于 2013 年 3 月以 Apache 2.0 授权协议开源。Docker 使用 Google 公司推出的 Go 语言进行开发实现基于 Linux 内核的 cgroupnamespace以及 OverlayFS 类的 Union FS 等技术对进程进行封装隔离属于操作系统层面的虚拟化技术。 Docker 有着诸多优势。其一能提供一致的运行环境便于迁移服务器例如开发阶段的程序可以和其依赖的软件环境如 jdk、tomcat、mysql 等一起打包无论在哪个机器上都能保证环境一致避免因环境差异导致应用程序无法运行的问题其二它对进程进行封装隔离容器与容器之间互不影响可更高效地利用系统资源比如公司举办活动面临大量流量时运维人员只需将程序打包成镜像然后按需运行多个容器即可无需像以往那样耗时费力地去部署多台环境可能不一致的服务器其三通过镜像能够轻松复制出多个环境一致的容器。 而 Dockerfile 在自动化构建和团队协作方面发挥着关键作用。它是创建 Docker 镜像的文本文件包含了构建镜像所需的全部指令像选择基础镜像、安装软件包、添加文件、设置环境变量等步骤都能通过它来定义。借助 Dockerfile开发人员无需手动一步步安装和配置环境只要定义好容器的基础镜像、软件依赖以及启动命令等信息就能快速自动化构建出完整的容器镜像。并且将 Dockerfile 纳入版本控制系统如 Git后团队中的每个成员都能使用相同的容器环境配置可避免因开发环境不一致引发的各类问题确保构建过程的可重复性和可追溯性极大提高了团队协作效率以及应用的可靠性。 2. Docker 基础 1架构简介 Docker 使用客户端 - 服务器 (C/S) 架构模式运用远程 API 来管理和创建 Docker 容器。其主要组件包括 Docker 客户端是用户与 Docker 守护进程交互的命令行界面CLI用户通过它发出命令这些命令会被发送到 Docker 守护进程由守护进程执行相应操作像创建容器、构建镜像、查看容器状态等常用操作都可通过 docker 这个常用命令行工具来实现。Docker 守护进程通常是 dockerd它是 Docker 架构的核心负责管理容器生命周期、构建镜像、分发镜像等任务一般以后台进程的方式运行等待来自 Docker 客户端的 API 请求像启动和停止容器、构建拉取推送镜像、管理容器网络和存储、查看容器日志等都由它来处理。Docker 镜像可以看作是容器的只读模板每个镜像包含了应用程序运行所需的操作系统、运行时、库、环境变量以及应用代码等内容镜像是构建容器的基础用户可从 Docker Hub 或私有仓库获取也能通过 Dockerfile 自行构建并且不同容器使用同一个镜像时容器中的文件系统层是相互独立的。Docker 容器是 Docker 镜像的运行实例能在其中运行应用程序提供独立的运行环境确保应用程序在不同环境中有一致行为容器在运行时与其他容器和宿主机共享操作系统内核但彼此的文件系统和进程是隔离的其生命周期由 Docker 守护进程管理容器通常在任务完成后被销毁不过可以在任何地方运行因为其运行时依赖都已封装在镜像中。Docker 仓库用来存储和管理 Docker 镜像常见的有公共仓库 Docker Hub用户能从中下载各种官方和社区维护的镜像如 Ubuntu、Nginx、MySQL 等也可以上传自己的镜像分享给其他人此外企业内部还可部署私有 Docker 仓库来管理镜像。Docker 网络用于连接容器的虚拟网络使得容器之间可以相互通信Docker 支持多种网络类型如 bridge、overlay、macvlan 等。Docker 存储驱动用于管理 Docker 容器文件系统的组件像 overlay2、aufs、btrfs 等都是 Docker 支持的存储驱动类型。 2安装设置环境 以 CentOS 7.x 系统为例安装 Docker 的步骤如下 卸载原始 docker如果之前安装过 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine安装 docker 依赖 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2设置 docker 的 yum 源 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo安装最新版的 docker sudo yum install docker-ce docker-ce-cli containerd.io启动 docker sudo systemctl enable docker sudo systemctl start docker安装完成后可通过 docker info 命令查看 docker 信息或使用 docker version 命令查看 docker 引擎版本来验证安装是否成功还可以运行 sudo docker run hello-world 进行简单测试。 在其他系统如通用所有平台的 bash 安装方式中Docker 官方为简化测试或开发环境下的安装流程提供了一套便捷的安装脚本CentOS 系统所有 Linux 发行版本都可以使用上可使用这套脚本安装并且能通过 --mirror 选项使用国内源进行安装命令如下必须联网sudo 表示以管理员身份运行如果登录的就是管理员sudo 可以省略 curl -fsSL get.docker.com -o get-docker.sh sudo sh get-docker.sh --mirror Aliyun3常用命令基础 以下是一些 Docker 的常用命令 docker build用于构建 Docker 镜像例如 docker build -t my-image. 命令会在当前目录下寻找名为 Dockerfile 的文件如果文件名不是 Dockerfile则可以加上 -f 参数指定文件名称然后按照其中的指令构建出名为 my-image 的镜像最后的 . 表示使用当前目录作为构建的上下文环境。docker run用来运行容器像 docker run -d -p 8080:8080 my-image 命令其中 -d 表示让容器在后台运行-p 参数用于进行端口映射将宿主机的 8080 端口映射到容器内的 8080 端口my-image 则是指定要运行的镜像名称。docker ps列出正在运行的容器若加上 -a 参数即 docker ps -a则会列出所有的容器包括已停止的会展示容器的相关信息如容器 ID、镜像名称、创建时间、状态等。docker exec可在运行的容器中执行命令例如 docker exec -it my_container bash 命令能进入名为 my_container 的容器内部并开启一个交互式的 bash 终端方便在容器内进行操作。docker pull从 Docker Hub 或其他指定的注册表中拉取镜像比如 docker pull ubuntu 就是拉取官方的 Ubuntu 镜像到本地。docker push将本地构建好的镜像上传到 Docker Hub 或指定的私有仓库中格式为 docker push username/image_name需要先登录相应仓库账号才行。 3. 编写第一个 Dockerfile 1选择基础镜像 选择基础镜像时通常要遵循以下原则 首先官方镜像优于非官方镜像官方认证的镜像安全性更高能避免木马和侵入程序等隐患。比如常用的 Ubuntu、Nginx、MySQL 等官方镜像都是经过严格审核和维护的可以放心使用。 其次尽量选择固定版本的 Tag而非每次都使用 latest。进入镜像详细页面选择 Tags 选项卡会看到很多版本的镜像应根据项目需求挑选固定版本否则可能因前后版本不兼容带来维护性和稳定性方面的问题例如应用程序在开发环境使用某个依赖的最新版本正常运行但到了生产环境由于 latest 版本更新导致出现兼容性故障。 最后要考虑功能满足且体积小的镜像。因为镜像是分层的基础镜像体积越大后续添加内容和应用后复杂度越高所以选择体积小的镜像有助于保持整个镜像简洁像 Alpine 镜像就是以体积小且严格控制著称常被作为基础镜像使用例如 FROM alpine:latest 就是选择了最新版本的 Alpine 镜像作为基础来构建后续的镜像内容。 2编写步骤和最佳实践 下面以构建一个简单的 Python Flask 应用镜像为例展示 Dockerfile 的编写步骤 # 选择 Python 3.10 版本的官方镜像作为基础镜像 FROM python:3.10 # 设置容器内的工作目录为 /app如果目录不存在会自动创建 WORKDIR /app # 将当前目录宿主机上 Dockerfile 所在目录下的所有文件复制到容器内的 /app 目录下 COPY.. # 运行命令安装 Flask 依赖包 RUN pip install flask # 声明容器运行时要对外暴露的端口为 5000 EXPOSE 5000 # 指定容器启动时要执行的命令这里是运行名为 your_flask_app.py 的 Python 文件 CMD [python, your_flask_app.py]编写 Dockerfile 的最佳实践包括 保持简洁易读和易于维护尽量使用单行指令避免过多的多行复杂指令让 Dockerfile 的结构清晰明了方便后续查看和修改例如将多个相关的安装命令用 连接起来放在一个 RUN 指令中像 RUN apt-get update apt-get install -y wget wget https://example.com/file.tar.gz tar zxf file.tar.gz 这样的形式而不是分成多个 RUN 指令分别执行有助于减少镜像层数进而控制镜像大小。 合理利用版本控制系统使用如 Git 这样的版本控制系统管理 Dockerfile 和相关文件确保构建过程可重复、可追溯团队成员可以方便地查看历史变更记录以及回滚到之前的稳定版本便于协作开发和运维。 3构建过程详解 以上述 Flask 应用的 Dockerfile 为例在项目目录下执行以下命令来构建镜像 docker build -t flask-app.执行该命令后Docker 守护进程会读取 Dockerfile 中的指令按顺序执行每一条指令。首先从指定的基础镜像python:3.10启动一个临时容器接着在这个容器内依次执行后续指令比如执行 COPY 指令复制文件、RUN 指令安装依赖等每执行完一条指令就会提交一个新的镜像层最终当所有指令执行完成后输出最终镜像的 ID并根据 -t 参数-t flask-app给镜像打上指定的标签flask-app方便后续识别和使用该镜像。 构建好镜像后使用以下命令启动容器 docker run -d -p 5000:5000 flask-app-d 参数让容器在后台运行-p 5000:5000 则将宿主机的 5000 端口和容器内的 5000 端口进行映射这样就能通过访问宿主机的 5000 端口来访问容器内运行的 Flask 应用了。 4. 高级 Dockerfile 技巧 1多阶段构建优化镜像大小和构建时间 在应用容器技术的软件开发中控制容器镜像大小很重要。如果构建的镜像既是编译软件的环境又是软件最终运行环境往往很难控制镜像大小。多阶段构建就能很好地解决这个问题它允许在不同的构建阶段使用不同的基础镜像和构建策略优化构建过程并减少最终镜像的大小。 例如构建一个 Go 语言应用的镜像在编译阶段需要 Go 语言的编译环境而运行阶段只需要一个小巧的运行环境如 Alpine 镜像即可。使用多阶段构建的 Dockerfile 示例如下 # 第一阶段构建阶段选择 Go 语言特定版本的镜像作为基础镜像并命名该阶段为 builder FROM golang:1.7.3 AS builder WORKDIR /go/src/github.com/alexellis/href-counter/ COPY app.go. RUN go get -d -v golang.org/x/net/html \ CGO_ENABLED0 GOOSlinux go build -a -installsuffix cgo -o app.# 第二阶段生成阶段选择 Alpine 镜像作为基础镜像用于最终的运行环境 FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ # 从第一阶段builder 阶段构建好的镜像中复制编译生成的二进制文件到当前阶段的镜像中 COPY --frombuilder /go/src/github.com/alexellis/href-counter/app. CMD [./app]通过这种方式Go 语言的编译环境相关的大量依赖等内容只会存在于第一阶段的临时镜像中最终生成的运行镜像只包含了应用运行必需的内容大大减小了镜像体积同时也保持了 Dockerfile 的可读性和可维护性而且只需要一个 Dockerfile 文件就能完成整个复杂的构建过程无需像以往那样编写多个 Dockerfile 和复杂的构建脚本。 2使用 ARG 和 ENV 管理变量 ARG构建时变量用于在构建镜像时定义变量这些变量可以在后续的构建指令中使用作用域主要在构建阶段在构建阶段之外不能在后续指令中使用。例如ARG BUILD_ENVproduction可以在 RUN 指令中根据这个变量来执行不同的操作像 RUN if [ $BUILD_ENV production ]; then npm install --production; else npm install; fi根据构建环境变量的值决定是安装生产环境依赖还是开发环境依赖。并且如果想在构建阶段使用 ARG 声明的带有默认值的变量需要在构建阶段通过 ARG 声明没有值的同名参数来使用。ENV环境变量设置的变量在构建过程和容器运行时都有效方便在容器内访问程序以及配置一些运行时需要的参数等。比如 ENV NODE_ENV production后续指令中就能通过 $NODE_ENV 来引用这个变量像 RUN echo $NODE_ENV 这样进行操作也可以在容器启动后运行的应用程序中使用这些环境变量进行相应的配置和逻辑处理。 合理运用 ARG 和 ENV 变量可以让 Dockerfile 更灵活地适应不同的构建需求以及容器运行时的配置要求提高镜像构建和应用部署的通用性和可配置性。
http://www.dnsts.com.cn/news/6372.html

相关文章:

  • 哪个网站做外贸年费比较便宜深圳市住房和建设局工程交易服务主页
  • 网站弹出的对话框怎么做免费学做衣服的网站
  • html5中国网站欣赏兰州网站优化推广
  • 舟山建设银行纪念币预约网站wordpress花园商城
  • 深圳网站制作建设哪家专业网站开发基础培训
  • wordpress网站鼠标网站设计的研究方法
  • 电商网站 案例东莞网站设计建设
  • 高端html5网站建设密云新闻 今天 最新
  • 网站制作公司高端seo关键词优化费用
  • 蚌埠专业制作网站的公司网站开发工具介绍
  • 中文域名网站跳转西安做h5网站
  • 潍坊网站建设 APP开发小程序外贸营销是做什么的
  • 自己建立网站江西住房和城乡建设部网站首页
  • 网站版块策划网站建设原型图
  • 给一个网站风格做定义匿名聊天网站开发
  • 网站怎么做一盘优化排名wordpress 关键词链接插件
  • 长春网站建设v1公司装修费用怎么做账
  • 宜昌网站设计创新创意产品设计作品
  • 农村建设房子建设网站建设淘宝小程序入口
  • 自己做链接的网站吗万全县城乡建设网站
  • 自己可以做网站推广吗做内销网站
  • 广州做网站优化公司报价商城网站建设哪家最好
  • 做网站前端需要懂得玉田县网站建设
  • 网站制作与建设教程下载手机网页开发者模式
  • 在哪个网站去租地方做收废站制作网页之前必须先建立的是
  • 滑县网站建设哪家专业wordpress网站缩
  • 搜狗站长工具平台做英文网站公司
  • 免费网站程序有限责任公司和有限公司的区别
  • 网页游戏网站有哪些网站建设与网页设计...
  • 网站建设报价单及项目收费明细表卖手表的交易平台哪个好