做网站页面设计报价/产品网络推广怎样做

做网站页面设计报价,产品网络推广怎样做,独立站谷歌seo,织梦网站制作教程docker 镜像操作搜索镜像拉取镜像查看镜像删除镜像 容器操作!查看容器运行容器run命令详细介绍 启动容器停止容器重启容器查看容器状态查看容器日志删除容器进入容器 保存镜像提交保存加载 分享社区登录命名推送 docker存储目录挂载卷映射查看所有容器卷创建容器卷查看容器卷详…

docker

  • 镜像操作
    • 搜索镜像
    • 拉取镜像
    • 查看镜像
    • 删除镜像
  • 容器操作!
    • 查看容器
    • 运行容器
      • run命令详细介绍
    • 启动容器
    • 停止容器
    • 重启容器
    • 查看容器状态
    • 查看容器日志
    • 删除容器
    • 进入容器
  • 保存镜像
    • 提交
    • 保存
    • 加载
  • 分享社区
    • 登录
    • 命名
    • 推送
  • docker存储
    • 目录挂载
    • 卷映射
      • 查看所有容器卷
      • 创建容器卷
      • 查看容器卷详情
  • docker网络
    • 容器间通信-通过主机访问
    • 容器间通信-通过ip访问
    • 容器间通信-通过域名访问
      • 创建自定义网络
      • 查看网络列表
      • 示例
  • docker实现Redis主从复制集群
  • docker compose
    • 示例
    • docker compose 增量更新
    • docker compos 下线
  • docker file
    • docker file 常见指令
    • 示例

镜像操作

本次操作以nginx为例,需要注意nginx容器默认配置文件目录所在位置/etc/nginx 下 欢迎页所在位置/usr/share/nginx/html 下 可以在docker hub官网中查询

搜索镜像

docker search 

示例docker search nginx 当然这里搜索镜像大概率是无法搜索到的,因为docker search命令访问的是docker hub 而docker hub在国内是无法访问的。在这里我们需要区别一个概念,就是我们之前安装docker的时候配置的镜像仓库,我们已经在/etc/docker/daemon.json中配置了如下,为什么这里的docker search任然无法使用?

"registry-mirrors": ["https://mirror.ccs.tencentyun.com","https://docker.m.daocloud.io"]

参考deepseek给出的答案
在这里插入图片描述
综上:除了使用梯子否则我们是无法访问到docker hub的。

拉取镜像

docker pull

