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

dux2.0支持Wordpressseo公司广州

dux2.0支持Wordpress,seo公司广州,网站排名怎么上去,杭州手机网站制作公司哪家好Dockerfile 基础语法 我们通过编写dockerfile,将每一层要做的事情使用语法固定下来,之后运行指令就可以通过docker来制作自己的镜像了。 构建镜像的指令:docker build /path -t imageName:tag 注意,docker build后的path必须是dockerfile…

Dockerfile

基础语法

我们通过编写dockerfile,将每一层要做的事情使用语法固定下来,之后运行指令就可以通过docker来制作自己的镜像了。

构建镜像的指令:docker build /path -t imageName:tag

注意,docker build后的path必须是dockerfile文件所在的目录。

制作镜像的过程中的输出信息挺详细的,如果我们编写的dockerfile文件有误,可以直接通过输出判断,并对dockerfile文件进行更改。

指令

说明

示例

FROM

指定基础镜像

FROM centos:6

ENV

设置环境变量,可在后面指令使用

ENV key value

COPY

拷贝本地文件到镜像的指定目录

COPY ./xx.jar /tmp/app.jar

RUN

执行Linux的shell命令,一般是安装过程的命令

RUN yum install gcc

EXPOSE

指定容器运行时监听的端口,是给镜像使用者看的

EXPOSE 8080

ENTRYPOINT

镜像中应用的启动命令,容器运行时调用

ENTRYPOINT java -jar xx.jar

dockerfile编写模板

Go程序Dockerfile模板【两阶段构建】

# 构建:使用golang:1.21版本
FROM golang:1.21 as build# 容器环境变量添加 容器内部的环境变量 key value的形式
ENV GO111MODULE=on \GOPROXY=https://goproxy.cn,direct \CGO_ENABLED=0 \GOOS=linux \GOARCH=amd64#移动到工作目录,没有该目录会自动创建
WORKDIR /go/release# 把全部文件复制到/go/release目录
COPY . .# 编译: 把main.go编译为可执行的二进制文件, 并命名为app
RUN go build -o dijiexiaApp# 运行: 使用scratch作为基础镜像
FROM alpine as prod# 在build阶段, 复制时区配置到镜像的/etc/localtime
COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 在build阶段, 复制./app目录下的可执行二进制文件到当前目录
COPY --from=build /go/release/dijiexiaApp /# 在build阶段, 复制yaml配置文件到当前目录, 此处需要注意调用该配置文件时使用的相对路径, main.go在当前目录下执行
# 一些配置文件不需要在容器内部进行创建,回来直接挂载到容器外部即可,
COPY --from=build /go/release/conf /conf
COPY --from=build /go/release/app/casbin/model.conf /app/casbin/EXPOSE 8000
EXPOSE 8001# 启动服务 CMD是运行镜像时,执行的命令
ENTRYPOINT ["./dijiexiaApp","./conf/develop.yaml"]

Java程序Dockerfile模板

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 设定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 指定项目监听的端口
EXPOSE 8080
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

docker compose

一般我们的项目通常包含多个容器,比如业务项目容器、MySQL容器、Redis容器、RabbitMQ容器。如果我们仍然采用手动部署的方式,是比较麻烦的。我们需要逐个将容器启动,并且需要记录容器的启动顺序,因为容器之间可能存在依赖的关系。复杂一点的话,我们还需要将各个容器加入到一个网络中,方便通过容器名进行通信。而通过Docker Compose可以帮助我们实现多个相互关联容器的快速部署。

docekr-compose.yaml文件的编写语法大致和通过命令启动容器的格式一致,以下是它们之间的关系

docker run 参数

docker compose 指令

说明

--name

container_name

容器名称

-p

ports

端口映射

-e

environment

环境变量

-v

volumes

数据卷配置

--network

networks

网络

 docker-compose编写模板

