运行一个jar包

news2024/12/23 23:15:14

目录

  • 传送门
  • 前言
  • 一、Window环境
  • 二、Linux环境
    • 1、第一步:环境配置好,安装好jdk
    • 2、第二步:打包jar包并上传到Linux服务器
    • 3、第三步:运行jar包
  • 三、docker环境
    • 1、Linux下安装docker和docker compose
    • 2、Dockerfile方式一运行jar包
      • 2.1、编写最简单Dockerfile文件
      • 2.2、构建镜像
      • 2.3、运行镜像(也就是运行了jar包)
    • 3、docker-compose.yml方式二运行jar包
      • 3.1、编写最简单的docker-compose.yml文件
      • 3.2、构建并启动应用
  • 四、docker相关知识扩展(精简)
    • 1、docker和虚拟机区别
    • 2、docker三大核心概念
    • 3、Dockerfile的简单语法
    • 4、docker build命令
    • 5、docker run命令
    • 6、docker logs命令
    • 6、docker的容器数据卷
    • 7、docker-compose.yml的简单语法
      • 7.1. 版本号
      • 7.2. 服务定义
      • 7.3. 服务配置
      • 7.4. 网络配置
      • 7.5. 数据卷配置
      • 7.6. 其他配置
    • 8、docker compose相关命令

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

运行一个jar包很简单,本质最常见的就是 java -jar xxx.jar ,不过根据环境不同,有些细微不同,接下来就主要讲解Window环境、Linux环境、docker环境下的运行一个jar包。

下面文章不定期更新中。。。

Linux安装JDK17(精品)
Linux安装MySQL(精品)
Linux安装Nginx(精品)
Linux安装Maven(精品)
运行一个jar包(精品)

Jenkins安装启动(JDK8/11/17)
Jenkins配置(插件/角色/凭证)
Jenkins的jdk和maven配置
Jenkins三种构建类型

一、Window环境

这种是基础知识了,首先电脑肯定得安装了jdk版本,作者这边是jdk17,jdk8等其他版本差不多。
在这里插入图片描述
Maven插件这边clean、pakage之后在左侧target目录下会有对应打包好的jar包。
在这里插入图片描述
鼠标右键可以直接打开电脑目录
在这里插入图片描述
在这里插入图片描述
进入cmd命令框
在这里插入图片描述
java -jar feBackEnd.jar
在这里插入图片描述
启动完成,我这边端口是83,浏览器访问http://localhost:83,搞定!!!
在这里插入图片描述
不过,这个只要ctrl+c或者关闭这个cmd框,程序就终止了,不是长久运行的,也就是不是后台运行的。

后台运行命令:javaw java -jar feBackEnd.jar &

这样ctrl+c以后,程序还在运行,没有终止,可以在当前cmd框干其他事情,不过这个cmd框肯定是不能关闭了。

如果想再多看一下springboot的一些输出日志文件等

带日志后台运行命令:javaw jar -jar feBackEnd.jar > fe.txt &
在这里插入图片描述

多个日志文件fe.txt文件。

二、Linux环境

1、第一步:环境配置好,安装好jdk

基础操作,linux服务器下面提前按照好jdk17,可以看作者之前写的文章 安装jdk17
一般我是在/usr/local下面放置我的jdk
在这里插入图片描述
jdk的环境变量该设置的都设置好。

2、第二步:打包jar包并上传到Linux服务器

作者这边用的xftp+xshell的组合软件,直接可以互相点击,非常方便
在这里插入图片描述
点击开xftp软件

在这里插入图片描述
这个是我放置jdk的目录

在这里插入图片描述
我个人非常喜欢创建一个java文件夹,然后把我在Linux服务器能控制的项目jar包,配置文件等都丢到这里面,以后很好找,维护方便。
在这里插入图片描述

这里把刚刚打包好的jar包拖进去就可以了(打包方式和window那边Maven打包一样),上传后就可以运行jar包了。

3、第三步:运行jar包

# 当前窗口运行jar包,还是ctrl+c以后程序就终止运行了
java -jar feBackEnd.jar
# 后台运行jar包,最佳实战,日志默认会到nohup.out文件中
nohup java -jar feBackEnd.jar &
# 带日志后台运行jar包,日志不到nohup.out文件中了改到指定的fe.txt里面了
nohup java -jar  feBackEnd.jar >fe.txt  &
# 实时查看日志命令
tail -n 100 -f fe.txt 
# 实时查看java进程,比如查出feBackEnd对应进程为12345
ps -ef | grep  java
# 停止jar包,后面为对应进程数
kill -9  12345

通常选择后台运行jar包,最佳实战。启动完成,我这边端口是83,浏览器访问http://Linux主机ip:83,搞定!!!

记得Linux系统安全组放行83端口。

三、docker环境

我这边依据Linux环境下,安装docker和docker compose,有两种方式运行jar包。我们常见的单体服务基本都是用Dockerfile的方式,如果有很多微服务和中间件使用,比如redis、kafka、MySQL等等,可以用docker compose一次编排成功,一次性启动所有中间件。当然现在企业级项目,不是特别庞大,每次更新jar包全都去启动也不是太好,compose很灵活,可以只弄一个jar包,也可以都弄来,具体看情况。个人推荐两种方式都会。