示例:docker pull nginx:1.26.0docker pull nginx
拉取镜像实际是由镜像名称+版本号组成,如果没有版本号,则默认拉取最新的。当我们不知道要拉取哪个版本的时候,需要去[docker hub](https://registry.hub.docker.com/上去查询,或者使用上面的docker search 命令来查询,可惜的是docker hub在国内无法访问,需要梯子。

查看镜像

docker images
# 或者
docker images ls

删除镜像

docker rmi

例如下图中两个mysql,如果我们要删除则分别使用命令docker rmi mysql:latest docker rmi mysql:5.7 或者使用每个镜像的唯一ID也就是下图中的IMAGE ID来删除 docker rmi 5568fddd4f66 docker rmi aa803eda0f25 当然这里删除镜像的前提是没有使用该镜像生成任何容器,如果一旦生成了容器,则需要先把容器删除才能删除镜像。
在这里插入图片描述
如果容器没有删除就删除镜像,则会报如下错误
在这里插入图片描述

容器操作!

查看容器

docker ps  #查看运行中的容器
docker ps  -a #查看所有容器,包括未运行的

运行容器

docker run

根据镜像生成容器并运行,我们可以使用help查看该命令的使用方法,如下图,分为 docker run [options] IMAGE [command] [arg…]

  • options 参数项,启动一个容器需要用到的参数项都在下图中Options中所示
  • IMAGE 镜像
  • command 命令
  • arg 参数

在这里插入图片描述
一般来说镜像后面的启动命令和参数我们不用写,因为每个镜像都有自己的启动命令和参数,是镜像自带的,除非我们要改变镜像的默认行为。最简单的启动方式就是 docker run 镜像名 例如 docker run ngixn 这里的docker run nginx 默认启动的是最新版nginx镜像,如果我们没有下载最新版,这个命令会自动下载最新版nginx然后运行。由于我们之前已经下载过1.26.0版本的nginx,因此我们需要使用 docker run nginx:1.26.0 或者 docker run 镜像ID 运行效果如下,可以看到此时控制台处于运行状态,我们一旦结束这个命令窗口则运行的容器就会停止,因此一般情况我们会让他后台运行
在这里插入图片描述
当我们把这个运行的容器退出后,使用命令docker ps -a 查看所有已经运行的容器命令,如下图:
在这里插入图片描述

我们来解释一下这个打印的内容

  • container id 容器id
  • image 镜像
  • command 镜像启动的默认命令
  • created 创建时间
  • status 状态 目前是exited 已退出
  • ports 端口映射状况
  • names 名称,不指定名称的时候会自动生成一个随机的名字

run命令详细介绍

上面的run命令我们只是简单的使用,从镜像启动了一个容器,那么同时也存在很多问题,例如控制台关闭就容器停止,例如无法访问等。现在我们想让容器后台启动并且可以访问,可以使用如下命令dcoker run -d --name nginx -p 80:80 nginx:1.26.0 启动之后如下图,我们分别看一下这些内容,其他的在上面都已经解释了,主要看一下这个port,这个port的就是说主机的80端口映射到容器的80端口,表示任何IP访问80端口就映射到容器的80端口。
在这里插入图片描述
那么这时候就存在一个问题,假如我们又启动了一个nginx的容器,那么请问还能用同样的命令来启动吗?启动之后80端口是映射到哪里了呢?如下图:
在这里插入图片描述
从这里我们可以看出来,每个容器都有自己独立的运行环境,因此每个容器都有自己独立的80端口,然而主机自己只有一个80端口,已经映射给了容器1的80端口,因此无法再映射到容器2的80端口,因此只能让主机的其他端口去映射到容器2的80端口。

启动容器

docker start 容器名称或容器ID

示例:使用容器名称的方式启动docker start suspicious_black 或者使用容器id的方式启动 docker start b71b196ccef0 或者只写容器ID的前三位,能与其他容器ID区分开即可

停止容器

docker stop 容器名称或容器ID

示例:使用容器名称的方式启动docker stop suspicious_black 或者使用容器id的方式启动 docker stop b71b196ccef0 或者只写容器ID的前三位,能与其他容器ID区分开即可

重启容器

docker restart 容器名称或容器ID

示例:使用容器名称的方式启动docker restart suspicious_black 或者使用容器id的方式启动 docker restart b71b196ccef0 或者只写容器ID的前三位,能与其他容器ID区分开即可

查看容器状态

docker stats 容器名称或容器ID

示例:使用docker stats b71(b71是上面我们nginx的容器id的前三位)命令查看后如下图,这里显示了该容器的cpu 内存 io 等占用情况,并且是实时的
在这里插入图片描述

查看容器日志

docker logs 容器名称或容器ID

示例:使用docker logs b71 b71是上面我们nginx的容器id的前三位)命令查看后如下图,这里显示该容器从启动至今的所有日志信息。
在这里插入图片描述

删除容器

docker rm 容器名称或容器ID

示例:使用docker rm b71(只能删除未在运行中的容器) 强制删除使用 docker rm -f b71 -f 的意思就是 force 武力有力的意思
当我们想要批量删除的时候可以使用 docker rm $(docker ps -aq) docker ps -aq的意思就是返回当前所有容器的ID,$(docker ps -aq)就是将该命令的结果作为参数给docker rm
在这里插入图片描述

进入容器

docker exec

保存镜像

提交

docker commit 