version: "1.1"services:mysql:image: mysqlcontainer_name: diJieXiaMysqlports:- "3710:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- /opt/dijiexia_mysql/conf:/etc/mysql/conf.d #目录挂载MySQL的配置文件- /opt/dijiexia_mysql/data:/var/lib/mysql #目录挂载MySQL的数据-  /opt/dijiexia_mysql/init:/docker-entrypoint-initdb.d #初始化数据库脚本挂载点,MySQL容器首次启动时,会自动执行.sh,.sql文件networks:- diJieXiaredis:image: rediscontainer_name: diJieXiaRedisports:- "3711:6379"command: ["redis-server", "--requirepass", "123456"]networks:- diJieXia#通过重新构建镜像的方式获取Go镜像,相当于docker build .dijiexia:build:context: .dockerfile: Dockerfilecontainer_name: diJieXiaProjectports:- "8001:8001"- "8000:8000"networks:- diJieXiadepends_on:- mysql- redisnginx:image: nginxcontainer_name: diJieXiaNginxports:- "3712:80"volumes:- /opt/dijiexia_front/nginx/conf/nginx.conf:/etc/nginx/nginx.conf #将nginx的配置文件nginx.conf挂载出来- /opt/dijiexia_front/nginx/conf.d:/etc/nginx/conf.d #挂载nginx的配置文件夹,通过在nginx.conf中的设置,会自动读取给目录下以.conf结尾的文件- /opt/dijiexia_front/nginx/html:/usr/share/nginx/html #将加载静态页面的目录挂载出来networks:- diJieXia
networks:diJieXia:name: diJieXia111

简单的depends_on存在的问题:

在本版本的docker-compose.yaml文件的模板中,会有一个问题:我们的Go程序会启动失败,原因是因为Go程序所依赖的MySQL容器和Redis容器没有完全启动成功,导致Go程序获取MySQL或Redis连接的时候失败。

虽然在yaml中,我们在yaml文件中设置了depends_on,让MySQL容器、Redis容器先于GO业务程序启动。但是可能存在我们的MySQL容器和Redis容器还未启动完毕,而我们的Go程序已经启动了,从而导致我们的Go程序启动失败。理想情况下是MySQL和Redis容器启动完毕并且保证可用后,我们的Go程序才开始启动。因此,在启动Go程序之前,需要对MySQL和Redis做健康检查,确保MySQL和Redis已经启动成功了。如果MySQL或Redis启动失败了,我们还需要将启动失败的容器进行重启或者选择忽略。

为此,DockerCompose提供了两种机制

condition说明:

为此,Docker中提供了一种长定义的模式,方便我们对容器编排的过程做更加精准的设置。

  • condition: service_started
  • condition: service_healthy
  • condition: service_completed_successfully

如果condition设置为service_started,只表示在该容器在所有依赖服务后启动,不保证依赖容器的可用性。

如果condition设置为service_healthy,表示等待依赖服务的健康状态后在启动相关服务。其中健康状态通常是在同期中运行健康检查命令或脚本来确定的。例如,检查HTTP响应或数据连接等。

如果condition设置为service_completed_successfully,表示依赖服务成功完成后(即退出状态码为0),才会启动相关服务,通常用于数据库迁移、初始化脚本等。

required说明:

在长定义语法中,required字段用于指定依赖服务是否是必需的。它控制了当依赖服务未启动或不可用时的行为。

  • 当 required 设置为 true(默认值),如果依赖服务未启动或不可用,Compose 将阻止启动相关的服务,并显示警告信息。

  • 当 required 设置为 false,Compose 仍会显示警告信息,但不会阻止启动相关的服务。相当于它是可选的,即使依赖服务未启动或不可用,相关服务仍会尝试启动。

