tp框架做购物网站开发,公司变更法人后原法人还有责任吗,足球比赛直播现场在线观看,四川建设厅网站 蒋目录
一.Docker镜像管理 1.Docker镜像结构 2.Dockerfile介绍
二.Dockerfile实施 1.构建nginx容器 2.构建Tomcat容器 3.构建mysql容器
三.Dockerfile语法注意事项 1.指令书写范围 2.基础镜像选择 3.文件操作注意 4.执行命令要点 5.环境变量和参数设置 6.缓存利用与清理 一.Do…目录
一.Docker镜像管理 1.Docker镜像结构 2.Dockerfile介绍
二.Dockerfile实施 1.构建nginx容器 2.构建Tomcat容器 3.构建mysql容器
三.Dockerfile语法注意事项 1.指令书写范围 2.基础镜像选择 3.文件操作注意 4.执行命令要点 5.环境变量和参数设置 6.缓存利用与清理 一.Docker镜像管理 Docker 镜像除了是 Docker 的核心技术之外也是应用发布的标准格式。一个完整的 Docker 镜像可以支撑一个 Docker 容器的运行在 Docker 的整个使用过程中进入一个已经定型的容器之后就可以在容器中进行操作最常见的操作就是在容器中安装应用服务。 如果要把已经安装的服务进行迁移就需要把环境以及搭建的服务生成新的镜像。本案例将介绍如何创建 Docker 镜像。
1.Docker镜像结构 镜像不是一个单一的文件而是有多层构成。可以通过 docker history 命令查看镜像中各层内容及大小每层对应着 Dockerfile 中的一条指令 。Docker 镜像默认存储在 /var/lib/docker/storage-driver 目录中。容器其实是在镜像的最上面加了一层读写层在运行容器里做的任何文件改动都会写到这个读写层。如果删除了容器也就删除了其最上面的读写层文件改动也就丢失了。Docker 使用存储驱动管理镜像每层内容及可读写层的容器层。Docker 镜像是分层的下面这些知识点非常重要。 Dockerfile 中的每个指令都会创建一个新的镜像层 镜像层将被缓存和复用 当 Dockerfile 的指令修改了复制的文件变化了或者构建镜像时指定的变量不同了对应的镜像层缓存就会失效 某一层的镜像缓存失效它之后的镜像层缓存都会失效 镜像层是不可变的如果在某一层中添加一个文件然后在下一层中删除它则镜像中依然会包含该文件只是这个文件在 Docker 容器中不可见了。
2.Dockerfile介绍 Dockerfile 是一个用于构建 Docker 镜像的文本文件它由一系列指令和参数组成。通过 Dockerfile可以自动化地创建自定义镜像无需手动干预每个步骤。
二.Dockerfile实施
1.构建nginx容器
1拉取centos镜像 [rootlocalhost ~ ]# docker pull centos:7 2创建dockerfile工作目录 [rootlocalhost ~ ]# mkdir /opt/nginx [rootlocalhost ~ ]# cd /opt/nginx 3创建dockerfile [rootlocalhost nginx]# vim dockerfile FROM centos:7 RUN rm -rf /etc/yum.repos.d/* RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo RUN yum clean all #RUN yum makecache RUN yum -y install net-tools pcre-devel zlib-devel zlib gcc* make ADD nginx-1.19.5.tar.gz /root WORKDIR /root/nginx-1.19.5 RUN ./configure --prefix/usr/local/nginx make make install ADD nginx.conf /usr/local/nginx/conf/nginx.conf EXPOSE 80 EXPOSE 443 #RUN echo daemon off;/usr/local/nginx/conf/nginx.conf WORKDIR /root/nginx ADD run.sh /run.sh RUN chmod 775 /run.sh CMD [/run.sh] 4编写nginx启动脚本 [rootlocalhost nginx]# vim run.sh #!/bin/bash /usr/local/nginx/sbin/nginx 5用dockerfile创建镜像 [rootlocalhost nginx]# docker build -t mynginx . 6启动容器 [rootlocalhost ~]# mkdir /nginx [rootlocalhost~]# cp /opt/nginx/nginx.conf /nginx [rootlocalhost nginx]# docker run -dit -p 8083:80 -v /www/html:/web -v /nginx/nginx.conf:/usr/local/nginx/conf/nginx.conf --name nginx04 mynginx /bin/bash -c /run.sh [rootlocalhost nginx]# echo web test/www/html/index.html 7访问nginx网站 http://192.168.10.101:8003 2.构建Tomcat容器 1创建工作目录 [rootlocalhost ~ ]# mkdir /opt/tomcat/ [rootlocalhost ~ ]# cd /opt/tomcat 2创建dockerfile文件 [rootlocalhost tomcat ]# vim dockerfile FROM centos:7 ADD jdk-8u91-linux-x64.tar.gz /usr/local/ ENV JAVA_HOME /usr/local/jdk1.8.0_91 ENV JAVA_BIN /usr/local/jdk1.8.0_91 ENV JRE_HOME /usr/local/jdk1.8.0_91ENV PATH $PATH:/usr/local/jdk1.8.0_91/bin:/usr/local/jdk1.8.0_91/jre/bin ENV CLASSPATH /usr/local/jdk1.8.0_91/jre/bin:/usr/local/jdk1.8.0_91/lib:/usr/local/jdk1.8.0_91/jre/lib/charsets.jar ADD apache-tomcat-8.5.16.tar.gz / RUN mv /apache-tomcat-8.5.16 /usr/local/tomcat EXPOSE 8080 ADD run.sh /run.sh RUN chmod 775 /run.sh CMD [/run.sh] 3创建启动脚本 [rootlocalhost tomcat ]# vim run.sh #!/bin/bash export JAVA-OPTS -Xms2048m -Xmx4096m ulimit -n 65536 /usr/local/tomcat/bin/startup.sh tailf /usr/local/tomcat/logs/catalina.out 4用dockerfile生成镜像 [rootlocalhost tomcat ]# docker build -t mytomcat . 5运行容器 [rootlocalhost tomcat ]# docker run -d -i -p 8080:8080 --name tomcat01 mytomcat 6访问tomcat网站 httpd://192.168.10.101:8080 3. 构建mysql容器
1创建工作目录 [rootlocalhost ~ ]# mkdir /opt/mysql 2创建dockerfile文件 [rootlocalhost ~ ]# cd /opt/mysql [rootlocalhost mysql ]# vim dockerfile FROM centos:7 RUN rm -rf /etc/yum.repos.d/* RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo RUN yum clean all RUN yum -y install mariadb mariadb-server RUN chown -R mysql:mysql /var/lib/mysql ADD init.sh /init.sh RUN chmod 775 /init.sh RUN /init.sh EXPOSE 3306 CMD [mysqld_safe] 3编写mysql初始化脚本 [rootlocalhost mysql ]# vim init.sh #!/bin/bash mysql_install_db --usermysql sleep 3 mysqld_safe sleep 3 mysqladmin -u root password 123456 mysql -uroot -p123456 -e grant all privileges on *.* to root% identified by 123456; mysql -uroot -p123456 -e grant all privileges on *.* to rootlocalhost identified by 123456; mysql -uroot -p123456 -e flush privileges; 4生成镜像 [rootlocalhost mysql ]# docker build -t mysql . 5创建容器 [rootlocalhost mysql ]# docker run -tid -p 3306:3306 mysql [rootlocalhost mysql ]# dnf -y install mysql [rootlocalhost mysql ]# mysql -uroot -p123456 -h 192.168.10.101 -P 3306 三.Dockerfile语法注意事项
1.指令书写规范
1大小写 Dockerfile中的指令不区分大小写但建议使用大写以增强可读性。
2顺序 指令的顺序非常重要因为Docker会换顺序依次执行这些指令。合理安排指令顺序有助于提高构建效率和镜像的可维护性。
3注释 可以使用#来添加注释这有助于解释Dockerfile中各部分的作用提高代码的可读性。
2.基础镜像选择 (1) 稳定性与安全性 选择稳定、官方且维护良好的基础镜像这样能保证镜像的安全性和可靠性。例如官方的 ubuntu、alpine 等镜像都有较好的维护和更新机制。 (2) 镜像大小 如果对镜像大小有严格要求可选择轻量级的基础镜像如 alpine 镜像它体积小巧适合构建资源占用少的容器。 3.文件操作注意 (1) COPY 与 ADD 的区别 COPY 仅用于简单的文件和目录复制语法清晰性能较好推荐优先使用。 ADD 除复制功能外还支持从 URL 下载文件和自动解压缩文件但功能复杂可能带来安全风险和不可预测性所以仅在确实需要这些额外功能时使用。 (3) 文件路径 使用相对路径时要确保路径在构建上下文中是正确的。构建上下文是指执行 docker build 命令时指定的目录只有该目录下的文件和子目录才能被复制到镜像中。 4.执行命令要点 (1) RUN 命令优化 尽量将多个相关的命令合并成一个 RUN 指令减少镜像的层数从而减小镜像体积。例如使用 连接多个命令。 (2) 清理临时文件和缓存 要及时清理临时文件和缓存避免将不必要的文件包含在镜像中。如上述示例中使用 rm -rf /var/lib/apt/lists/* 清理 APT 缓存。 (3) CMD 与 ENTRYPOINT 指令 CMD 为容器提供默认执行命令ENTRYPOINT 配置容器启动时执行的命令。当容器能被使用时CMD 指令作为 ENTRYPOINT 的默认参数。 5.环境变量和参数设置 (1) ENV 与 ARG 的区别 ENV 设置的环境变量在容器运行时持续存在可被容器内的应用程序使用定义的参数还能在镜像构建过程有效用于构建时的参数。 (4) 安全性 避免在 ENV 或 ARG 中设置敏感信息如密码、密钥等若确实需要可以在运行容器时通过环境变量传递。 (5) 网络和端口声明 使用 EXPOSE 指令 - 只声明容器暴露的端口不会进行实际的端口映射。在使用 docker run -p 选项时会把容器中 EXPOSE 声明进行端口映射。 6.缓存利用与清理 (1) 缓存机制 Docker 构建镜像时会利用缓存若某条指令的内容未发生变化会直接使用之前缓存的结果加快构建速度因此将不常变动的指令放前面可充分利用缓存。 (2) 缓存清理 当需要强制重新构建镜像、不使用缓存时可使用 docker build --no-cache 命令。