运行一个jar包

目录

  • 传送门
  • 前言
  • 一、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-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo 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:17volumes:- /java/feBackEnd.jar:/feBackEnd.jarports:- "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:latestports:- "8080:80"
  • services 部分定义各个服务,每个服务包含服务名称及其配置信息。

7.3. 服务配置

services:web:image: nginx:latestports:- "8080:80"environment:- ENV_VAR=valuevolumes:- /path/on/host:/path/in/containerdepends_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.mzph.cn/news/833291.shtml

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

相关文章

牛客网刷题 | BC80 奇偶统计

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 任意输入一个正整数…

迅饶科技 X2Modbus 网关 AddUser 任意用户添加漏洞复现

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

Python运维-文本处理、系统和文件信息监控、外部命令

本节主要目录如下&#xff1a; 一、文本处理 1.1、Python编码解码 1.2、文件操作 1.3、读写配置文件 1.4、解析XML文件 二、系统信息监控 2.1、监控CPU信息 2.2、监控内存信息 2.3、监控磁盘信息 2.4、监控网络信息 2.5、获取进程信息 2.6、实例&#xff1a;常见的…

【知识点随笔分享 | 第十篇】快速介绍一致性Hash算法

前言&#xff1a; 在分布式系统中&#xff0c;数据的分布和负载均衡是至关重要的问题。一致性哈希算法是一种解决这些挑战的有效工具&#xff0c;它在分布式存储、负载均衡和缓存系统等领域得到了广泛应用。 随着互联网规模的不断扩大&#xff0c;传统的哈希算法在面对大规模…

cmake进阶:变量的作用域(目录作用域与全局作用域)

一. 简介 前面从函数作用域方面学习了变量的作用域&#xff0c;本文从目录作用域方面来学习变量的作用域。 二. cmake进阶&#xff1a;从目录作用域方面学习变量的作用域 1. 目录作用域 什么是目录作用域&#xff1f; 我把这个作用域叫做目录作用域。子目录会将父目录的所…

Web3 ETF软件系统的主要功能

下面是Web3 ETF系统软件的主要功能&#xff0c;这些功能共同构成了Web3 ETF系统软件的核心&#xff0c;使其能够有效地为投资者提供Web3技术相关的投资机会&#xff0c;同时确保合规性、安全性和透明度。北京木奇移动软件有限公司&#xff0c;专业的软件外包开发公司&#xff0…

【Git】Git学习-10-11:GitHub,SHH配置,克隆仓库

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 创建仓库 配置SSH密钥可以更加安全&#xff0c;方便地推送、拉取代码 根目录下&#xff0c;进入.ssh文件&am…

【C语言】——联合体与枚举

【C语言】——联合体与枚举 一、联合体1.1、联合体类型的声明1.2、联合体的特点1.3、相同成员的结构体和联合体对比1.4、联合体的大小计算1.5、联合体的应用举例 二、枚举2.1、枚举类型的声明2.2、枚举类型的优点 一、联合体 1.1、联合体类型的声明 联合体也叫做共用体   与…

学习R语言第五天

文章目录 语法学习创建数据的方式绘制图形的方式图形添加颜色如何操作数据的方式数据进行验算的判断加付值的方式修改变量名称的方式判断是否存在缺失值在计算的方式忽略缺失值通过函数的方式忽略缺失值日期处理的方式字符串转化成日期的方式格式化数据框中数据返回当前的日期的…

19_Scala集合概述

文章目录 集合回顾javaScala集合三大类String & StringBuilderScala集合两大类 集合 回顾java scala与Java有所不同 函数式编程语言更侧重集合本身提供的哪些功能&#xff1b; Scala集合三大类 1.Seq 存储有序数据可重复 类比 List 2.Set 存储无序数据不可重复 3.Map…

【算法系列】字符串

目录 leetcode题目 一、最长公共前缀 二、最长回文子串 三、二进制求和 四、字符串相加 五、字符串相乘 六、仅仅反转字母 七、字符串最后一个单词的长度 八、验证回文串 九、反转字符串 十、反转字符串 II 十一、反转字符串中的单词 III leetcode题目 一、最长公…

frp内网穿透服务搭建与使用

frp内网穿透服务搭建与使用 1、frp简介 frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议。 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp工作原理 服务端运行&#xff0c;监听一个主端口…

Parts2Whole革新:多参照图定制人像,创新自定义肖像生成框架!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; Parts2Whole革新&#xff1a;多参照图定制人像&#xff0c;创新自定义肖像生成框架&#xff01; 引言&#xff1a;探索多条件人像生成的新篇章 在数字内容创作…

论文精读-存内计算芯片研究进展及应用

文章目录 论文精读-存内计算芯片研究进展及应用概述背景介绍前人工作 存内计算3.1 SRAM存内计算3.2 DRAM存内计算3.3 ReRAM/PCM存内计算3.4 MRAM存内计算3.5 NOR Flash存内计算3.6 基于其他介质的存内计算3.7 存内计算芯片应用场景 总结QA 论文精读-存内计算芯片研究进展及应用…

SpringBoot中实现发送邮件

概要 在Spring Boot中发送电子邮件相对简单。你可以使用Spring的邮件支持来实现这一点。 步骤&#xff1a; 1.添加依赖&#xff1a;首先&#xff0c;需要在你的pom.xml文件中添加Spring Boot的邮件发送器依赖。 2. 配置邮件服务器&#xff1a;在application.properties或app…

嵌入式全栈开发学习笔记---C语言笔试复习大全14

目录 指针初级 指针的概念 指针类型 指针类型长度 指针的定义 通过指针访问数据 p1和*p1的区别 指针做函数参数 上一篇复习了8道编程题&#xff0c;这篇开始正式复习之指针&#xff01; 说明&#xff1a;我们学过单片机的一般都是有C语言基础的了&#xff0c;网上关于C…

网络 IO 模式

同步 IO 与异步 IO 同步 IO 和异步 IO 是关于数据读写方式的两种不同模式。 同步 IO 是指在程序读写数据时&#xff0c;需要等待操作完成后才能继续执行后面的程序。这种模式下&#xff0c;当程序使用阻塞式 IO 时&#xff0c;会一直等待IO操作完成&#xff0c;程序会暂停执行…

​​【收录 Hello 算法】3.3 数字编码

目录 3.3 数字编码 3.3.1 原码、反码和补码 3.3.2 浮点数编码 3.3 数字编码 Tip 在本书中&#xff0c;标题带有 * 符号的是选读章节。如果你时间有限或感到理解困难&#xff0c;可以先跳过&#xff0c;等学完必读章节后再单独攻克。 3.3.1 原码、反码和补码 在…

一、RocketMQ基本概述与部署

RocketMQ基本概述与安装 一、概述1.MQ概述1.1 用途1.2 常见MQ产品1.3 MQ常用的协议 2.RocketMQ概述2.1 发展历程 二、相关概念1.基本概念1.1 消息&#xff08;Message&#xff09;1.2 主题&#xff08;Topic&#xff09;1.3 标签&#xff08;Tag&#xff09;1.4 队列&#xff0…

RK3576芯片规格,以及与RK3588对比

瑞芯微RK3576是一款高性能、低功耗的SoC&#xff08;系统级芯片&#xff09;处理器&#xff0c;适用于基于ARM的PC、边缘计算设备、个人移动互联网设备等多种应用场景。它采用Arm架构的八核心CPU&#xff0c;集成了GPU、MCU、NPU、VPU等多种计算核心&#xff0c;并具有丰富的外…