version: "1.1"services:mysql:image: mysqlcontainer_name: diJieXiaMysqlports:- "3710:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- /opt/dijiexia_mysql/conf:/etc/mysql/conf.d #目录挂载MySQL的配置文件- /opt/dijiexia_mysql/data:/var/lib/mysql #目录挂载MySQL的数据- /opt/dijiexia_mysql/init:/docker-entrypoint-initdb.d #初始化数据库脚本挂载点,MySQL容器首次启动时,会自动执行.sh,.sql文件healthcheck:test: [ "CMD","mysqladmin","ping","-h","localhost" ]interval: 30stimeout: 3sretries: 3networks:- diJieXiaredis:image: rediscontainer_name: diJieXiaRedisports:- "3711:6379"volumes:- /opt/dijiexia_redis/conf/redis.conf:/usr/local/etc/redis/redis.conf- /opt/dijiexia_redis/data:/datacommand: [ "redis-server", "--requirepass", "123456" ]healthcheck:test: [ "CMD","redis-cli","ping" ]interval: 30stimeout: 3sretries: 3networks:- diJieXia#通过重新构建镜像的方式获取Go镜像,相当于docker build .dijiexia:build:context: .dockerfile: Dockerfilecontainer_name: diJieXiaProjectports:- "8001:8001"- "8000:8000"networks:- diJieXiavolumes:- ./conf:/confcommand:- RUN apk add --no-cache curlhealthcheck:test: [ "CMD","curl","-f","http://localhost:8000/api/v1/admin/captcha" ]interval: 30stimeout: 5sretries: 3depends_on:mysql:condition: service_healthyrequired: trueredis:condition: service_healthyrequired: truenginx:image: nginxcontainer_name: diJieXiaNginxports:- "3712:80"volumes:- /opt/dijiexia_front/nginx/conf/nginx.conf:/etc/nginx/nginx.conf #将nginx的配置文件nginx.conf挂载出来- /opt/dijiexia_front/nginx/conf.d:/etc/nginx/conf.d #挂载nginx的配置文件夹,通过在nginx.conf中的设置,会自动读取给目录下以.conf结尾的文件- /opt/dijiexia_front/nginx/html:/usr/share/nginx/html #将加载静态页面的目录挂载出来depends_on:dijiexia:condition: service_healthyrequired: falsenetworks:- diJieXianetworks:diJieXia:name: diJieXia111
volumes:diJieXiaRedisConf: { }diJieXiaRedisData: { }

当我再次使用docker compose up -d 运行的时候,会发现先启动MySQL、Redis容器,等到30秒之后,进行一次健康检测,发现MySQL和Redis都处于健康状态,之后才启动Project容器,等到Project容器健康检测后,最后启动Nginx容器。

通过condition和required参数,我们可以更加精准地控制容器编排的顺序。

http://www.15wanjia.com/news/54773.html

相关文章:

  • dw做简单小说网站外贸seo网站
  • 西安网站制作一般多少钱网络营销模式
  • 教育品牌网站建设seo服务外包报价
  • wordpress 登陆原理结构优化
  • 阿里巴巴免费做网站吗跨境电商seo是什么意思
  • 怎样学习做网站慈溪seo排名
  • Wordpress球队网站营销渠道的三个类型
  • 网站建设带数据库模板公司员工培训方案
  • 中国建设银行淮南分行网站网站建设公司推荐
  • 网站建设教程ppt怎么创建一个属于自己的网站
  • 知名的网站开发公司seo优化的价格
  • 哪个工业园区信息化网站做的好全网优化推广
  • 聊城大型门户网站建设哪里可以接广告
  • 做汽车保养的网站上百度q3财报2022
  • 五百亿网站建设网站开发公司
  • 电商网站开发文档网站推广引流
  • 北京公司网站建设费用产品seo怎么优化
  • 泰州网站建设服务好360免费建站系统
  • 做网站怎么注册域名网络服务商电话
  • 网站建设和app哪个好百度联盟广告点击一次收益
  • 武汉建设工程价格信息网搜索引擎优化的具体操作
  • 网站 如何备案百度收录怎么做
  • 北京网站开发怎么做郑州网站建设专业乐云seo
  • W做网站怎么建立企业网站免费的
  • 外贸网站推广教程微信运营方案
  • 策划网站做营销推广山东今日热搜
  • 燕郊做网站找谁成都网站制作费用
  • 建站宝盒下载湖南seo推广多少钱
  • 门户网站推荐企业网站营销的优缺点
  • 深圳餐饮公司网站制作设计素材网站