1、Linux下安装docker和docker compose

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo systemctl enable docker --now

# 一直输入y就可以了

#测试工作,不行的话就 再执行一下  sudo systemctl enable docker --now,是开机启动docker的意思
docker ps
#  批量安装所有软件,docker-buildx-plugin docker-compose-plugin能够批量安装的软件
docker compose

2、Dockerfile方式一运行jar包

在这里插入图片描述
大前提,保持jar包和Dockerfile文件或者docker-compose.yml文件都在同一个目录下面,保持文件命名一致,jar包名字可以跟着随便改。两个文件则最好固定命名。

2.1、编写最简单Dockerfile文件

先编写一个最少的Dockerfile文件,后面文章我会具体解释Dockerfile的编写语法,这里只弄最最简单的,也就是每个关键字(保留字)必须有,不能再少了的,你会发现至少得有3行。

vim Dockerfile

Dockerfile内容如下,注意必须首字母D大写,其余字母小写:

# 使用官方 OpenJDK 17 基础镜像;如果你是jdk8就把17改成8,这个FROM关键字必须有,而且必须是第一行,基于这个存在的 OpenJDK 17镜像来构建新的镜像。
FROM openjdk:17
# 复制本地jar包到容器中的/目录下;这行也必须有,发版jar包,得从宿主机拷贝jar包到你隔离的docker容器中,宿主机和docker容器是隔离环境,你可以认为是两个Linux系统(本质还是共享Linux内核的,还是一个系统,但是文件系统确实是两套了),docker容器是一套新的Linux系统,默认工作目录就是/。其实docker容器也是工作在你宿主机上面的,只是隔离一块单独的空间,通过 find /  -name feBackEnd.jar  命令,就可以找到COPY命令后,jar包在docker容器真正位置,例如 笔者是 /var/lib/docker/overlay2/userj3va1na7xo52f6jiraqqo/diff/feBackEnd.jar
COPY feBackEnd.jar  /
# 容器启动时执行的命令;docker容器本质是个Linux的迷你系统,其实看CMD就可以看出是  java -jar  xx.jar的样子,不过最后一个参数/feBackEnd.jar  指明了是在目录/下面的 feBackEnd.jar这个jar包,这个/目录也是由于上一条COPY拷贝到了/目录,所以这里/目录下才有jar包,这CMD里面第三个参数如果写成feBackEnd.jar是不行的,必须带上路径/。写成/java/feBackEnd.jar也是不行的,因为是docker容器里面找jar包执行,不是宿主机里面去找jar包执行的,而COPY命令只是拷贝jar包到了容器里面的/目录下,就只能写成/feBackEnd.jar"。
CMD ["java", "-jar", "/feBackEnd.jar"]

2.2、构建镜像

# .是表示当前操作命令的时候,必须在Dockerfile所在的目录进行操作, .表示当前相对路径, ..表示前一级目录
docker build -t fe_backend .
# 或者  -》  /java是宿主机存放Dockerfile的绝对物理路径,可以在其他目录操作该命令(推荐)
docker build -t fe_backend /java 
# 或者 -》 带上版本号,-t参数主要是给镜像打标签的
docker build -t fe_backend:3.3 /java 
# 如果Dockerfile文件没有严格命名,比如命名成了 xx1,可以通过-f参数指定具体文件
docker build  -f xx1 -t fe_backend:3.3 /java 

就一句命令,build后面必须至少包含一个参数,我这边用了-t,就是给生成的镜像打标签,镜像名称叫 fe_backend,只是我这边没有给打标签,只给了镜像名称,这里不支持驼峰,准确的说不支持大写字母。最后一个.表示Dockerfile所在的目录。也可以用/java,笔者这边宿主机是/java中放的Dockerfile。

2.3、运行镜像(也就是运行了jar包)

# 当前窗口运行jar包,还是ctrl+c以后程序就终止运行了
docker run -it -p 83:83 fe_backend
# 后台运行jar包,最佳实战,run进去容器,exit退出,容器停止  ctrl+p+q  退出容器不停止
docker run -d -p 83:83 fe_backend
# 后台运行jar包,镜像带了版本号的(最佳实战)
docker run -d -p 83:83 fe_backend:3.3
# 查看正在运行的镜像实例(容器实例),一查到fe_backend对应的容器id(docker ps),比如68bedbb27caf
docker ps
# 实时查看日志命令
docker logs --tail 10 -f 68bedbb27caf
# 查看镜像
docker images
# 查看正在运行加上历史运行过的容器实例
docker ps -a
# 停止docker容器实例,docker stop 容器id或者容器名称,例如上面查到fe_backend对应的容器id为68bedbb27caf
docker stop 68bedbb27caf
# 强制停止docker容器实例,docker kill容器id或者容器名称
docker kill 68bedbb27caf
# 也可以通过Linux原始方式去kill结束。实时查看java进程,比如查出feBackEnd对应进程为12345
ps -ef | grep  java
# 停止jar包,后面为对应进程数
kill -9  12345

通常选择后台运行jar包,最佳实战。启动完成,我这边端口是83,浏览器访问http://Linux主机ip:83,搞定!!!

记得Linux系统安全组放行83端口,而且docker run名称一定得用-p参数指定端口映射,:前面是宿主机端口,是需要安全组放行的端口,:后面是容器端口。两个端口映射可以不一样,按照自己需求来。

