当前位置: 首页 > news >正文

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

目录

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

二、Docker离线安装 

1. 下载安装包

2. 解压 

3.创建docker.service文件 

4. 启动docker

三、docker常用命令

1. docker常用命令

2. docker镜像命令   

3. docker镜像下载

4.docker镜像push到仓库

5. docker操作容器

6.docker 运维命令   

四、docker部署springboot项目

1.dockerfile指令详解

2.编写Dockerfile文件

 3.制作docker镜像

4.运行镜像 

5.docker打包流程

五、docker容器设置时区

1、在Dockerfile中设置镜像时区

2、创建容器时设置时区

3、进入容器进行设置

六、设置Docker容器日志大小 

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

2 全局设置

3 docker日志存放位置

七、docker网络模式

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

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

十、Docker-compose相关


 

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

安装命令如下:

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.8MAINTAINER zkaw-mes-teamENV 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/timezoneADD  mes-modules-material-$VERSION.jar /home/docker/mes-modules-material-$VERSION.jarCMD 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

十、Docker-compose相关

Docker-compose安装、使用,容器化部署springboot项目-CSDN博客

相关文章:

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

目录 一、使用官方安装脚本自动安装 二、Docker离线安装 1. 下载安装包 2. 解压 3.创建docker.service文件 4. 启动docker 三、docker常用命令 1. docker常用命令 2. docker镜像命令 3. docker镜像下载 4.docker镜像push到仓库 5. docker操作容器 6.docker …...

USB主机模式——Android

理论 摘自&#xff1a;USB 主机和配件概览 | Connectivity | Android Developers (google.cn) Android 通过 USB 配件和 USB 主机两种模式支持各种 USB 外围设备和 Android USB 配件&#xff08;实现 Android 配件协议的硬件&#xff09;。 在 USB 主机模式下&#xff0…...

240520Scala笔记

240520Scala笔记 第 7 章 集合 7.1 集合1 数组Array 集合(Test01_ImmutableArray): package chapter07 ​ object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr: Array[Int] new Array[Int](5)// 另一种创建方式val arr2 Array(…...

【React】封装一个好用方便的消息框(Hooks Bootstrap 实践)

引言 以 Bootstrap 为例&#xff0c;使用模态框编写一个简单的消息框&#xff1a; import { useState } from "react"; import { Modal } from "react-bootstrap"; import Button from "react-bootstrap/Button"; import bootstrap/dist/css/b…...

tomcat10部署踩坑记录-公网IP和服务器系统IP搞混

1. 服务器基本条件 使用的阿里云服务器&#xff0c;镜像系统是Ubuntu16.04java version “17.0.11” 2024-04-16 LTS装的是tomcat10.1.24阿里云服务器安全组放行了&#xff1a;8080端口 服务器防火墙关闭&#xff1a; 监听情况和下图一样&#xff1a; tomcat正常启动&#xff…...

探索Sass:Web开发的强大工具

在现代Web开发中,CSS(层叠样式表)作为前端样式设计的核心技术,已经发展得非常成熟。然而,随着Web应用的复杂性不断增加,传统的CSS书写方式逐渐暴露出一些不足之处,如代码冗长、难以维护、缺乏编程功能等。为了解决这些问题,Sass(Syntactically Awesome Stylesheets)应…...

vue组件之间的通信方式有哪些

在开发过程中&#xff0c;数据传输是一个核心的知识点&#xff0c;掌握了数据传输&#xff0c;相当于掌握了80%的内容。 Vue.js 提供了多种组件间的通信方式&#xff0c;这些方式适应不同的场景和需求。下面是4种常见的通信方式&#xff1a; 1. Props & Events (父子组件通…...

111、二叉树的最小深度

给定一个二叉树&#xff0c;找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 题解&#xff1a;找出最小深度也就是找出根节点相对所有叶子结点的最小高度&#xff0c;在这也表明了根节点的高度是变化的&#xff0c;相对不同的叶子结点有不同的高度。…...

SpringBoot3依赖管理,自动配置

