农业生态园电商网站建设,手机网站字体自适应,手机怎么安装网站程序,wordpress获取用户昵称dockerfile#xff1a;创建镜像#xff0c;创建自定义的镜像。包括配置文件#xff0c;挂载点#xff0c;对外暴露的端口。设置环境变量。
docker的创建镜像的方式#xff1a;
1、基于已有镜像进行创建。根据官方提供的镜像源#xff0c;创建镜像#xff0c;然后拉起容…dockerfile创建镜像创建自定义的镜像。包括配置文件挂载点对外暴露的端口。设置环境变量。
docker的创建镜像的方式
1、基于已有镜像进行创建。根据官方提供的镜像源创建镜像然后拉起容器。是一个白板只能提供基础的功能扩展性的功能还是需要自定义进入容器进行操作)
1首先启动一个镜像在容器里做修改 docker run -it --name web centos:7 /bin/bash #启动容器 yum install -y epel-release #安装epel源 yum install -y nginx #安装nginx yum install net-tools #安装tools工具 nginx #启动服务 netstat -natp |grep 80 #查看端口是否开启 docker ps -a #查看容器ID 2然后将修改后的容器提交为新的镜像需要使用该容器的ID号创建新镜像 docker commit -m new nginx -a xxxx 容器id nginx:centos7 #常用选项: -m 指定说明信息; -a 指定作者信息; -p 生成过程中停止容器的运行。 c7f4bc905c29 原容器ID。 nginx:centos 生成新的镜像名称。 docker images #查看生成的新镜像 docker run -itd nginx:centos7 bash #使用新的镜像创建容器 docker ps -a #查看容器状态 docker exec -it 容器id bash #进入容器 nginx #启动nginx服务 netstat -natp |grep 80 #查看80端口是否开启
2、基于模版进行创建。
通过导入操作系统模板文件可以生成镜像模板可以从OPENVZ 开源项目下载下载地址为 openvz.org/ Download/template/precreated
模板里面就是使用docker export 命令导出的容器文件 #下载模板 wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz #导入为镜像两种方法 cat debian-7.0-x86-minimal.tar.gz | docker import - debian:test #方法一 docker import debian-7.0-x86-minimal.tar.gz -- debian:test #方法二 #查看镜像 docker images #使用导入的镜像创建容器 docker run -itd debian:test bash docker ps -a
3、 dockerfile
联合文件系统UnionFS)docker镜像的基础。 镜像通过分层来进行集成 特性一次同时加载多个文件系统但是从用户来看就是一个文件系统。docker镜像实际上就是由一层一层的文件系统组成这种层级的文件系统就是UnionFS。每一层都是layers,每一层都包含文件系统的一部分这些层次叠加在一起最终形成的就是rootfs. bootfs宿主机提供的内核和引导程序,主要包含bootloader和kernelbootloader主 要是引导加载kernelLinux刚启动时会加载bootfs文件系统。 rootfs就是容器的操作系统在dockerfile中我们可以自己指定。包含的就是典型Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版比如Ubuntu, Centos等。
rootfs是多个基础镜像和应用镜像结合起来的只读层。镜像实际上就是一个只读文件。容器基于镜像实例运行起来之后容器变成可读可写层。 在dockerfile当中每创建一个指定都是一个镜像层。镜像层会被缓存和复用。 1-6 1-4失败 1-4将直接完成继续运行5-6 一旦有一层镜像失败那么所有的镜像层都会失败。镜像也不会创建。 镜像层是不可变的你在某一层当中添加一个新的命令但是下一层删除了指令镜像中基于这个命令创建的文件依然存在但是在容器中看不见。 dockerfile的核心用户个性化定制docker的镜像。
dockerfile的结构
1、基础镜像信息 2、维护者信息 3、镜像的操作指令 4、容器启动时执行的命令。
nginx定义好了容器执行的命令/bin/bash覆盖了容器内的标准输出。
dockerfile的语法
FROM:指定基础镜像信息。指定容器的操作系统。MAINTAINER:指定维护者信息可有可无RUN在基础的镜像上执行的命令每一个run就是一层分层越多镜像越大。ENTRYPOINT设置容器运行是的默认命令容器内部运行的主程序。
ENTRYPOINT:
ENTRYPOINT [要运行的程序参数1参数2]
设定容器启动时第一个运行的命令及其参数。
两种格式 exec格式数值格式ENTRYPOINT [“命令”“选项”“参数”] shell格式ENTRYPOINT 命令 选项 参数 复制代码
CMD:指定容器运行时的默认命令docker run /bin/bash后面加了其他的命令。cmd的指令将会被覆盖。 两种格式 exec形式CMD [“要运行的程序”“参数1”, “参数2”] shell形式: CMD 命令 参数1 参数2 复制代码
EXPOSE暴露端口指定容器的运行端口
指定新镜像加载到Docker 时要开启的端口。
用于暴露端口否则即使做了端口映射外部也找不到。
ENV设置环境变量环境变量可以被RUN命令使用声明容器运行需要的环境变量
ADD复制解压。解压不支持.zip和.rar tar.gz tar.bz2支持url地址解压和复制解压COPY复制文件不能解压而且只能复制本地文件。文件要和dockerfile在一个目录。官方推荐复制用copyVOLUME创建一个容器内的挂载点既可以为宿主机挂载也可以供容器挂载。USER:设置运行镜像时使用的用户或者UID可以不加WORKDIR:为后续指令设置的工作目录。
ONBUILD:这个镜像可以被其他镜像引用需要这个命令。
ARG:传参用于创建容器时传递参数。ENV用于容器运行时设置环境变量。
CMD和ENTRYPOINT的区别
都是可以作为容器启动时的默认命令。 区别 1、cmd可以把参数传给ENTRYPOINT。 2、多个entrypoint和多个cmd只会运行最后一个一个dockerfile当中只会有一个entrypoint和cmd 3、entryponit的指令不会被覆盖CMD的指令如果在docker run的后面加上输出会被覆盖。
4、entryponit和cmd的指令在容器启动时执行都会成为容器的主进程。主进程负责接收信号处理容器的生命周期主进程退出容器也将终止运行。
RUN命令的优化
主要是减少镜像的层数把多个run命名写在一块。 符号 RUN yum-y install nginx make -j 4 make install 前一个命令执行成功才会执行下一个命令。 符号 RUN yum-y install nginx ; make -j 4 ; make install 不管前一个命令是否成功后面的命令都会执行。 ||: RUN yum-y install nginx || make -j 4 如果前面的命令执行失败才会执行后面的操作
copy和add区别
copy和add都可以把本地文件复制到镜像中但是官方推荐如果是复制使用copy. 区别 ADD可以解压如果是一个压缩文件add在复制之后会自动解压。tar.gz和tar.bz2可以支持URL下载源文件支持下载但是不能解压。通过URL拷贝的文件无法自动解压。
copy只能复制不能解压而且只能是本地文件不支持URL路径。
Dockfile源码编译apache
下载apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2
vim Dockerfile #基础镜像的指定 FROM centos:7 #作者信息 MAINTAINER this is my my apache xx-2023-11-24 RUN yum install -y gcc gcc-c make pcre pcre-devel expat-devel perl ADD apr-1.6.2.tar.gz /opt/ ADD apr-util-1.6.0.tar.gz /opt/ ADD httpd-2.4.29.tar.bz2 /opt/ RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util \ cd /opt/httpd-2.4.29/ \ ./configure --prefix/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi \ make -j 4 make install EXPOSE 80 CMD [/usr/local/httpd/bin/apachectl,-D,FOREGRUOND] docker build -t apache:centos .
注意容器里的服务必须为前台启动程序否则会容器启动又关闭无法正常提供服务。
所以在进行容器提供服务时需要了解各种服务的前台运行若该服务没有前台运行选项则需要在容器中挂一个占用前台的运行指令避免容器开启后有关闭。
本次apache的前台启动命令为apachectl -D FOREGROUND 镜像容量过大的解决方案
基础镜像尽量使用轻量级最小化的镜像。Dockerfile中尽量把RUN指令合并在一起减少镜像的层数因为每一个RUN指令就是一个镜像层。多级构建拿Dockerfile构建好的镜像再构建一次。
vim Dockerfile #基层镜像 FROM centos:7 AS first #镜像作者信息描述 MAINTAINER this is apache image yh 2022-11-23 #指定的Linu执行脚本 RUN yum -y install gcc gcc-c make pcre pcre-devel expat-devel perl #将源码编译的安装包安放到容器中并进行解压 ADD apr-1.6.2.tar.gz /opt/ ADD apr-util-1.6.0.tar.gz /opt/ ADD httpd-2.4.29.tar.bz2 /opt/ #进行源码编译安装 RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util cd /opt/httpd-2.4.29 ./configure --prefix/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi make -j 4 make install #二阶段构建 FROM centos:7 #将一阶段的已安装好的包安防到二阶端中并舍弃一阶段的其他无用资源 COPY --fromfirst /usr/local/httpd /usr/local/httpd #安装apache运行所需的环境依赖包不再安装源码编译所需的依赖包 RUN yum install -y pcre pcre-devel expat-devel perl EXPOSE 80 ENTRYPOINT [/usr/local/httpd/bin/apachectl,-D,FOREGROUND] docker build -t apache2:centos7 .
vim Dockerfile
Dockfile源码编译nginx
下载nginx-1.22.0.tar.gz
vim Dockerfile
FROM centos:7 MAINTAINER this is nginx yzl ADD nginx-1.22.0.tar.gz /usr/local/ RUN yum install -y pcre-devel zlib-devel openssh-devel gcc gcc-c make ncurses ncurses-devel bison cmake gd \ libjpeg libjpeg-devel \ libpng libpng-devel \ freetype freetype-devel \ libxml2 libxml2-devel \ zlib zlib-devel \ curl curl-devel \ openssl openssl-devel RUN useradd -M -s /sbin/nologin nginx \ cd /usr/local/nginx-1.22.0 \ ./configure \ --prefix/usr/local/nginx \ --usernginx \ --groupnginx \ --with-http_stub_status_module make make install EXPOSE 80 CMD [/usr/local/nginx/sbin/nginx, -g,daemon off;]
创建镜像
docker build -t centos7:nginx .
运行容器
docker run -d --name nginx -p 8080:80 centos7:nginx
访问 20.0.0.70:8080