3、docker-compose.yml方式二运行jar包

3.1、编写最简单的docker-compose.yml文件

先编写一个最少的docker-compose.yml文件,后面文章我会具体解释docker-compose.yml的编写语法,这里只弄最最简单的,也就是每个关键字(保留字)必须有,不能再少了的,你会发现至少得有9行。

#  version版本号:指定 Docker Compose 文件的版本,如 version: '3',为什么是3,表示最新版本。后面文章详细提一下。
version: '3'
# services服务定义:在 services 部分定义要运行的各个服务,每个服务包含服务名及其配置信息。
services:
 # 一定要小心yml语法的缩进,多个空格,少个空格直接意思不一样。yml语法和java的application.yml语法一样。feBackEndService可以随便定义名字,叫aaa也可以,就是上面services这个复数多个service中的一个service,有点微服务的意思,这里具体指服务id,或者叫服务名称也行。
  feBackEndService:
    # 注意yml缩进,image表示镜像,这边和Dockerfile文件里面的FROM类似,是基于什么镜像来形成新镜像。jar包基于jdk17镜像。
    image: openjdk:17
    # volumes是容器数据卷的关键字,这边表示将宿主机/java/feBackEnd.jar的jar包  拷贝到目录为/的docker容器中。类似Dockerfile文件里面的COPY。
    # 凡是看到:,基本前面都是宿主机,后面是docker容器。比如数据卷,比如端口映射。
    volumes:
     # 注意yml缩进,有- 开头的,表示多个值,下面还可以再来一行-,是yml语法。可以一次性将多个jar包拷贝到docker容器中的目的目录。
      - /java/feBackEnd.jar:/feBackEnd.jar
     #  注意yml缩进,ports是对齐volumes的。表示端口映射,前面是宿主机端口,后面是docker容器端口。
	ports:
	  # 注意yml缩进,有-开头,没错,这里也可以多个值,映射多组接口。坑:注意有英文双引号,要加上双引号
	  - "81:81"
	 # 注意yml缩进, command是和ports对齐的。这边和Dockerfile文件里面的CMD类似。
    command: java -jar /feBackEnd.jar
    # 总结:有读者可能已经发现了。基于Dockerfile文件方式,主要是docker build,然后docker  run,而基于docker-compose.yml文件方式,其实把两种整合到一块了,命令也合并为一句docker compose up了。由于services关键字下面可以有多个服务,所以什么redis、mysql都能加入进来。一句命令全能给启动了。并且能通过关键字加入依赖关系,比如jar包启动之前,先启动数据库等。总之,docker-compose.yml文件方式非常强大和灵活。

纯净版

version: '3'
services:
  feBackEndService:
    image: openjdk:17
    volumes:
      - /java/feBackEnd.jar:/feBackEnd.jar
	ports:
	  - "81:81"
    command: java -jar /feBackEnd.jar

3.2、构建并启动应用

# 当前窗口启动所有docker-compose服务,还是ctrl+c以后程序就终止运行了
docker compose up
# 后台运行所有docker-compose服务,最佳实战
docker compose up -d
# 如果docker-compose.yml文件没有严格命名,比如命名成了 xxx1.yml,可以通过-f参数指定具体yml文件
docker compose -f xxx1.yml up -d
# 查看正在运行的docker-compose服务中的所有容器实例的一些信息,-a可以查看正在运行和历史运行过的
docker compose ps -a
# 查看服务运行的日志,feBackEndService就是文件里面命名的服务id或者服务名称
docker compose logs feBackEndService
# 实时查看日志命令(最佳实战)
docker compose  logs --tail 10 -f feBackEndService
# 停止所有docker-compose服务,但是不删除他们,down则会移除整个应用程序的容器、网络、卷等资源。
docker compose stop
# 强制所有docker-compose服务,但是不删除他们,docker compose kill 容器id或者容器名称
docker kill feBackEndService
# 也可以通过Linux原始方式去kill结束。实时查看java进程,比如查出feBackEnd对应进程为12345
ps -ef | grep  java
# 停止jar包,后面为对应进程数
kill -9  12345

我这边端口是81,浏览器访问http://Linux主机ip:81,搞定!!!

四、docker相关知识扩展(精简)

1、docker和虚拟机区别

宿主机:就是本地电脑,我的电脑,不管是你window电脑,或者Linux你远程登录那台机器,就是宿主机。宿主,就是被别人寄生的。比如宿主机安装了docker,感觉被docker寄生一样,叫了个宿主机。

跳板机:很多个Linux主机的时候,需要统一管理,因为安全和管理原因,只开放其中一台主机,这台主机给与运维或者开发人员账号密码,运维等人员登录进去的Linux主机不是直接宿主机,而是一个公共的主机,俗称跳板机,然后通过跳板机再远程链接到目的主机,可以用命令telnet连过去,也可以ssh连过去,有管理软件的,也可以通过软件连过去,二次链接过去的,才是真正的宿主机,通常在宿主机才去真正的安装redis等中间件,放置微服务等等。