文章目录 1. 项目新建2. 相关pom依赖3. 依赖管理机制导入 starter 所有相关依赖都会导入进来为什么版本号都不用写&#xff1f;如何自定义版本号第三方的jar包 4. 自动配置机制5. 核心注解 1. 项目新建 直接建Maven项目通过官方提供的Spring Initializr项目创建 2. 相关pom依…...

音视频开发17 FFmpeg 音频解码- 将 aac 解码成 pcm

这一节&#xff0c;接 音视频开发12 FFmpeg 解复用详情分析&#xff0c;前面我们已经对一个 MP4文件&#xff0c;或者 FLV文件&#xff0c;或者TS文件进行了 解复用&#xff0c;解出来的 视频是H264,音频是AAC&#xff0c;那么接下来就要对H264和AAC进行处理&#xff0c;这一节…...

vue2中封装图片上传获取方法类(针对后端返回的数据不是图片链接,只是图片编号)

在Vue 2中实现商品列表中带有图片编号&#xff0c;并将返回的图片插入到商品列表中&#xff0c;可以通过以下步骤完成&#xff1a; 在Vue组件的data函数中定义商品列表和图片URL数组。 创建一个方法来获取每个商品的图片URL。 使用v-for指令在模板中遍历商品列表&#xff0c;并…...

【C++面向对象编程】(二)this指针和静态成员

文章目录 this指针和静态成员this指针静态成员 this指针和静态成员 this指针 C中类的成员变量和成员函数的存储方式有所不同&#xff1a; 成员变量&#xff1a;对象的成员变量直接作为对象的一部分存储在内存中。成员函数&#xff1a;成员函数&#xff08;非静态成员函数&am…...

最大矩形问题

柱状图中最大的矩形 题目 分析 矩形的面积等于宽乘以高&#xff0c;因此只要能确定每个矩形的宽和高&#xff0c;就能计算它的面积。如果直方图中一个矩形从下标为 i 的柱子开始&#xff0c;到下标为 j 的柱子结束&#xff0c;那么这两根柱子之间的矩形&#xff08;含两端的柱…...

LeetCode62不同路径

题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。问总共有多少条不同的路径&#xff1f; …...

GNU Radio实现OFDM Radar

文章目录 前言一、GNU Radio Radar Toolbox编译及安装二、ofdm radar 原理讲解三、GNU Radio 实现 OFDM Radar1、官方提供的 grc①、grc 图②、运行结果 2、修改后的便于后续可实现探测和通信的 grc①、grc 图②、运行结果 四、资源自取 前言 本文使用 GNU Radio 搭建 OFDM Ra…...

东方博宜1760 - 整理抽屉

题目描述 期末考试即将来临&#xff0c;小T由于同时肩负了学习、竞赛、班团活动等多方面的任务&#xff0c;一直没有时间好好整理他的课桌抽屉&#xff0c;为了更好地复习&#xff0c;小T首先要把课桌抽屉里的书分类整理好。 小T的抽屉里堆着 N 本书&#xff0c;每本书的封面上…...

react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项目

文章目录 react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项目背景Vite 和 (Create React App) CRAVite&#xff1f;Vite 是否支持 TypeScript&#xff1f; 用Vite创建react项目参考 react快速开始(四)-之Vite 还是 (Create React App) CRA? 用Vite创建项…...

使用python绘制核密度估计图

使用python绘制核密度估计图 核密度估计图介绍效果代码 核密度估计图介绍 核密度估计&#xff08;Kernel Density Estimation&#xff0c;KDE&#xff09;是一种用于估计数据概率密度函数的非参数方法。与直方图不同&#xff0c;KDE 可以生成平滑的密度曲线&#xff0c;更好地…...

5. MySQL 运算符和函数

文章目录 【 1. 算术运算符 】【 2. 逻辑运算符 】2.1 逻辑非 (NOT 或者 !)2.2 逻辑与运算符 (AND 或者 &&)2.3 逻辑或 (OR 或者 ||)2.4 异或运算 (XOR) 【 3. 比较运算符 】3.1 等于 3.2 安全等于运算符 <>3.3 不等于运算符 (<> 或者 !)3.4 小于等于运算符…...

Linux学习之vi文本编辑器的使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...