示例:docker commit -a "作者" -m "修改欢迎页" nginx newnginx:v1.0.1 这个命令参考下图意思就是将nginx容器(这里的nginx是我们之前启动容器时给起的名字,换成容器ID也可以)提交为一个新的镜像叫newnginx 版本号是v1.0.1 同时指定了作者和提交信息
在这里插入图片描述
我们使用-- help命令查看一下这个命令是如何使用的,我们可以看到这个命令的描述信息: 创建一个新镜像从一个改变的容器。命令参数有-a 作者信息 -c 容器改变的信息列表 -m 提交信息 -p 暂停容器的运行。
下面我们把我们刚才安装的nginx容器的index页面修改一下,然后将该容器重新保存为一个新镜像并发布:

  • 进入容器docker exec -it nginx /bin/bash

  • 进入容器的nginx的index页面 cd /usr/share/nginx/html/ (我们怎么知道nginx容器的欢迎页面在哪呢?还是要去docker hub的官网上找) 这是默认的nginx欢迎页面
    在这里插入图片描述

  • 修改index页面 echo "<h1>hello docker I'm Iron man</h1>" > index.html(由于新容器中没有vi命令,因此我们直接修改这个文件内容) 给欢迎页面打印一句话 你好docker 我是钢铁侠
    在这里插入图片描述

  • 使用docker commit 来提交这个容器为一个新的镜像docker commit -a "iron man" -m "202503提交" nginx newnginx:v1
    在这里插入图片描述

  • 使用docker images 查看新生成的镜像,从下图我们可以看到已经有了一个新的镜像叫newnginx 版本tag是v1
    在这里插入图片描述

保存

docker save

在上面的步骤中我们已经将这个nginx容器提交成了一个新的镜像,现在我们需要将这个镜像打包并分享给其他人来用,那么就首先把这个镜像打包,使用docker save --help 查看命令用法,只有一个-o 的参数,这个参数是指定输出为一个tar文件或一个路径下的tar文件
在这里插入图片描述
我们使用docker save -o newnginx.tar newnginx:v1命令来将这个镜像打成一个tar包,执行完这个命令会在当前目录下生成一个tar包,我们就可以将这个tar包传给其他人来使用,也就是下面的加载

加载

docker load

在上面的示例中我们已经将容器提交为一个新的镜像,并且将该镜像保存为一个tar包,现在我们把tar包发送给一个新的docker环境中,在新的docker环境中去加载这个tar包并生成镜像,然后运行该镜像生成容器并访问,如果显示的是我们修改过的欢迎页,则说明成功。
我们在新的机器或docker环境中,或者将现有机器上的镜像和容器都删掉,使用docker load --help 查看该命令的用法
在这里插入图片描述
有两个参数 -i 指定从哪个路径加载哪个tar文件,我们使用docker load -i newnginx.tar来加载刚才的tar包,然后使用docker images 查看从刚才的tar包里加载到的镜像,然后用docker run -d --name hellonginx -p 80:80 newnginx:v1 来指定后台运行端口映射命名为hellonginx运行镜像,用docker ps 来查看容器
在这里插入图片描述

分享社区

在上面的例子中我们通过分享文件的方式来将镜像分享给其他人使用,那么我们如果想将镜像推送至社区让大家都可以docker pull 的方式来下载使用该如何做呢?

登录

  • 这是docker hub 的官网,我们可以在这里登录和注册,
    在这里插入图片描述
  • 然后在命令行窗口中登录,使用docker login命令登录,然后输入用户名和密码,显示login succeeded 表示登录成功,国内登录应该是链接超时。
    在这里插入图片描述

命名

docker tag 原镜像 目标镜像

在这里插入图片描述
使用docker tag newnginx:v1 用户名/新名字:版本号 再使用docker images 这时就有两个镜像,但是它们的镜像ID是一样的,接下来就可以用docker push 将这个新镜像推送到docker hub的个人仓库中

推送

docker push

docker存储

目录挂载,数据卷等

目录挂载

docker run -v /usr/local/nginx/conf:/etc/nginx/conf nginx:1.26.0