虚拟机:就是一个普通文件,在宿主机上不需要了就删掉,对宿主机毫无影响。宿主机运行这个虚拟机文件以后,这个虚拟机就能全部复制一套宿主机的操作系统(当然也可以装其他操作系统),并且占用宿主机的一部分硬盘和内存,可以说虚拟机是基于硬件底层,完完全全一个新电脑,不过共享了原电脑的cpu、硬盘、内存、usb接口等等硬件,软件层面的操作系统、网络ip地址都是自己全新的。
虚拟机就是可以当做正儿八经的一台新电脑,有自己的ip地址,可以和宿主机友好通信等等。

Docker容器:基于操作系统层面上实现虚拟化,自己复用宿主机的操作系统,容器自己没有内核,并且也没有进行硬件虚拟,而虚拟机不止要虚拟出一套硬件还要运行一个完整的操作系统。容器只包含应用程序及其依赖,因此占用的资源更少,密度更高。

在这里插入图片描述

2、docker三大核心概念

镜像 Image、容器 Container、仓库 Repository

用java的例子说明:

People p1 = new People;
People p2 = new People;

People这种类模版就是镜像,镜像就是个模板;
p1、p2这种就是容器,就是实例对象,具体的镜像运行实例;
仓库就是个放镜像的地方,官方提供的叫Docker Hub。

docker体系中,镜像是分层文件,整个镜像有多层级的文件组成,这些文件本身就可以当一个镜像。要运行jar包,就得把jar包在已经有的镜像上面加一层新的内容柔和进入,形成了新镜像,这也是为什么Dockerfile编写的时候,是基于jdk17镜像,再写了一大堆执行,增加一些东西,形成新的镜像fe_backend,最后运行这个新生成的镜像,才有了实例,有了实例网站访问才正常。

用java的例子说明:
People就是我们的fe_backend镜像,People是默认继承Object类的,这个Object类就是类比与jdk17的基础镜像,将来想强化一个新的镜像,还可以让这个类继承Object类,也可以去继承People类,总之,新镜像一定是在老镜像基础上做了修改处理的,非常类似java的继承。

容器就是p1、p2这种实例,所以一个镜像对应的容器可以有非常多个。镜像一旦生成, 就不会再变,只能删除掉是无法修改的,后面同样docker build以后出来的新镜像,和前面镜像不是同一个。各是各的。

3、Dockerfile的简单语法

总共18个关键字。常用的其实不多,大概过一下熟悉一下概念,不是太难。

FROM(必须):第一条必须是from,而且必须指定一个已经存在的镜像作为模板,基于这个镜像;例如:FORM openjdk:8   或者  FORM openjdk:17
MAINTAINER(弃用):镜像维护者的姓名和邮箱,推荐使用LABEL代替;例如:MAINTAINER fe  或者  MAINTAINER zangtie
LABEL: 为镜像添加元数据。
RUN:docker build时执行的命令,有shell格式(CMD 命令)和exec格式(CMD [可执行文件,参数1,参数2...]);例如:RUN mkdir /usr/local/java  或者 RUN yum -y install net-tools
EXPOSE:当前容器对外暴露出的端口;例如:EXPOSE 81 或者  EXPOSE 8080
WORKDIR:创建容器后,终端默认登录进来的工作目录,默认/,后续COPY等命令默认复制到该目录,该工作目录与宿主机文件系统是隔离的,如果需要和宿主机打通,可以用数据卷或者绑定挂载;例如:WORKDIR /java 或者 WORKDIR /app
USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是root,一般不用这个;例如: USER root  或者 USER zangtie
ENV;用来在构建镜像过程中设置环境变量,有点类比window中的环境变量,比如设置一个JAVA_HOME,在后续的RUN指令中可以使用;例如 ENV JAVA_HOME /usr/local/openjdk-8  或者 ENV JAVA_HOME /usr/local/openjdk-17
VOLUME:设置容器数据卷,比如VOLUME /tmp 指定临时文件目录为/tmp,在宿主机/var/lib/docker目录下创建了一个临时文件并连接到容器的/tmp;例如:VOLUME /tmp
COPY:将宿主机Dockerfile同目录的文件或者文件拷贝到镜像,只是简单复制,语法 COPY [原路径1,原路径2,目标路径];例如:COPY feBackEnd.jar /java  或者 COPY feBackEnd.jar xx.jar  将jar包重命名为xx并且拷贝到默认的工作目录下面,WORKDIR不指定就是容器中的/,并且和Linux的路径没有关系是隔离的。
ADD:将宿主机Dockerfile同目录的文件或者文件拷贝到镜像并且会自动处理URL(从url下载并复制到镜像)和解压tar压缩包,语法同COPY;
CMD:指定容器启动后docker run时执行的命令,也有shell格式(CMD 命令)和exec格式(CMD [可执行文件,参数1,参数2...]),Dockerfile中可以有多个CMD命令,只有最后一个生效,而且容易被docker run命令里面的参数命令覆盖;例如:CMD mkdir /usr/local/java 或者 CMD ["java", "-jar", "feBackEnd.jar"]
ENTRYPOINT:类似于CMD,但是不会被docker run后面的命令覆盖,可以和CMD结合使用;例如:ENTRYPOINT ["echo", "Hello"]  或者 ENTRYPOINT ["echo", "Hello"] 换行 CMD ["World"] 或者  ENTRYPOINT ["java", "-jar", "feBackEnd.jar"]
ARG: 定义构建镜像时的变量。
ONBUILD: 为镜像设置触发器,当作为基础镜像时执行。
STOPSIGNAL: 设置停止容器时发送的系统调用信号。
HEALTHCHECK: 告诉Docker如何测试容器是否还在正常运行。
SHELL: 设置执行命令时使用的默认shell。

