运行一个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-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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优思学院|HR部门如何制定公司的精益六西格玛培训计划?

在许多企业中&#xff0c;精益六西格玛作为一种提升效率和质量的重要方法论&#xff0c;越来越受到重视。HR部门在推广和实施精益六西格玛培训计划中其实也扮演着关键角色。以下是HR部门可以采取的几个步骤&#xff0c;以有效地制定和实施这样的培训计划。 1. 需求分析 首先&…

人工智能学习+Python的优势

1.人工智能的发展阶段 1.1 强人工智能&#xff1a; 1.2 弱人工智能&#xff1a; 2.符号学习 符号学习的本质就是&#xff1a;规定好的逻辑和顺序&#xff0c;根据这个模板告诉机器接下来需要做什么&#xff0c;遵循if...then原则——>缺点&#xff1a;不能根据新的场景…

本地主机访问服务器的Redis -- 配置 ssh 端口转发

前言 在进行Java开发时&#xff0c;高度的依赖 Windows 上的开发软件 idea &#xff0c;那么我们想访问位于服务器上的 redis 怎么办呢&#xff1f;在平时我们想访问位于服务器上的程序&#xff0c;只需要开放它的端口即可&#xff0c;比如我们创建的网站&#xff0c;比如 tomc…

Go通过CRUD实现学生管理系统

虽然这个项目没有什么含金量&#xff0c;但是可以熟悉go的语法和go开发项目的一般流程 项目结构 项目实现了五个功能&#xff1a; &#xff08;1)增加一个学生 &#xff08;2&#xff09;删除一个学生 &#xff08;3&#xff09;修改一个学生的信息 &#xff08;4&#xf…

基于微信小程序的图书馆预约系统的设计与实现

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

【一起深度学习吧!!!!!】24/05/03

卷积层里的多输入输出通道 1、 多输入通道&#xff1a;代码演示&#xff1a; 多输出通道&#xff1a;代码实现&#xff1a; 1、 多输入通道&#xff1a; 当输入包含多个通道时&#xff0c;需要构造一个输入通道与之相等的卷积核&#xff0c;以便进行数据互相关计算。 例如李沐…

责任链模式和观察者模式

1、责任链模式 1.1 概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门负责人、副总经理、总经理等&#xff0c;但每个领导…

XMall-Front:基于Vue.js的XMall商城前台页面的开发实践

XMall-Front&#xff1a;基于Vue.js的XMall商城前台页面的开发实践 摘要 随着电子商务的蓬勃发展&#xff0c;用户体验逐渐成为决定电商平台成功与否的关键因素。作为XMall商城项目的一部分&#xff0c;XMall-Front是基于Vue.js的前端页面开发&#xff0c;其目标是为用户提供…

《深入解析WIndows操作系统》第10章读书笔记

1、大页面和小页面&#xff1a;虚拟地址空间被划分成以页面为单位&#xff0c;这是因为硬件内存管理单元在页面的粒度上&#xff0c;将虚拟地址转译为物理地址。Windows支持两种页面尺寸&#xff1a;大页面和小页面&#xff0c;根据处理器体系结构不同&#xff0c;实际尺寸值有…

HAL PWM 配置 占空比 频率 stm32 学习笔记

title: HALPWM配置占空比频率 tags: STM32ClionHal 1.STM32CubeMX学习笔记&#xff08;13&#xff09;——PWM输出(呼吸灯)使用 2.STM32标准库HAL库 | 高精度动态调节PWM输出频率占空比 看你cubemx 里面的配置时钟频率是多少 参照第二篇文章描述修改 下面俩个参数就行 uin…

SAP生产订单常用状态以及

常用系统状态&#xff1a; 状态 状态 CRTD 已建立 REL 已核发 CNF 已确认 PCNF 已部份确认 DLV 已交货 DLT 删除指示码 LKD 已锁住 TECO 技术完成 GMPS 已发料 关闭 关闭 工单结案前的生产报表分析 路径:后勤系统- 生产- 现场控制- 信息系统-订单信息系…

NFS共享存储服务配置实践

一、NFS 1.NFS定义 NFS&#xff08;Network File System&#xff09;网络文件服务&#xff1a;基于TCP/IP传输的网络文件系统协议&#xff0c;NFS服务的实现依赖于RPC&#xff08;Remote Process Call&#xff09;远端过程调用&#xff1a;通过使用NFS协议&#xff0c;客户机…

02、Kafaka 简介

02、Kafka 简介 1、 Kafka 简介 Apache Kafka 是一个分布式的发布-订阅消息系统&#xff0c;最初由 LinkedIn 公司开发&#xff0c;并在 2010 年贡献给了 Apache 软件基金会&#xff0c;成为一个顶级开源项目。Kafka 设计之初是为了满足高吞吐量、可扩展性、持久性、容错性以…

VALSE 2024特邀报告内容解析|多模态视觉融合方法:是否存在性能极限?

2024年视觉与学习青年学者研讨会&#xff08;VALSE 2024&#xff09;于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道&#xff0c;方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

高频次的低价监测如何实现

品牌在做控价的过程中&#xff0c;需要对渠道中的低价数据进行监测&#xff0c;但价格数据变化快&#xff0c;涉及的促销信息也很多&#xff0c;如何将这些变化的数据监测到位&#xff0c;同时对于低价的凭证还要截图留证&#xff0c;以便有效的进行渠道治理&#xff0c;这就需…

python菜鸟级安装手册

python安装教程 电脑-右键-属性&#xff0c;确认系统类型和版本号&#xff0c;比如本案例系统是64位 win10 点击python官网&#xff0c;进行下载 适用于 Windows 的 Python 版本 |Python.org 选择第一个安装程序64位即可满足需要&#xff0c; 嵌入式程序包是压缩包版本&…

美国站群服务器的CN2线路在国际互联网通信中的优势?

美国站群服务器的CN2线路在国际互联网通信中的优势? CN2线路&#xff0c;或称中国电信国际二类线路&#xff0c;是中国电信在全球范围内建设的高速骨干网络。这条线路通过海底光缆系统将中国与全球连接起来&#xff0c;为用户提供高速、低延迟的网络服务。CN2线路在国际互联网…

检测服务器环境,实现快速部署。适用于CRMEB_PRO/多店

运行效果如图&#xff1a; 最近被好多人问&#xff0c;本来运行的好好的&#xff0c;突然swoole就启动不了了。 本工具为爱发电&#xff0c;如果工具正好解决了您的需求。我会很开心 代码如下&#xff1a; """本脚本为爱发电by:网前雨刮器 """…

websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步

文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结&#xff08;陈硕老师的总结&#xff09; 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段&#xff1a;数据准备和数据读写。 我们的网络IO…

Navicat for MySQL Mac:数据库管理与开发的理想工具

Navicat for MySQL Mac是一款功能强大的数据库管理与开发工具&#xff0c;专为Mac用户设计&#xff0c;旨在提供高效、便捷的数据库操作体验。 它支持创建、管理和维护MySQL和MariaDB数据库&#xff0c;通过直观的图形界面&#xff0c;用户可以轻松进行数据库连接、查询、编辑和…