示例:

  • 首先删除所有容器docker rm $(docker ps -aq)
  • 然后删除nginx镜像 docker rmi 镜像ID
  • 然后重新从pull一个新的nginx镜像docker pull nginx:1.26.0
  • 然后使用命令运行镜像生成容器docker run -v /usr/local/nginx/conf:/etc/nginx/conf -p 80:80 -d --name nginx:1.26.0 重点解释这里的-v参数 -v /usr/local/nginx/conf:/etc/nginx/conf 的意思就是将本机的/usr/local/nginx/conf目录映射为容器的/etc/nginx/conf目录由于nginx容器启动时我们将nginx的配置文件目录映射为本机的目录,而此时我们并没有这个目录,因此run命令运行时会自动创建该目录,而新建出来的目录是空的,因此这个容器的启动必然是失败的,我们可以用docker ps -adocker logs 容器ID 来查看
  • 启动第一个80端口映射在这里插入图片描述
  • 启动第二个81端口映射在这里插入图片描述
  • 启动第三个挂载目录的82端口映射
    在这里插入图片描述
  • docker ps -a查看三个容器状况
    在这里插入图片描述
    那么如何让这个82端口映射的nginx正常启动呢?第一种方法是可以将nginx的配置文件上传到本机的/usr/local/nginx/conf ,同时需要注意上传的nginx配置文件内容是否正确,否则会出现404 index页面,因为容器的默认index页面目录在/usr/share/nginx/html下,而非容器的nginx配置的欢迎页在conf文件夹同级的html文件夹内。第二种方法就是下一节的卷映射,何为卷映射?就是将容器内原本存在的文件映射到主机目录中
  • 多个目录映射
    docker run -d -p 82:80 \-v /usr/local/nginx/conf:/etc/nginx \-v /your/local/html:/usr/share/nginx/html \  # 新增挂载--name nginx82 nginx:1.26.0
    

卷映射

  • 卷映射与目录挂载的区别是
    • 卷映射命令docker run -v 文件夹:/etc/nginx .... 以nginx为例完整的卷配置文件映射命令为docker run -v dc_ng_conf:/etc/nginx -d -p 83:80 --name nginx83 nginx:1.26.0
    • 目录挂载命令docker run -v /usr/local/nginx/conf:/etc/nginx ...
    • 区别在于卷映射本机目录仅写一个目录名称(文件夹名称)即可,而目录挂载是需要一个完整的目录,也就是说核心就是目录挂载比卷挂载多了一个/
  • 如何找到卷映射目录?
    • 当我们使用卷映射时只写了一个文件夹的名字,该文件夹会自动帮我们创建,那么这个文件夹在哪呢?这个位置docker统一放在了/var/lib/docker/volumes/<volume-name>

下面我们使用挂载目录和挂载容器卷的两种方式来启动一个映射83端口的nginxdocker run -v /usr/local/nginx/html:/usr/share/nginx/html -v dc_ng_conf:/etc/nginx -d -p 83:80 --name nginx83 nginx:1.26.0 我们将nginx的欢迎页用目录挂载的方式映射到本机的/usr/local/nginx/html文件夹下,由于该文件夹是空的,因此我们使用touch index.html命令来创建一个欢迎页,用echo "你好欢迎来到83号nginx" >> index.html 命令来给这个文件写一句话,然后访问IP:83 来访问这个nginx,欢迎页显示如下:
在这里插入图片描述
然后我们去找nginx的配置文件,使用命令cd /var/lib/docker/volumes看到这个文件夹内有个文件夹叫dc_ng_conf 然后pwd 命令查看当前目录及目录内的文件,如下图我们可以看到容易将配置文件nginx.conf映射到该文件夹内
在这里插入图片描述
目录挂载初始的时候是空的,容器卷挂载初始的时候是以容器内的文件为准,后面不论是在容器内修改还是容器外修改都是一样的

查看所有容器卷

docker volume ls

创建容器卷

docker volume create  myvs # 自定义容器卷名称

查看容器卷详情

docker volume inspect myvs 

下图是容器卷操作的相关命令,与network基本一致
在这里插入图片描述

在这里插入图片描述
此时无论我们是否删除这个容器,它的数据依然存在,下次我们还可以用同样的目录启动容器,那么就相当于是恢复了之前的容器。

docker网络

容器间通信-通过主机访问

  • 我们现在清除所有容器,然后重新使用命令新建两个容器
    • docker run -d -p 80:80 --name nginx80 nginx1.26.0 运行nginx80容器
    • docker run -d -p 81:80 --name nginx81 nginx1.26.0 运行nginx81容器
  • 然后进入80容器访问81容器
    • docker exec -it nginx80 bash 进入80容器
    • curl 主机ip:81 访问81容器,打印欢迎页面
      在这里插入图片描述
      此时的网络请求是80容器访问了主机的81端口,然后主机81端口映射到了81容器的80端口,然后81容器响应了欢迎页面,这么一来就相当于绕了一圈比较麻烦,那么怎么能直接让容器之间互相通信?