4、docker build命令

docker build命令是Docker中用于创建Docker镜像的一个重要命令。通过这个命令,你可以将应用或服务打包成一个Docker镜像,然后运行在任何支持Docker的环境中。下面我会逐步深入地解释docker build命令的使用方法、参数以及一些最佳实践。

基本用法

docker build命令的基本用法是:

docker build [OPTIONS] PATH | URL | -
  • PATH指定了Dockerfile所在的目录。Docker会在这个目录下寻找名为"Dockerfile"的文件(除非使用了-f, --file选项指定了不同的文件名),并根据该文件中的指令构建镜像。
  • URL用于指定一个Git仓库的地址,Docker会克隆这个仓库并使用仓库中的Dockerfile进行构建。
  • -表示从标准输入中读取Dockerfile的内容进行构建,通常与管道命令一起使用。 常用选项

[OPTIONS]

  • -t, --tag:给镜像打标签,格式为name:tag。例如,docker build -t myimage:v1 .会创建一个标签为myimage:v1的镜像。
  • –build-arg:设置构建时的变量。例如,docker build --build-arg VERSION=1.2.3 .可以在Dockerfile中通过ARG指令接收VERSION变量。
  • -f, --file:指定要使用的Dockerfile路径。如果你的Dockerfile不在默认位置或不叫"Dockerfile",你需要用这个选项指定它的位置。
  • –no-cache:构建镜像时不使用缓存。这可以确保你每次都获取最新版本的基础镜像和依赖。

Dockerfile

docker build命令的核心是Dockerfile。Dockerfile是一个文本文件,包含了一系列的指令和参数,用于定义如何构建镜像。常见的Dockerfile指令包括:

FROM:指定基础镜像。
RUN:执行命令。
COPY和ADD:将文件从构建上下文复制到镜像中。
CMD:提供容器默认执行的命令。
EXPOSE:声明容器监听的端口。
ENV:设置环境变量。

最佳实践

  • 最小化镜像层数:尽量将相关的命令合并到一条RUN指令中,减少镜像层的数量,以减小镜像大小。

  • 多阶段构建:使用多阶段构建可以减小最终镜像的大小,只保留构建结果和必需的依赖。

  • 使用.dockerignore文件:类似于.gitignore,.dockerignore可以让你指定不应该复制到镜像中的文件和目录,以加快构建速度和减少镜像大小。

  • 避免安装不必要的包:只安装你的应用真正需要的依赖,以减小镜像大小。

  • 使用官方基础镜像:尽可能使用官方提供的基础镜像,因为它们通常更优化且安全。 通过理解和应用上述信息,你可以有效地使用docker

  • build命令来创建和管理Docker镜像,为你的应用或服务提供灵活、高效的部署方案。

实际开发中,你可以多次docker build,可以通过查看镜像、删除一些不用的镜像

# 查看镜像
docker images
# 直接删除镜像(rmi后面是镜像id,是IMAGE ID),直接删除可能提示这个镜像对应的一些容器正在运行,不能删除
docker rmi  ea7d66546286
# 查看正在运行加上历史运行过的容器实例
docker ps -a  
# 直接删除容器(rm后面是容器id,是CONTAINER ID),上面不能直接删除镜像,就先把镜像对应的容器实例删除了,再回去删镜像就可以了,可以空格隔开,直接删除多个
docker rm  68bedbb27caf
### 注意,慎用,坑,巨坑,物理删除,无法恢复,慎用
# 删除全部镜像(巨坑,最好不要用,自己服务器还可以玩下,公司服务器小心坐牢)
docker rmi -f $(docker images -qa)
# 删除全部容器(同上),-a表示查询历史的,-q表示强制删除,-q  -a 分别用,合起来-qa也可以。没有实例会提示其他信息。
docker rm -f $(docker ps -qa)

5、docker run命令

docker run命令是Docker中最常用也是最重要的命令之一,它用于创建一个新的容器实例并运行一个命令。这个命令的基本结构如下:

基本用法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • IMAGE:指定要运行的镜像。
  • [COMMAND]:可选,替换容器默认的启动命令。
  • [ARG…]:可选,为COMMAND提供参数。

[OPTIONS]

  • -d, --detach:后台运行容器,并打印容器ID。
  • –name:为容器指定一个名称。
  • -p, --publish:发布容器的端口到宿主机上。格式为<宿主机端口>:<容器端口>。
  • -v, --volume:挂载卷。格式为<宿主机目录>:<容器目录>。
  • –rm:容器退出时自动清理容器文件系统。
  • -e, --env:设置环境变量。
  • –network:连接到指定的网络。
  • -it:同时使用-i和-t选项,通常用于交互式进程,如shell。

示例
以交互模式运行Ubuntu容器:

docker run -it ubuntu /bin/bash

这会启动一个Ubuntu容器,并给你一个bash会话。

后台运行Nginx并将端口映射到宿主机:

