Docker安装、使用,容器化部署springboot项目

news2024/11/13 4:00:02

一、使用官方安装脚本自动安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh 

二、Docker离线安装 

1. 下载安装包

可以先下载到本地,然后通过ftp工具上传到服务器上,或者在服务器上使用命令下载

wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz 

2. 解压 

tar -zxvf docker-18.06.3-ce.tgz

将解压出来的docker文件复制到 /usr/bin/ 目录下 

cp docker/* /usr/bin/

3.创建docker.service文件 

进入 /etc/systemd/system/ 目录,并创建 docker.service 文件,内容如下,这样可以将docker注册为service服务

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target

# 此处的–insecure-registry=127.0.0.1(此处改成你私服ip)设置是针对有搭建了自己私服Harbor时允许docker进行不安全的访问,否则访问将会被拒绝。

4. 启动docker

# 给docker.service文件添加执行权限
chmod +x /etc/systemd/system/docker.service
# 重新加载配置文件(每次有修改docker.service文件时都要重新加载下)
systemctl daemon-reload
# 启动
systemctl start docker
# 设置开机启动
systemctl enable docker.service
# 查看docker服务状态
[root@localhost system]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-06-28 00:54:47 PDT; 10s ago
Docs: https://docs.docker.com
Main PID: 45475 (dockerd)
CGroup: /system.slice/docker.service
├─45475 /usr/bin/dockerd --selinux-enabled=false --insecure-registry=10.1.20.150
└─45487 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
Jun 28 00:54:46 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:46.158519178-07:00" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd..." module=grpc
Jun 28 00:54:46 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:46.158525449-07:00" level=info msg="ClientConn switching balancer to "pick_first"" module=grpc
Jun 28 00:54:46 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:46.202943588-07:00" level=info msg="Loading containers: start."
Jun 28 00:54:47 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:47.021854086-07:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon...d IP address"
Jun 28 00:54:47 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:47.126281901-07:00" level=info msg="Firewalld: interface docker0 already part of docker zone, returning"
Jun 28 00:54:47 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:47.244251569-07:00" level=info msg="Loading containers: done."
Jun 28 00:54:47 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:47.264592112-07:00" level=info msg="Docker daemon" commit=a89b842 graphdriver(s)=overlay2 version=20.10.17
Jun 28 00:54:47 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:47.265027319-07:00" level=info msg="Daemon has completed initialization"
Jun 28 00:54:47 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
Jun 28 00:54:47 localhost.localdomain dockerd[45475]: time="2022-06-28T00:54:47.300116789-07:00" level=info msg="API listen on /var/run/docker.sock"
Hint: Some lines were ellipsized, use -l to show in full.
# 如上表示docker已安装成功

三、docker常用命令

1. docker常用命令

    docker --help       #查看docker命令
    docker info         #docker 详细信息,镜像和容器
    docker version      #查看docker版本
    systemctl start docker      #启动docker
    systemctl stop docker       #关闭docker
    systemctl restart docker    #重启docker
    systemctl enable docker     #docker设置随服务启动而自启动
    systemctl status docker     #查看docker 运行状态------如果是在运行中 输入命令后 会看到绿色的active
    docker --help               #docker 帮助命令
        例如:咱忘记了 拉取命令 不知道可以带哪些参数 咱可以这样使用
                docker pull --help
    pwd 显示工作路径
    shutdown -h now 关闭系统   /halt 关闭系统
    shutdown -r now 重启 / reboot 重启
    systemctl stop firewalld  关闭防火墙
    打包:
        (1)将目录 /home/stud/wang 打包成 lvlv.tgz,同时使用 gzip 进行压缩。
            tar –czvf lvlv.tgz /home/stud/wang
        (2)将 lvlv.tgz 解包到指定目录,同时使用 gzip 进行解压缩。
            tar -xzvf lvlv.tgz -C DIR

2. docker镜像命令   

1)列出本地镜像:
        docker images # 查看docker镜像;
        # 具体列解释含义:
        REPOSITORY  #镜像仓库源                
        TAG         #镜像的标签                 
        IMAGE ID    #镜像id            
        CREATED     #创建时间             
        SIZE        #大小
    同一个仓库源可以有多个TAG,表示这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果不指定一个镜像的版本标签,例如只使用tomcat,docker将默认使用tomcat:latest镜像
        docker images -a            #列出本地所有的镜像
        docker images -q            #只显示镜像ID
        docker images --digests     #显示镜像的摘要信息
        docker images --no-trunc    #显示完整的镜像信息
    2)查找镜像:
        docker search tomcat    # 从Docker Hub上查找tomcat镜像
        STARS:                 # 关注度
        docker search --filter=stars=300 tomcat     #从Docker Hub上查找关注度大于300的tomcat镜像

3. docker镜像下载

    docker pull tomcat      #从Docker Hub上下载tomcat镜像,默认是最新版本。等价于:docker pull tomcat:latest
    docker pull tomcat:8  # 选择指定版本下载
    1)删除镜像命令:
        A-#单个镜像删除,相当于:docker rmi java:latest
        docker rmi java
        B-#强制删除(删除正在运行的镜像,注:以后台方式运行的不能被强制删除)
        docker rmi -f java
        C-#多个镜像删除,不同镜像间以空格间隔
        docker rmi -f java tomcat nginx
        D-#删除本地全部镜像
        docker rmi -f $(docker images -q)
        E-#查看所有none镜像
        docker images  | grep none
        F-#查看第一列为none的所有镜像
        docker images | grep "^<none>" | awk "{print $3}"
        G-#查询所有的none镜像的id
        docker images  | grep none | awk '{print $3}'
        H-#删除所有的none镜像
        docker images  | grep none | awk '{print $3}' | xargs docker rmi
        #更简单的方法
        docker rmi `docker images -q -f dangling=true`
        或
        docker rmi $(docker images -q -f dangling=true)

    2)保存镜像
        将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像
        docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
        eg:docker save tomcat -o /myimg.tar
    3)加载镜像
        任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像
        docker load -i 镜像保存文件位置
    4)镜像标签
        docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
        docker tag 源镜像名:TAG 想要生成新的镜像名:新的TAG
        # 如果省略TAG 则会为镜像默认打上latest TAG
        docker tag aaa bbb
        # 上方操作等于 docker tag aaa:latest bbb:test

4.docker镜像push到仓库


    1)、登录docker hub创建自己的仓库地址:
        https://hub.docker.com/repository/create
        创建时,仓库名称要与镜像名称对应
    2)、linux登录docker仓库
        docker login -u 1185223710   # 1185223710 为仓库名称
        登录docker仓库,输入密码
    3)、将容器变为镜像
        // 找到运行中的容器 (复制你要打包的容器的id)
        docker ps
        // 打包为镜像 (86d78d59b104:容器的id 、  my_centos:我们要打包成的镜像的名字)
        docker commit 86d78d59b104 my_centos
        // 找到打包的镜像
        docker images
    4)、将镜像打成标签
        // my_centos:镜像的名字   、 1185223710:我们docker仓库的用户名 、 mysql:我们刚才新建的仓库名 、 v1:版本号,可以不设置
        docker tag my_centos 1185223710/mysql:v1
    5)、将标签上传镜像仓库
        // 1185223710/mysql57:v1 对应上面的
        docker push 1185223710/mysql57:v1
    6)、下载自己的镜像
        // 记得先登录
        docker login
        // 根据版本号拉取
        docker pull 1185223710/mysql:v1
    7)、登出docker仓库
        docker logout

5. docker操作容器

  1)查看容器
        # 查看正在运行的容器
        docker ps
        # 查看所有容器 包括停止的容器
        docker ps -a
        # -q参数,只显示container id
        docker ps -q
        # 查看容器详细信息
        docker inspect demo1
    2)容器启动与停止
        #新建并启动容器,参数:-i  以交互模式运行容器;-t  为容器重新分配一个伪输入终端;--name  为容器指定一个名称
        docker run -i -t --name mycentos 镜像名称/镜像ID
        #后台启动容器,参数:-d  已守护方式启动容器
        docker run -d mycentos
        #启动止容器
        docker start 容器id
        # 重启容器
        docker restart 容器id
        # 关闭容器
        docker kill 容器id
        docker stop 容器id
            -t 参数让Docker分配一个伪终端并绑定到容器的标准输入上
            -i 参数则让容器的标准输入保持打开。
            -c 参数用于给运行的容器分配cpu的shares值
            -m 参数用于限制为容器的内存信息,以 B、K、M、G 为单位
            -v 参数用于挂载一个volume,可以用多个-v参数同时挂载多个volume
            -p 参数用于将容器的端口暴露给宿主机端口 格式:host_port:container_port 或者 host_ip:host_port:container_port
            --name 容器名称
            --net 容器使用的网络
            -d 创建一个后台运行容器
    3)容器进入与退出
        #使用run方式在创建时进入
        docker run -it centos /bin/bash
        #关闭容器并退出
        exit
        #仅退出容器,不关闭
        快捷键:Ctrl + P + Q
        快捷键:Ctrl + Shift + P + Q
    4)容器进程
        #top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
        #列出redis容器中运行进程
        docker top tomcat
        #查看所有运行容器的进程信息
        for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
    5)容器日志
        # 查看redis容器日志,默认参数
        docker logs tomcat
        #查看错误输出
        docker logs container_name >/dev/null
        #查看标准输出日志
        docker logs container_name 2>/dev/null
        # 查看redis容器日志,参数:-f  跟踪日志输出;-t   显示时间戳;--tail  仅列出最新N条容器日志;
        docker logs -f -t --tail=20 redis
        # 查看容器redis从2021年08月10日后的最新10条日志。
        docker logs --since="2021-08-10" --tail=10 redis
    6)进入当前正在运行的容器
        通常容器使用后台的方式运行,需要进入容器,修改一些配置;
        a:docker exec -it 容器id bashShell(/bin/bash)
        b:docker attach 容器id bashShell(/bin/bash)
            exec:进入容器后,开启一个新的终端,可以再里面操作;
            attach:进入容器正在执行的终端,不会启动新的终端进程;
    7)容器文件拷贝 —无论容器是否开启 都可以进行拷贝
        #docker cp 容器ID/名称:文件路径  要拷贝到外部的路径   |     要拷贝到外部的路径  容器ID/名称:文件路径
        #从容器内 拷出
        docker cp 容器ID/名称: 容器内路径  容器外路径
        #从外部 拷贝文件到容器内
        docker  cp 容器外路径 容器ID/名称: 容器内路径
    8)查看容器日志
        docker logs -f --tail=要查看末尾多少行 默认all 容器ID
    9)容器开机自启动
        启动容器时,使用docker run命令时 添加参数--restart=always 便表示,该容器随docker服务启动而自动启动
        ex:
            docker run -itd --name redis002 -p 8888:6379 --restart=always  redis:5.0.5 /bin/bash
        不想删容器,又想让这个容器设置开机自启动方法如下:
            docker  update --restart=always 容器Id 或者 容器名
            或
            docker container update --restart=always 容器Id 或者 容器名
    10)更换容器名
        docker rename 容器ID/容器名 新容器名

6.docker 运维命令   

    1)查看docker工作目录
        sudo docker info | grep "Docker Root Dir"
    2)查看docker磁盘占用总体情况
        du -hs /var/lib/docker/ 
    3)查看Docker的磁盘使用具体情况
        docker system df
    4)删除 无用的容器和 镜像
        #  删除异常停止的容器
        docker rm `docker ps -a | grep Exited | awk '{print $1}'` 
         
        #  删除名称或标签为none的镜像
        docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`
    5)清除所有无容器使用的镜像
        docker system prune -a
    6)查找大文件
        find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr
    7)查找指定docker使用目录下大于指定大小文件
        find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr |grep '/var/lib/docker/overlay2/*'

四、docker部署springboot项目

1.dockerfile指令详解

 提供一个Dockerfile例子

# 基础镜像为centos
FROM centos:7

# 维护者
MAINTAINER ALEX

# 添加jdk压缩包至 /usr/local 目录,压缩包会自动解压,解压后目录名称为jdk1.8.0_271
ADD jdk-8u201-linux-x64.tar.gz /usr/local/env/jdk/

# 配置JAVA_HOME环境变量
ENV JAVA_HOME /usr/local/env/jdk/jdk1.8.0_201/

# 将JAVA_HOME/bin 添加至PATH环境变量
ENV PATH $JAVA_HOME/bin:$PATH

# 安装vim
RUN yum -y install vim

# 安装ll
RUN echo "alias ll='ls $LS_OPTIONS -l'" >> ~/.bashrc
RUN source ~/.bashrc
FROM jdk:1.8

MAINTAINER zkaw-mes-team

ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms128m -Xmx512m -XX:-UseGCOverheadLimit -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=utf-8"
ENV VERSION="1.0.1"

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD  mes-modules-material-$VERSION.jar /home/docker/mes-modules-material-$VERSION.jar

CMD sleep 120;java $JAVA_OPTS -jar /home/docker/mes-modules-material-$VERSION.jar 

2.编写Dockerfile文件

Dockerfile文件位置要与jar文件所在目录相同

FROM jdk:1.8
            ENV TZ=Asia/Shanghai
            #将本地文件添加到容器中,并更名为myproject.jar
            ADD lxj-test-0.0.1-SNAPSHOT.jar /home/docker/lxj-test-0.0.1-SNAPSHOT.jar
            VOLUME /home/docker/logs
            RUN ["chmod","+x","/home/docker/lxj-test-0.0.1-SNAPSHOT.jar"] 
            ENTRYPOINT ["java","-jar","-Xmx1024m","-Xms1024m","-Dfile.encoding=utf-8","/home/docker/lxj-test-0.0.1-SNAPSHOT.jar",">>","/home/docker/logs/test.log","2>&1","&"]

《在Linux上我们使用nohup命令来后台运行文件》
    nohup java -jar /mes-system.jar >> /usr/local/app/logs/system.log 2>&1 &
        1).nohup意思就是使用后台方式运行java命令。
        2).>/dev/null意思是将标准信息输出到一个黑洞(/dev/null),说人话就是不输出标准信息。
        3).java -jar /mes-system.jar >> /usr/local/app/logs/system.log 将日志的内容打印到/usr/local/app/logs/system.log中
        4).2>&1 意思是将标准错误2重定向到标准输出&1,标准输出再定向到/usr/local/app/logs/system.log
        5).& 符号是后台启动的意思 

 3.制作docker镜像

在dockerfile所在文件夹执行如下命令

docker build -t lxjtest .

注意后面的点(.)表示Dockerfile文件所在的位置,点代表在当前位置。 

4.运行镜像 

并设置 映射路径及端口

docker run -d -it -p 8088:8088 -v /home/docker/lxj-test-0.0.1-SNAPSHOT.jar:/home/docker/lxj-test-0.0.1-SNAPSHOT.jar -v /home/docker/logs:/logs/ -v /etc/localtime:/etc/localtime --name lxj-test lxjtest

 -v /home/docker/lxj-test-0.0.1-SNAPSHOT.jar:/home/docker/lxj-test-0.0.1-SNAPSHOT.jar挂载jar包,当jar包有更新时,将jar包放入主机的指定位置,重启docker容器就即可。

        --net=host  设置容器和宿主机共享IP
        --restart=always  表示开机自启动

        如果docker run 的时候没有加 --restart=always ,然后已经运行的docker容器怎么设置自动重启? 执行下面命令:
         docker update –-restart=always 容器名称
         
         查询时间段内计划日志
         docker logs -t -n 8 --since="2022-08-02T13:23:37" --until="2022-08-02T22:23:37" <容器名称>

5.docker打包流程

   1)将容器变为镜像
        docker commit 261314c94305 imagexxx
        可用参数
            -a :提交的镜像作者;
            -c :使用Dockerfile指令来创建镜像;
            -m :提交时的说明文字;
            -p :在commit时,将容器暂停。
            imagexxx 是新创建的镜像的名字
    2)将镜像打包成tar包
        docker  save  -o xxx.tar  imagexxx # 当前路径下会生成一个xxx.tar
        例如:
        docker save -o electric_know_1.31_0.tar electric_know_1.31_0:latest
    3)将tar包生成镜像
        docker  load  <  xxx.tar     # 生成的镜像跟之前打包的镜像名称一样
    4)将镜像生成容器
        docker  run  -it  --name  容器名称  镜像名称  /bin.bash

五、docker容器设置时区

1、在Dockerfile中设置镜像时区


        # 设定时区
        ENV TZ=Asia/Shanghai
        RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


2、创建容器时设置时区


        将宿主机与容器的时间进行挂载
        -v /etc/localtime:/etc/localtime


3、进入容器进行设置


        1)进入容器内:
            docker exec -it 容器名 /bin/bash   
        2)设定时区
            rm /etc/localtime
            ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

六、设置Docker容器日志大小 

1 设置一个容器服务的日志大小上限


        通过配置容器docker-compose.yml的max-size选项来实现:
            nginx: 
              image: nginx:1.12.1 
              restart: always 
              logging: 
                driver: "json-file"
                options: 
                  max-size: "5g"
        或者 
        docker run或dokcer create时添加参数
        如创建并运行
        docker run --log-opt max-size=10m --log-opt max-file=3    


2 全局设置


        新建/etc/docker/daemon.json,若有就不用新建了
        {
          "storage-driver": "devicemapper",
          "registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
          "log-driver":"json-file",
          "log-opts": {"max-size":"500m", "max-file":"3"}
        }
        max-size=500m,意味着一个容器日志大小上限是500M,
        max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json
        注:设置后只对新添加的容器有效。
        
        除了 json-file 还支持很多 logging driver
            none:容器没有日志可用,docker logs 什么都不返回  none 是 disable 容器日志功能
        
        重启docker守护进程
        systemctl daemon-reload
        systemctl restart docker


3 docker日志存放位置

        /var/lib/docker/containers

七、docker网络模式

常用命令:

# 创建网络
docker network create <Network Name>
# 查看已存在的网络
docker network list
#删除Docker网络 
docker network rm xxx

八、Linux自动清除缓存脚本,亲测有效

   1、cleanCache.sh 清除缓存脚本
        #!/bin/bash
        #description: 清除缓存
        echo "开始清除缓存"
        sync;sync;sync #写入硬盘,防止数据丢失
        #sleep 10 #延迟10秒
        echo 3 > /proc/sys/vm/drop_caches
        echo "结束清除缓存"
        #需要单独执行下面定时命令(每天凌晨一点执行)
        #echo '0 1 * * * sh /opt/script/cron/cleanCache.sh' >> /var/spool/cron/root
    
    2、root账户下执行 命令
        echo '0 1 * * * sh /opt/script/cron/cleanCache.sh' >> /var/spool/cron/root
    3、查看定时任务是否有效命令
        crontab -l
    4、删除所有定时任务命令
        crontab -r
        
查看内存占用情况
    1、free -h 详解
        total: 内存总数
        used: 已经使用内存数
        free: 完全空闲内存
        shared: 多个进程共享的内存
        buffers: 用于块设备数据缓冲,记录文件系统metadata(目录,权限,属性等)
        cached: 用于文件内容的缓冲
        available:真正剩余的可被程序应用的内存数
    
    2、查询CPU占用前十名
        ps auxw|head -1;ps -auxf|sort -nr -k3|head -10
    3、查询内存占用前十名
        ps auxw|head -1;ps -auxf|sort -nr -k4|head -10
        
        df -h  查询内存  查看磁盘空间大小
        查看docker占用的情况
            docker system df
        du -sh * 查找到大小异常的文件

九、Linux系统中如何修改时间和时区

1.只设置时间
        (1)先查看日期、时间和时区,通过date命令
            date
        (2)如果日期和时区都正确,则只更改时间,通过 date -s 时间    
            date -s 10:10
    2.设置日期
        如果需要设置日期,需要使用date -s设置
        date -s yyyy-MM-dd
    3.设置时区
        设置时区可能稍微复杂点,它分为两步
        (1)首先需要知道需要使用哪种时区,
            例如,我国使用的北京时间,对应的时区为东八区,可以记为CST、GMT+8、Asia/Shanghai
        (2)将系统中存储的时区信息,覆盖到本地时区配置
            只需要将/usr/share/zoneinfo/下面的时区配置信息,覆盖到/etc/localtime本地时区配置即可,具体操作
            cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

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

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

相关文章

【android】设置背景图片

改变值&#xff0c;可显示zai在 在theves下面的两个value都要增加名字代码 <item name"windowActionBar">false</item><item name"android:windowNoTitle">true</item><item name"android:windowFullscreen">tru…

一、【源码】创建简单的映射器代理工厂

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/01-xxxDao-proxy 创建简单的映射器代理工厂 执行xxxDao.method()时都做了些什么&#xff1f; 原理是&#xff1a;首先定义Dao接口&#xff…

docker 停止重启容器命令start/stop/restart详解(容器生命周期管理教程-2)

Docker 提供了多个命令来管理容器的生命周期&#xff0c; 其中start、stop 和 restart。这些命令允许用户控制容器的运行状态。 1. docker start 命令格式&#xff1a; docker start [OPTIONS] CONTAINER [CONTAINER...]功能&#xff1a; 启动一个或多个已经停止的 Docker …

【Qt系列教程】一、认识Qt、安装Qt、运行Hello Qt

文章目录 1.1 Qt 简介1.2 Qt 的安装1.3 编写 Hello World 1.1 Qt 简介 Qt&#xff08;官网&#xff1a;https://www.qt.io&#xff09;于1995年5月首次公开发布&#xff0c;是一个跨平台的应用程序开发框架&#xff0c;也是最主流的 C 开发框架&#xff1b; Qt 具有其他编程…

[XYCTF新生赛]-Reverse:ez_rand解析(爆破时间戳,汇编结合反汇编)

无壳 查看ida 这里是利用time64获取种子&#xff0c;但是time64不是标准的函数&#xff0c;这里是伪随机数&#xff0c;简单地来说就是它不是通过时间来确定种子&#xff0c;所以我们没办法在脚本里直接调用它得到种子&#xff0c;那就意味着我们不知道种子是多少&#xff0c;…

一个好用的对外开放端口工具 Ngrok

工作中我们经常需要在测试或者开发阶段给客户快速展示程序&#xff0c;需要运维打开端口、部署等一系列操作&#xff0c;成本较高。如果能够直将本地开发环境发布给客户直接进行体验、需求确认&#xff0c;就会方便很多&#xff0c;本文将介绍一个小工具可以快速对外打开端口。…

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…

冯喜运:6.6外汇黄金原油晚间行情预测及独家操作建议

【黄金消息面分析】&#xff1a;周三&#xff08;6月5日&#xff09;&#xff0c;黄金价格继续区间波动并上涨&#xff0c;与周二的价格走势形成鲜明对比&#xff0c;此前美国公布的经济数据好坏参半&#xff0c;可能促使美联储降低借贷成本。美国国债收益率下降&#xff0c;美…

书生·浦语大模型全链路开源体系-笔记作业4

XTuner 微调 LLM:1.8B、多模态、Agent 引自&#xff1a;Tutorial/xtuner/personal_assistant_document.md at camp2 InternLM/Tutorial GitHub 1. XTuner介绍 引自&#xff1a;欢迎来到 XTuner 的中文文档 — XTuner 0.1.18.dev0 文档 1.1. 什么是 XTuner &#xff1f; X…

gitblit 环境搭建,服务器迁移记录

下载 Gitblit&#xff1a; http://www.gitblit.com/ JDK&#xff1a;gitblit网站显示需要jdk1.7&#xff0c;这里用的1.8。 Git&#xff1a;到官网下载最新版本安装 1). 分别安装JDK&#xff0c;Git&#xff0c;配置环境变量&#xff0c;下载并解压Gitblit 2). 创建代码仓库 …

微软云计算Windows Azure(三)

目录 五、Windows Azure Marketplace六、Windows Azure服务平台&#xff08;一&#xff09;网站&#xff08;二&#xff09;虚拟机&#xff08;三&#xff09;云服务&#xff08;四&#xff09;移动服务&#xff08;五&#xff09;大数据处理&#xff08;六&#xff09;媒体支持…

【微机原理及接口技术】中断系统

【微机原理及接口技术】中断系统 文章目录 【微机原理及接口技术】中断系统前言一、中断概述中断的基本概念中断处理过程 二、8086/8088中断系统中断类型中断响应过程中断向量表内部中断服务程序 总结 前言 本篇文章我们会讲到中断的概述&#xff0c;8086/8088中断系统。 一、…

Linux驱动开发笔记(三)平台设备驱动

文章目录 前言一、Linux的设备模型1. 总线1.1 bus_type结构体1.2 注册/注销总线 2. 设备2.1 device结构体2.2 内核注册/注销设备 3. 驱动3.1 device_driver结构体3.2 注册/注销驱动 4. attribute属性文件4.1 attribute_group结构体4.2 设备属性文件4.3 驱动属性文件4.3. 总线属…

2024骨传导耳机品牌排行前五名汇总,揭晓年度最强王者骨传导机型!

骨传导耳机自问世以来&#xff0c;便迅速在蓝牙耳机市场中崭露头角&#xff0c;并且凭借特殊的传声方式和特健康的佩戴方式深得消费者的喜爱。然而&#xff0c;随着骨传导耳机逐渐热门&#xff0c;市场中品牌越来越多&#xff0c;也逐渐出现了一些劣质品牌&#xff0c;这些品牌…

vscode运行Java utf-8文件中文乱码报错

问题现象 vscode 运行utf-8 java文,爆出如下错误 hello.java:5: &#xfffd;&#xfffd;&#xfffd;&#xfffd;: &#xfffd;&#xfffd;&#xfffd;&#xfffd;GBK&#xfffd;IJ&#xfffd;&#xfffd;&#xfffd;ӳ&#xfffd;&#xfffd;&#xfffd;ַ&a…

Latex之图片排列的简单使用(以MiKTeX工具为例)

一、参考资料 Latex如何插入图片 Latex 学术撰写工具推荐&#xff08;在线、Windows、Mac、Linux&#xff09; 关于Latex并排多张图片及加入图片说明的方法 二、准备工作 1. 在线LaTex工具 Overleaf 2. 本地LaTex工具 MiKTeX 3. 测试用例 \documentclass{article} \ti…

AWS EC2服务器开启root密码,SSH登录

1) EC2 Instance Connect连接&#xff0c;更改root密码 sudo passwd root 2&#xff09;接着切换到切换到 root 身份&#xff0c;编辑 SSH 配置文件 $ sudo -i$ vi /etc/ssh/sshd_configPasswordAuthentication no&#xff0c;把 no 改成 yes #PermitRootLogin prohibit-passw…

SSM旅游论坛(前后分离源码+论文)

该旅游论坛是基于Spring、SpringMVC、Mybatis框架开发出来的 用户信息管理 此页面提供给管理员的功能有&#xff1a;用户信息的查询管理&#xff0c;可以删除用户信息、修改用户信息、新增用户信息&#xff0c; 还进行了对用户名称的模糊查询的条件 景点信息管理 论坛类型管理…

体验SmartEDA:颠覆传统,设计流程更流畅,超越Multisim与Proteus!

在电子设计自动化&#xff08;EDA&#xff09;领域&#xff0c;传统软件如Multisim和Proteus一直是工程师们的得力助手。然而&#xff0c;随着科技的飞速发展和用户需求的不断升级&#xff0c;一个全新的EDA平台——SmartEDA正崭露头角&#xff0c;凭借其更为流畅的设计流程&am…

Github Copilot登录账号,完美支持chat

Github Copilot 代码补全等功能&#xff0c;提高写代码的效率 https://web.52shizhan.cn/activity/copilot 登录授权后&#xff0c;已经可以使用&#xff0c;完美。如图