容器间通信-通过ip访问

  • 每一个docker应用在启动的时候都会加入一个docker的默认网络,我们使用ip a命令查看一下
    在这里插入图片描述
  • 我们可以看到,这里有一个docker0的网卡,这个网络是在安装docker的时候就有了,并且它的ip是172.17.0.1,这个ip并不固定,docker每启动的任何一个应用都会加入到这个网络中,并且docker会为每个容器分配它自己的ip,我们可以使用命令docker inspect nginx80 或者 docker container inspect nginx80 来查看这个容器的详细信息,如下图中所示,172.17.0.2是该容器的ip,而172.17.0.1则是它的网关,也就是docker0网卡的ip。在这里插入图片描述
  • 由此我们可以推断出,容器之间既然已经都加入了这个docker0的网络,并且互相有了独立的ip,那么我们应该可以通过他们各自独立的ip能访问对方,此时我们再次测试 docker exec -it nginx80 bash 进入80容器 curl 172.17.0.2:80 访问nginx81容器的ip
    在这里插入图片描述

容器间通信-通过域名访问

docker0 默认不支持主机域名
创建自定义网络,容器名就是稳定域名

docker network --help 查看docker network用法
在这里插入图片描述

  • connect 连接一个容器到网络中
  • create 创建一个网络
  • disconnect 从网络中断开一个容器的链接
  • inspect 显示详细信息在一个或多个网络
  • ls 网络列表
  • prune 删除所有未使用的网络
  • rm 删除一个或多个网络

创建自定义网络

docker network create 自定义名

查看网络列表

docker network ls

示例

  • 删除所有现有容器,因为他们加入的是默认docker0的网络,而docker0不支持主机域名
    • docker rm $(docker ps -aq)
  • 创建自定义网络docker network create mynet
  • 查看创建的网络docker network ls 如下图,我们可以看到有多个网络,第一个桥接网络就是之前默认使用的,而我们自己创建的mynet也是一个桥接网络
    在这里插入图片描述
  • 重新运行两个nginx容器并将其加入我们新建的网络中(通过--network 参数)
    • docker run -d -p 80:80 --name nginx80 --network mynet nginx:1.26.0
    • docker run -d -p 81:80 --name nginx81 --network mynet nginx:1.26.0
  • 使用docker inspect nginx80 查看该容器的细节,我们发现这个容器的网关和ip都变了
    在这里插入图片描述
  • 进入容器中用容器名称作为域名来访问
    • docker exec -it nginx80 bash 进入80容器
    • curl http://nginx81 访问81容器。为啥容器名字就可以作为域名来访问呢?可能是因为在加入网络的时候做了什么处理吧

docker实现Redis主从复制集群

# 主节点启动命令
docker run -d -p 6379:6379 \
> -v /usr/local/redis/data:/bitnami/data \  # 目录挂载
> -e REDIS_REPLICATION_MODE=master \  		# 设置节点为主节点
> -e REDIS_PASSWORD=123456 \  				# 设置密码
> --network mynet --name redis01 \  		# 加入网络
> bitnami/redis								# 非官方镜像,bitnami镜像主从复制集群不需要修改配置文件,而是用设置环境变量的方式
# 从节点启动命令
docker run -d -p 6389:6379 \
> -v /usr/local/redis_slave/data:/bitnami/data \
> -e REDIS_REPLICATION_MODE=slave \		# 设置节点为从节点
> -e REDIS_MASTER_HOST=redis01 \		# 配置主节点域名、网络ip、主机地址
> -e REDIS_MASTER_PORT=6379 \			# 配置主节点端口
> -e REDIS_MASTER_PASSWORD=123456 \     # 配置主节点密码
> -e REDIS_PASSWORD=123456 \			# 设置从节点密码
> --network mynet --name redis02 \		# 加入网络
> bitnami/redis							# 同上

解释:

  • \表示调到下一行继续输入命令
  • -e 表示环境变量 environment的意思
  • -v 目录挂载,将镜像的data目录挂载到本机的/usr/local/redis/data目录,那么我们怎么知道这个镜像的data目录在哪个位置?还是要上docker hub官网找到bitnami/redis这个镜像的官方文档里看
  • 主从复制集群主要是配置REDIS_REPLICATION_MODE参数,然后给从机设置主机地址即可

docker compose