docker run -d -p 8080:80 --name mynginx nginx

这会以后台模式启动一个名为mynginx的Nginx容器,并将容器的80端口映射到宿主机的8080端口。

使用环境变量运行容器:

docker run -d --name myapp -e MY_ENV_VAR=myvalue myimage

这会设置环境变量MY_ENV_VAR为myvalue,并在容器中使用。

挂载卷到容器:

docker run -d --name myapp -v /my/host/directory:/my/container/directory myimage

这会将宿主机的/my/host/directory目录挂载到容器的/my/container/directory目录。

注意事项

  • 使用-d选项运行容器时,容器会在后台运行。可以通过docker ps查看正在运行的容器,通过docker logs查看容器的日志输出。
  • 如果不指定[COMMAND],容器会运行其镜像中定义的默认命令。
  • 使用-p或–publish选项时,如果宿主机端口已被占用,Docker会报错。可以只指定容器端口(如-p
    80),Docker将自动为宿主机选择一个未使用的端口。
  • 在生产环境中使用Docker时,考虑使用版本标签指定的镜像,而不是默认的latest标签,以确保环境的一致性和可预测性。

docker run命令是Docker操作的核心,掌握其使用方法对于有效地使用Docker至关重要。

6、docker logs命令

docker logs命令用于获取Docker容器的日志输出。这个命令非常有用,因为它可以帮助你理解正在运行或已停止的容器中发生了什么。当你运行的容器不按预期工作时,查看日志通常是排查问题的第一步。

基本用法
基本的docker logs命令格式如下:

docker logs [OPTIONS] CONTAINER
  • CONTAINER可以是容器的ID或名称。
  • [OPTIONS]是可选的参数,用于修改命令的输出。

[OPTIONS]

  • -f 或 --follow:跟踪日志输出。使用此选项后,命令不会立即返回到终端,而是持续输出新的日志条目,直到你中断它(例如,通过按Ctrl + C)。
  • –since:显示自某个时间点以来的日志。你可以指定相对时间(如42m表示42分钟前)或绝对时间(如2023-01-28T15:04:05)。
  • –until:与–since相反,这个选项用于显示直到某个时间点的日志。
  • -t 或 --timestamps:在每条日志前添加时间戳。
  • –tail:只显示最后N条日志。例如,–tail 50将只显示最后50条日志条目。

示例
获取容器的日志:

docker logs my-container

跟踪容器的日志输出:

docker logs -f my-container

获取过去30分钟内的日志:

docker logs --since 30m my-container

只显示最新的10条日志条目:

docker logs --tail 10 my-container

注意事项

  • docker
    logs命令仅适用于使用json-file或journald日志驱动的容器。这是Docker的默认配置,但如果你更改了日志驱动(通过Docker的–log-driver选项),则可能无法使用docker logs命令获取日志。
  • 对于生产环境,考虑使用集中式日志管理解决方案,以便更有效地存储、搜索和监控大量容器的日志。

通过docker logs命令,你可以快速访问容器的标准输出(STDOUT)和标准错误输出(STDERR),这对于调试和监控容器应用至关重要。

6、docker的容器数据卷

简单一句话,类似redis的rdb或者aof文件。docker容器产生的数据不备份,容器一删除,数据也没了,卷可以在容器之间共享数据,卷中的更改实时生效。

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

就是run命令的时候可以指定,也可以在Dockerfile通过VOLUME来指定。–privileged=true这个参数最好带上,是授权的。

有了-v参数以后,可以在宿主机绝对路径目录里面看到一些东西,而且改了,容器里面实时同步修改。数据卷可以被多个容器同时挂载,这使得不同容器之间可以方便地共享数据。此外,卷的内容可以在容器之间重用,例如,可以在一个容器中更新数据,然后在另一个容器中访问更新后的数据。

删除容器时,默认不会自动删除挂载的数据卷。需要手动管理和清理不再使用的数据卷,以释放存储空间。

像redis、MySQL等用docker镜像运行的时候,强烈建议指定容器数据卷,不然到时候容器实例一删除,数据都没了。

7、docker-compose.yml的简单语法

Docker Compose 使用 YAML(YAML Ain’t Markup Language)语法来定义 docker-compose.yml 文件,通过该文件可以配置 Docker 应用程序的服务、网络、卷等信息。以下是 docker-compose.yml 文件的详细语法说明:

7.1. 版本号

version: '3'
  • 指定 Docker Compose 文件的版本,目前常用的版本包括 '1', '2', '2.1', '3' 等。
  • Docker Compose 文件的版本号是用来指定 Docker Compose 文件格式和支持的特性。目前最新的版本是 3.x,而且大多数情况下,我们可以使用版本 3 来定义我们的 Docker Compose 文件。
  • 版本 3 的特性包括了对于服务扩展性的增强、更多网络选项、配置对象等。通过使用版本 3,我们可以利用较新的 Docker 引擎功能,例如 overlay 网络、秘密管理和配置管理等。
  • 版本 3 中还引入了一些特性,如 services、networks、volumes 等顶层关键字,以及服务健康检查、调整策略等新的服务配置选项。此外,版本 3 还支持使用较新的 Docker 引擎功能,并提供更好的可移植性和兼容性。
  • 因此,版本 3 成为默认版本主要是因为它提供了更多功能和更好的灵活性,同时也是 Docker
    官方推荐的版本。当然,在某些情况下,你可能需要根据特定的需求选择其他版本,但在大多数情况下,版本 3 是一个很好的选择。