docker compos 的作用就是用来批量管理容器,将我们要部署的容器全部编写到一个yaml文件中,然后使用命令批量执行
在这里插入图片描述

示例

下面我们用docker启动一个博客系统,WordPress,这是一个开源的博客系统,会将博客内容存储到数据库中,因此我们要安装两个容器,一个是WordPress,另一个是数据库

  • 传统方式启动

    #创建网络
    docker network create blog#启动mysql
    docker run -d -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -e MYSQL_DATABASE=wordpress \
    -v mysql-data:/var/lib/mysql \
    -v /app/myconf:/etc/mysql/conf.d \
    --restart always --name mysql \
    --network blog \
    mysql:8.0#启动wordpress
    docker run -d -p 8080:80 \
    -e WORDPRESS_DB_HOST=mysql \
    -e WORDPRESS_DB_USER=root \
    -e WORDPRESS_DB_PASSWORD=123456 \
    -e WORDPRESS_DB_NAME=wordpress \
    -v wordpress:/var/www/html \
    --restart always --name wordpress-app \
    --network blog \
    wordpress:latest
    
    • 首先创建网络blog,让WordPress和数据库容器加入同一个网络,用于互相通信
    • 然后启动mysql,
      • -d 后台启动
      • -p 端口映射3306
      • -e MYSQL_DATABASE=wordpress 容器启动创建默认的数据库
      • -e MYSQL_ROOT_PASSWORD=123456 指定root用户的密码
      • -v mysql-data:/var/lib/mysql 挂载mysql数据存储容器卷
      • v /app/myconf:/etc/mysql/conf.d 挂载mysql配置文件目录 这里注意区分与上面的容器卷的区别
      • --restart always 容器随系统自动启动
      • --name mysql 指定容器名称
      • --network blog 加入指定网络,可以让其他容器用容器名称访问
    • 然后启动WordPress,
      • -d后台启动
      • -p 端口映射到8080
      • -e WORDPRESS_DB_HOST=mysql 指定环境变量数据库为mysql
      • -e WORDPRESS_DB_USER=root 数据库用户root
      • -e WORDPRESS_DB_PASSWORD 数据库密码123456
      • -v wordpress:/var/www/html 容器卷挂载,
      • 然后依次是随机自启,指定容器名称,加入blog网络,使用的镜像
  • 使用docker compose方式启动

    • 编写compose.yml文件

      • namecompose文件的编写根据docker官方文档描述共有6个顶级元素分别是name services networks volumes configs secrets 对应到下面我们编写的compose.yml文件来说就是首先要用name来指定项目名,其次使用services来指定要启动的容器
      • services使用services指定启动的容器,实际上与上面命令启动类似,只不过是将命令中的各个部分持久化到这个文件中用来重复使用。参考 官方文档
        • 在services下面的mysql和wordpress可以任意命名,能区分出来即可,在mysql下面有个container_name指定容器的名称,我们这个任意命名的也可以当做容器名称
        • image指定镜像
        • prots 指定端口映射
        • environment 指定环境变量
        • volumes 指定容器卷或目录映射,如果是容器卷映射,则需要在与services同级的volumes顶级元素下声明容器卷
        • networks 指定加入的网络,如果指定加入的网络,则需要在与services同级的networks的顶级元素下声明网络
        • restart 指定随机器重启
      name: myblog
      services:mysql:container_name: mysqlimage: mysql:8.0ports:- "3306:3306"environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressvolumes:- mysql-data:/var/lib/mysql- /app/myconf:/etc/mysql/conf.drestart: alwaysnetworks:- blogwordpress:image: wordpressports:- "8080:80"environment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_USER: rootWORDPRESS_DB_PASSWORD: 123456WORDPRESS_DB_NAME: wordpressvolumes:- wordpress:/var/www/htmlrestart: alwaysnetworks:- blogdepends_on:- mysqlvolumes:mysql-data:wordpress:networks:blog:
      
    • 运行compose文件 docker compose -f compose.yml up -d 其中-f 表示指定compose文件位置,-d 表示后台启动,至此就可以根据compose来启动容器了。
      在这里插入图片描述

docker compose 增量更新

当我们将上面的compose.yml文件修改了之后,如何让容器重新运行新修改后的内容呢?,还是同样的启动命令 docker compose -f compose.yml up -d 此时docker会重新加载该文件并且判断哪些是修改的内容需要重启的,哪些没有修改的不动。

docker compos 下线

docker compose -f compose.yml down 该命令会移除compose.yml文件中的所有容器,但是并不一会移除容器的映射卷

docker file

当我们用java开发了一个应用并打成jar包后,需要将其发布,那么我们需要将其制作为一个镜像,这个镜像不仅要包含操作系统的相关指令和内容还要包括JDK 应用jar包以及启动命令等,那么该如何制作呢?

docker file 常见指令

参考 官方文档

示例

FROM openjdk:17LABEL author=leifengyangCOPY app.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python、MATLAB和PPT完成数学建模竞赛中的地图绘制

参加数学建模比赛时&#xff0c;很多题目——诸如统计类、数据挖掘类、环保类、建议类的题目总会涉及到地理相关的情景&#xff0c;往往要求我们制作与地图相关的可视化内容。如下图&#xff0c;这是21年亚太赛的那道塞罕坝的题目&#xff0c;期间涉及到温度、降水和森林覆盖率…

DeepSeek R1 本地部署指南 (3) - 更换本地部署模型 Windows/macOS 通用

0.准备 完成 Windows 或 macOS 安装&#xff1a; DeepSeek R1 本地部署指南 (1) - Windows 本地部署-CSDN博客 DeepSeek R1 本地部署指南 (2) - macOS 本地部署-CSDN博客 以下内容 Windows 和 macOS 命令执行相同&#xff1a; Windows 管理员启动&#xff1a;命令提示符 CMD ma…

k8s中service概述(二)NodePort

NodePort 是 Kubernetes 中一种用于对外暴露服务的 Service 类型。它通过在集群的每个节点上开放一个静态端口&#xff08;NodePort&#xff09;&#xff0c;使得外部用户可以通过节点的 IP 地址和该端口访问集群内部的服务。以下是关于 NodePort Service 的详细说明&#xff1…

Linux系统崩溃破案实录

现代计算环境中&#xff0c;系统的稳定性和可靠性至关重要。然而&#xff0c;即使是最优化的系统也可能会由于硬件故障、软件漏洞或配置错误而崩溃。为了解决这一问题&#xff0c;Linux系统提供了强大的内核崩溃转储机制&#xff0c;本文介绍如何收集和分析崩溃日志&#xff0c…

tcping 命令的使用,ping IP 和端口

1. ‌Windows系统安装‌ ‌下载tcping工具‌&#xff1a;根据系统位数&#xff08;32位或64位&#xff09;下载对应的tcping.exe文件。‌安装步骤‌&#xff1a; 将下载的tcping.exe文件复制到C:\Windows\System32目录下。如果下载的是64位版本&#xff0c;需将文件名改为tcpi…

深度学习框架PyTorch——从入门到精通(6.1)自动微分

使用torch.autograd自动微分 张量、函数和计算图计算梯度禁用梯度追踪关于计算图的更多信息张量梯度和雅可比乘积 在训练神经网络时&#xff0c;最常用的算法是反向传播。在该算法中&#xff0c;参数&#xff08;模型权重&#xff09;根据损失函数的梯度相对于给定参数进行调整…

阶跃星辰开源300亿参数视频模型Step-Video-TI2V:运动可控+102帧长视频生成

阶跃星辰&#xff08;StepFun&#xff09;正式开源其新一代图生视频模型 Step-Video-TI2V &#xff0c;该模型基于300亿参数的Step-Video-T2V训练&#xff0c;支持文本与图像联合驱动生成长达102帧的高质量视频&#xff0c;在运动控制与场景适配性上实现突破。 核心亮点 …

HeyGem.ai 全离线数字人生成引擎加入 GitCode:开启本地化 AIGC 创作新时代

在人工智能技术飞速演进的时代&#xff0c;数据隐私与创作自由正成为全球开发者关注的焦点。硅基智能旗下开源项目 HeyGem.ai 近日正式加入 GitCode&#xff0c;以全球首个全离线数字人生成引擎的颠覆性技术&#xff0c;重新定义人工智能生成内容&#xff08;AIGC&#xff09;的…

VSCODE右下角切换环境没用