7.2. 服务定义

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  • services 部分定义各个服务,每个服务包含服务名称及其配置信息。

7.3. 服务配置

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    environment:
      - ENV_VAR=value
    volumes:
      - /path/on/host:/path/in/container
    depends_on:
      - db
  • 每个服务的配置包括镜像、端口映射、环境变量、卷挂载、依赖关系等。

7.4. 网络配置

networks:
  my_network:
    driver: bridge
  • 可定义网络相关配置,如自定义网络、连接到现有网络等。

7.5. 数据卷配置

volumes:
  my_volume:
  • 定义数据卷以持久化数据。

7.6. 其他配置

other_config:
  ...
  • 还可以包括其他配置项,如 volumes, networks, secrets, configs 等。

请注意,YAML 是大小写敏感的,缩进格式必须严格遵循。以上是 docker-compose.yml 文件的基本语法结构和常见配置选项,你可以根据具体需求自定义更多配置内容。

8、docker compose相关命令

类比Dockerfile文件那边的命令,会发现很相似。

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,它使用一个单独的 docker-compose.yml 文件来配置应用程序的服务、网络和卷等信息。以下是一些常用的 Docker Compose 命令:

  1. docker-compose up: 构建并启动整个应用程序。

    • 示例:docker-compose up
  2. docker-compose down: 停止并移除整个应用程序的容器、网络、卷等资源。

    • 示例:docker-compose down
  3. docker-compose build: 构建或重新构建服务。

    • 示例:docker-compose build
  4. docker-compose start: 启动已经创建但停止的服务容器。

    • 示例:docker-compose start
  5. docker-compose stop: 停止正在运行的服务容器,但不删除它们。

    • 示例:docker-compose stop
  6. docker-compose restart: 重启服务容器。

    • 示例:docker-compose restart
  7. docker-compose logs: 查看服务容器的日志输出。

    • 示例:docker-compose logs
  8. docker-compose ps: 列出所有服务容器的状态。

    • 示例:docker-compose ps

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

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

相关文章

光伏SRM供应商管理解决方案

供应商管理是光伏企业中重要的一环&#xff0c;通过SRM管理供应商&#xff0c;可以提高产品质量&#xff0c;降低采购成本&#xff0c;并集成供应链&#xff0c;提高核心竞争力。 一、搭建管理系统 分为供应商和商户&#xff0c;供应商需要完善基本信息、类别、等级、产品概要…

二叉树详细介绍与代码生成遍历

目录 树的概念及其结构树的构造——代码表示 二叉树概念及介绍二叉树的存储结构二叉树的顺序结构二叉树的链式结构链表的代码展示堆的基本概念和结构堆的代码体现二叉树生成二叉树遍历 四种不同遍历方式——代码展示 树的概念及其结构 要了解二叉树&#xff0c;那么首要的就是…

Linux系统编程 —— 进程概念,环境变量,虚拟地址空间总结(收藏向)

目录 一&#xff0c;什么是进程&#xff0c;有什么用&#xff1f; 1.1 关于进程 1.2 进程的重要特性 二&#xff0c;进程的描述&#xff1a;PCB结构体 2.1 关于PCB 2.2 task_struct 三&#xff0c;进程pid与ppid 3.1 pid是什么&#xff1f;怎么查看&#xff1f; 3.2 系…

51单片机入门:蜂鸣器

蜂鸣器介绍 蜂鸣器是一种将电信号转换为声音信号的器件&#xff0c;常用来产生设备的按键音、报警音等提示信号。 蜂鸣器的种类 1、从结构上&#xff1a;压电式蜂鸣器和电磁式蜂鸣器。 压电式蜂鸣器&#xff1a;通过压电陶瓷的压电效应原理工作的。当加有交变电压时&#xf…

AMEYA360详解:蔡司利用纳米探针技术探索半导体微观电学性能

半导体器件尺寸不断缩小和复杂度增加&#xff0c;纳米探针(Nanoprobing)技术成为解决微观电学问题和优化器件性能的重要工具&#xff0c;成为半导体失效分析流程中越来越重要的一环。 随着功率半导体的快速发展&#xff0c;其厂商也开始密切关注纳米探针技术在PN结特性分析和掺…

什么是光伏发电?什么是分布式光伏系统?

一、光伏发电 光伏发电&#xff0c;作为一种可再生能源利用技术&#xff0c;其核心原理基于半导体的光生伏特效应。简而言之&#xff0c;光伏发电就是将太阳能直接转换为电能的过程。它由三个主要部分组成&#xff1a;太阳电池板&#xff08;组件&#xff09;、控制器和逆变器…

LMdeploy推理实践

在inter-studio平台上&#xff0c;下载模型&#xff0c;体验lmdeploy 下载模型 这里是因为平台上已经有了internlm2模型&#xff0c;所以建立一个符号链接指向它&#xff0c;没有重新下载 ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b /root/如…

TC8002D 是一颗带关断模式的音频功放IC