VSCODE惦记右下角python版本&#xff0c;切换别的虚拟环境时&#xff0c;始终切换不了&#xff0c;同时右下角弹出&#xff1a; Client Pylance: connection to server is erroring. 取消继承环境也改了。https://www.cnblogs.com/coreylin/p/17509610.html 还是不行&#xf…

【sql靶场】第23、25,25a关过滤绕过保姆级教程

目录 【sql靶场】第23、25-28关过滤绕过保姆级教程 第二十三关 第二十五关 1.爆出数据库 2.爆出表名 3.爆出字段 4.爆出账号密码 【sql靶场】第23、25&#xff0c;25a关过滤绕过保姆级教程 第二十三关 从本关开始又是get传参&#xff0c;并且还有了对某些字符或字段的过…

python每日十题(5)

保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。Python 3.x版本中有35个保留字&#xff0c;分别为&#xff1a;and, as,assert,async,await,break,class,continue,def,del,elif,else, except, False, finally,for,from,global, if,import…

VLAN综合实验报告

一、实验拓扑 网络拓扑结构包括三台交换机&#xff08;LSW1、LSW2、LSW3&#xff09;、一台路由器&#xff08;AR1&#xff09;以及六台PC&#xff08;PC1-PC6&#xff09;。交换机之间通过Trunk链路相连&#xff0c;交换机与PC、路由器通过Access或Hybrid链路连接。 二、实验…

OpenGL ES ->计算多个帧缓冲对象(Frame Buffer Object)+叠加多个滤镜作用后的Bitmap

XML文件 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"><…

【工具变量】全国地级市地方ZF债务数据集(2014-2023年)

地方ZF债务是地方财政运作的重要组成部分&#xff0c;主要用于基础设施建设、公共服务及经济发展&#xff0c;是衡量地方财政健康状况的重要指标。近年来&#xff0c;我国地级市的地方ZF债务规模不断变化&#xff0c;涉及一般债务和专项债务等多个方面&#xff0c;对金融市场、…

深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!

&#x1f6e1;️ 深入理解 < 和 >&#xff1a;HTML 实体转义的核心指南 &#x1f6e1;️ 在编程和文档编写中&#xff0c;< 和 > 符号无处不在&#xff0c;但它们也是引发语法错误、安全漏洞和渲染混乱的头号元凶&#xff01;&#x1f525; 本文将聚焦 <&#…

GRS认证的注意事项!GRS认证的定义

GRS认证的注意事项&#xff0c;对于企业而言&#xff0c;是通往可持续发展和环保生产道路上的重要里程碑。在追求这一认证的过程中&#xff0c;企业必须细致入微&#xff0c;确保每一个环节都符合严格的标准与要求。 首先&#xff0c;企业必须全面理解GRS认证的核心原则&#…

位运算--求二进制中1的个数

位运算–求二进制中1的个数 给定一个长度为 n 的数列&#xff0c;请你求出数列中每个数的二进制表示中 1 的个数。 输入格式 第一行包含整数 n。 第二行包含 n 个整数&#xff0c;表示整个数列。 输出格式 共一行&#xff0c;包含 n 个整数&#xff0c;其中的第 i 个数表…

Linux常用指令(3)

大家好,今天我们继续来介绍一下linux常用指令的语法,加深对linux操作系统的了解,话不多说,来看. 1.rmdir指令 功能&#xff1a;删除空目录 基本语法&#xff1a; rmdir 要删除的空目录 ⭐️rmdir删除的是空目录,如果目录下有内容是无法删除 2.mkdir指令 功能&#xff1a;创…

《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》

一、系统概述 本系统是一个基于 TCP 协议的多人聊天系统&#xff0c;由一个服务器和多个客户端组成。客户端可以连接到服务器&#xff0c;向服务器发送消息&#xff0c;服务器接收到消息后将其转发给其他客户端&#xff0c;实现多人之间的实时聊天。系统使用 C 语言编写&#x…

JavaIO流的使用和修饰器模式(直击心灵版)

系列文章目录 JavaIO流的使用和修饰器模式 文章目录 系列文章目录前言一、字节流&#xff1a; 1.FileInputStream(读取文件)2.FileOutputStream(写入文件) 二、字符流&#xff1a; 1..基础字符流:2.处理流&#xff1a;3.对象处理流&#xff1a;4.转换流&#xff1a; 三、修饰器…