一、一般概述 TC8002D是一颗带关断模式的音频功放IC。在5V输入电压下工作时&#xff0c;负载(3Ω)上的平均功率 为3 W&#xff0c;且失真度不超过10%。而对于手提设备而言&#xff0c;当VDD作用于关断端时&#xff0c;TC8002D将会进入关断模式&#xff0c;此时的功耗极…

【UE】利用物理学放置模型(以堆积石块为例)

目录 效果 步骤 一、准备工作 二、设置石块碰撞 三、绘制石块 效果 步骤 一、准备工作 1. 在虚幻商城中安装“Physical Layout Tool”插件 2. 在虚幻编辑器中勾选插件“Physical Layout”插件 3. 在Quixel Bridge中将我们所需要的石块资产添加到项目中 这里我们导入…

如何与精益生产咨询公司合作,确保项目的成功?

随着竞争的白热化&#xff0c;企业为了提升生产效率和降低成本&#xff0c;纷纷寻求精益生产咨询公司的帮助。然而&#xff0c;与咨询公司合作并不是一蹴而就的事情&#xff0c;需要双方共同努力&#xff0c;才能确保项目的成功。那么&#xff0c;如何与精益生产咨询公司合作&a…

个股期权是什么期权?个股期权什么时候推出?

今天期权懂带你了解个股期权是什么期权&#xff1f;个股期权什么时候推出&#xff1f;期权也称选择权&#xff0c;是指期权的买方有权在约定的期限内&#xff0c;按照事先确定的价格&#xff0c;买入或卖出一定数量某种特定商品或金融指标的权利。 个股期权是什么期权&#xff…

uni-app安卓本地打包个推图标配置

如果什么都不配置&#xff0c;默认的就是个推小鲸鱼图标 默认效果 配置成功效果 个推图标配置 新建目录 drawable-hdpi、drawable-ldpi、drawable-mdpi、drawable-xhdpi、drawable-xxhdpi、drawable-xxxhdpi 目录中存放图标 每个目录中存放对应大小的图标&#xff0c;大图…

Lora训练笔记1——快速上手

准备工具 AKI大佬的整合包&#xff0c;一键解压即可。 度盘链接 提取码&#xff1a;p8uy 图片预处理 图片预处理&#xff1a;以一定规则裁剪原始的训练素材图片&#xff0c;并进行打标处理。 新建两个文件夹 input&#xff1a;存放原始图片的文件夹 preprocess-output:…

一文带你了解 Oracle 23ai 新特性 Vector 的基础用法

Oracle Database 23ai 来了&#xff0c;虽然目前只是云上可商用&#xff0c;但是 OP 有 FREE 版本可以进行开发。 本文将介绍 Oracle 23ai 的新特性之一&#xff1a; AI 向量搜索&#xff0c;的部分内容。 向量数据类型 23ai 新增向量数据类型&#xff0c;可以用于表示一系列的…

​Web服务器

代码: WebServer 介绍 HTTP层 POST请求一般会包含Content-Length字段, 告诉服务器请求主体的长度GET请求一般不会包含Content-Length字段, 它一般不含请求正文POST响应: Content-Type字段, 根据请求资源的后缀填写 编写 1.读取请求与分析请求 2.根据不同请求方法构建不同的响…

前后端功能实现——查询所有

目录 1、需求 2、步骤 1&#xff09;创建模块 引入坐标 2&#xff09;创建结构 实现三层架构 3&#xff09;创建表 brand 4&#xff09;创建实体类 Brand 5&#xff09;创建MyBatis配置文件 6&#xff09;创建映射文件 7&#xff09;创建工具类 SqlSessionFactoryUti…

5月11日,MongoDB技术沙龙·杭州站来了,本周六不见不散!

在数字化转型的新时代&#xff0c;MongoDB凭借灵活的文档模型、高效的数据处理能力和出色的扩展性&#xff0c;成为广受企业和开发者喜爱的数据库。本次活动将聚焦如何利用MongoDB简化开发工作&#xff0c;并分享阿里云和NineData的解决方案&#xff0c;更有重磅嘉宾分享实践经…

接入大量设备后,视频汇聚系统EasyCVR安防监控视频融合平台是如何实现负载均衡的?

一、负载均衡 随着技术的不断进步和监控需求的日益增长&#xff0c;企业视频监控系统的规模也在不断扩大&#xff0c;接入大量监控设备已成为一项常态化的挑战。为确保企业能够有效应对这一挑战&#xff0c;视频汇聚系统EasyCVR视频融合平台凭借其卓越的高并发处理能力&#x…

快速掌握Redis优化要点,告别性能瓶颈!

大家好!我是小米,今天和大家分享一下在Redis中如何进行优化,以提升系统性能。Redis作为一种流行的内存数据库,因其高性能、高可用和数据持久性而受到广泛应用。然而,在实际应用中,我们仍需对Redis进行优化,以满足各种业务需求。接下来,我将从读写方式、KV size、Key数量…

使用IIS部署Vue项目

前提 使用IIS部署Vue项目&#xff0c;后端必须跨域&#xff0c;不要在Vue中用proxy跨域&#xff0c;那个只在dev环境中有用&#xff01; IIS安装&#xff0c;不用全部打勾&#xff0c;有些他默认就是方块 ■ 选择性安装的&#xff0c;就维持原样就可以。 添加网站配置 右键…