Linux环境安装Docker Engine并打包部署Java项目

news2024/11/15 17:32:19

文章目录

    • 1、卸载老版本
    • 2、配置docker仓库
    • 3、安装最新版docker
    • 4、启动docker
      • 启动
      • 重启
      • 开机启动
      • 停止
      • 查看状态:已经启动
      • 查看状态:没有启动
    • 5、查看版本
    • 6、运行hello world测试
    • 7、配置镜像
    • 8、使用docker安装一个应用
    • 9、其他命令
      • 查看运行的docker应用
      • 查看容器信息
      • 进入容器
      • 限制使用内存
      • 限制使用CPU
      • 列出本地镜像
      • 搜索Docker Hub上的镜像:
      • 删除镜像
      • 查看容器日志
      • 删除容器
    • 10、打包java项目
      • 10.1 创建 Dockerfile
      • 10.2 构建镜像
      • 10.3 运行容器
      • 10.4 验证

Docker是一个开源的应用容器引擎,由Go语言开发,基于Linux内核技术。Docker通过将应用及其依赖打包到可移植的容器中,实现了应用的快速部署和高效管理。Docker容器具有轻量级、快速启动、可移植性强等特点,能够显著提升资源利用率和开发效率。它广泛应用于开发、测试、生产等环境,是微服务架构和DevOps文化中的关键工具。Docker还提供了丰富的社区支持和生态系统,助力企业快速构建和部署应用。
在这里插入图片描述

docker有两个版本,一个是无界面的docker engine,另一个是有界面的docker desktop。

查看官网:https://docs.docker.com/engine/install/centos/

查看链接可能需要科学上网

当前Linux版本:

lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	AlibabaCloud
Description:	Alibaba Cloud Linux release 3 (Soaring Falcon) 
Release:	3
Codename:	SoaringFalcon

由于docker官方网络原因,简简单单的安装也颇费周折,最后总算是安装成功了,详细记录如下:

1、卸载老版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、配置docker仓库

sudo yum install -y yum-utils
# 配置yum源 	
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

注意:上面这个官方链接可能访问不了(不翻墙),或者太慢,换成阿里云的镜像即可

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

下面是命令的详细解释:

  • yum-config-manager:这是 yum 工具包中的一个实用程序,用于管理 yum 仓库的配置文件。它允许你添加、删除、启用或禁用仓库,而无需直接编辑仓库的配置文件。
  • --add-repo:这个选项告诉 yum-config-manager 你要执行的操作是添加一个新的 yum 仓库。
  • https://download.docker.com/linux/centos/docker-ce.repo:这是 Docker CE 官方为 CentOS 系统提供的 yum 仓库的 URL。这个仓库包含了 Docker CE 的所有包和依赖项,使得安装和更新 Docker CE 变得简单。

3、安装最新版docker

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

官方的镜像访问不了

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Docker CE Stable - x86_64                         0.0  B/s |   0  B     02:00    
Errors during downloading metadata for repository 'docker-ce-stable':
  - Curl error (28): Timeout was reached for https://download.docker.com/linux/centos/8/x86_64/stable/repodata/repomd.xml [Connection timed out after 30000 milliseconds]

官方镜像访问不了,换成阿里云的就可以了

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@iZm5e33cshwe0x9z1t5yleZ ai]# sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Docker CE Stable - x86_64                          69 kB/s |  66 kB     00:00    
Dependencies resolved.
.................................
.........................
  Verifying        : docker-ce-cli-1:26.1.3-1.el8.x86_64                                              10/12 
  Verifying        : docker-ce-rootless-extras-26.1.3-1.el8.x86_64                                    11/12 
  Verifying        : docker-compose-plugin-2.27.0-1.el8.x86_64                                        12/12 

Installed:
  containerd.io-1.6.32-3.1.el8.x86_64                    docker-buildx-plugin-0.14.0-1.el8.x86_64          
  docker-ce-3:26.1.3-1.el8.x86_64                        docker-ce-cli-1:26.1.3-1.el8.x86_64               
  docker-ce-rootless-extras-26.1.3-1.el8.x86_64          docker-compose-plugin-2.27.0-1.el8.x86_64         
  fuse-overlayfs-1.13-1.0.1.al8.x86_64                   fuse3-3.3.0-17.al8.x86_64                         
  fuse3-libs-3.3.0-17.al8.x86_64                         libcgroup-0.41-19.2.al8.x86_64                    
  libslirp-4.4.0-2.al8.x86_64                            slirp4netns-1.2.3-1.al8.x86_64                    

Complete!

安装过程会出现两次需要确认的步骤Is this ok [y/N]: y 输入y就可以了

4、启动docker

启动

systemctl start docker

重启

systemctl restart docker

开机启动

systemctl enable docker

停止

systemctl stop docker

查看状态:已经启动

systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset>
   Active: active (running) since Sat 2024-08-03 00:52:32 CST; 18min ago
     Docs: https://docs.docker.com
 Main PID: 3810220 (dockerd)
    Tasks: 11
   Memory: 37.5M
   CGroup: /system.slice/docker.service
           └─3810220 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/conta>

查看状态:没有启动

systemctl status docker
?.docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com

5、查看版本

docker version

docker version
Client: Docker Engine - Community
 Version:           26.1.3
 API version:       1.45
 Go version:        go1.21.10
 Git commit:        b72abbb
 Built:             Thu May 16 08:34:39 2024
 OS/Arch:           linux/amd64
 Context:           default
 
docker --version
Docker version 26.1.3, build b72abbb

6、运行hello world测试

出现如下日志说明测试通过

sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

由于特殊原因,出现连接超时,如下提示。需要配置国内镜像

docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Retrying in 1 second 
docker: error pulling image configuration: download failed after attempts=6: dial tcp 199.16.156.11:443: i/o timeout.
See 'docker run --help'.

7、配置镜像

由于官方镜像被墙,所以需要配置其他可访问镜像

sudo vim /etc/docker/daemon.json

在daemon.json 中写入如下配置,没有就新建

{
    "registry-mirrors": [
        "https://ustc-edu-cn.mirror.aliyuncs.com/",
        "https://ccr.ccs.tencentyun.com/",
        "https://docker.m.daocloud.io/"
    ]
}

保存配置后重启docker。systemctl restart docker

如果重启报错,使用命令查看错误原因:journalctl -xe | grep docker

8、使用docker安装一个应用

安装MQTT协议的broker EMQX

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest
  • docker run: 这是Docker的一个基本命令,用于从镜像启动新的容器。
  • -d: 这个选项告诉Docker以“分离模式”(detached mode)运行容器,即容器在后台运行。
  • --name emqx: 这个选项允许你为容器指定一个名称,这里是emqx。给容器命名使得后续管理(如停止、删除、查看日志等)更加方便。
  • -p 1883:1883: 这个选项将容器的1883端口映射到宿主机的1883端口。MQTT协议的默认端口是1883,这个映射使得外部客户端可以通过宿主机的1883端口与EMQX通信。
  • -p 8083:8083: 这个选项将容器的8083端口映射到宿主机的8083端口。EMQX使用8083端口提供HTTP API和Dashboard服务,允许你通过Web界面管理EMQX。
  • -p 8084:8084: 这个选项将容器的8084端口提供给WebSocket服务。
  • -p 8883:8883: MQTT over SSL/TLS的默认端口是8883。这个映射使得外部客户端可以通过SSL/TLS加密的方式与EMQX通信。
  • -p 18083:18083: 类似于8083端口,但18083通常用于HTTP API的加密版本(HTTPS)。
  • emqx/emqx:latest: 这指定了要使用的Docker镜像的名称和标签。emqx/emqx是镜像的仓库名和所有者名,`la
    还有另外一种 基于Cloudflare Workers 的 Docker 镜像代理工具的方式:https://github.com/cmliu/CF-Workers-docker.io/tree/main

9、其他命令

查看运行的docker应用

docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                                                                                                                                    NAMES
0f848b42a08d   emqx/emqx:latest   "/usr/bin/docker-ent??   13 minutes ago   Up 13 minutes   4369-4370/tcp, 5369/tcp, 6369-6370/tcp, 0.0.0.0:1883->1883/tcp, :::1883->1883/tcp, 0.0.0.0:8083-8084->8083-8084/tcp, :::8083-8084->8083-8084/tcp, 8081/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 0.0.0.0:18083->18083/tcp, :::18083->18083/tcp, 11883/tcp   emqx

查看容器信息

容器的id,用docker ps查看

docker inspect 0f848b42a08d
[
    {
        "Id": "0f848b42a08dfd1817cf708ae6962ada91cf03384af12452c8c4f7f920a6c406",
        "Created": "2024-08-12T06:48:42.879101974Z",
        "Path": "/usr/bin/docker-entrypoint.sh",
        "Args": [
            "/opt/emqx/bin/emqx",
            "foreground"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 1148080,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2024-08-12T06:48:43.677078425Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:0ef9bc19d70ec1e5d1a32ac2aa57eb2f1057e19c3f7bccb3c37b300b57480560",
        "ResolvConfPath": "/var/lib/docker/containers/0f848b42a08dfd1
        .....

进入容器

docker exec -it 0f848b42a08d bash 
bash-5.0$ ls
bin          data         erts-11.1.8  etc          lib          log          releases
bash-5.0$ 

限制使用内存

允许容器最多使用500M内存和100M的swap:
# 允许使用的swap=memory-swap - memory
# memory-swap='-1'时,无限制使用swap
# memory-swap 不设置时,默认swap的值时memory的2倍
# memory-swap的值等于memory值时,禁用swap
docker run -d --name mynginx1 --memory="500m" --memory-swap="600M" nginx

限制使用CPU

允许容器最多使用一个半的CPU:

docker run -d --name mynginx2 --cpus="1.5" nginx

允许容器最多使用50%的CPU:

docker run -d --name mynginx3 --cpus='.5' nginx

列出本地镜像

docker images
REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE
ai-app                     latest    2eaf1552bb3f   21 hours ago   437MB
redis/redis-stack-server   latest    aff855c8cd30   2 weeks ago    460MB
hello-world                latest    feb5d9fea6a5   2 years ago    13.3kB

搜索Docker Hub上的镜像:

docker search nginx

删除镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]

docker rmi nginx:latest 
# 强制删除
docker rmi -f nginx:latest

查看容器日志

docker logs [OPTIONS] CONTAINER

docker logs mynginx

删除容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]

docker rm mynginx  
# 强制删除:docker rm -f mynginx

注意与rmi区别。 rm用于清理不再需要的容器实例,而rmi则用于移除不再使用的镜像 。

10、打包java项目

10.1 创建 Dockerfile

文件名就是Dockerfile,没有任何前缀或后缀。当你运行docker build命令时,Docker会在当前目录下查找名为Dockerfile的文件,并根据其中的指令构建镜像。

# 使用官方Java运行时环境作为基础镜像  
# FROM openjdk:11-jre-slim  

# 使用官方OpenJDK 17 JDK镜像作为基础镜像  
FROM openjdk:17-jdk-slim  
  
# 设置工作目录为/app  
WORKDIR /app  
  
# 将当前目录下的jar文件复制到容器的/app目录下  
COPY ai-springboot.jar /app  
  
# 声明暴露端口。端口生效最终是由-p 9000:9000指定的,这里只是文档式声明
EXPOSE 9000

# 使用ENV指令设置环境变量
ENV SPRING_PROFILES_ACTIVE prod
  
# 定义容器启动时执行的命令  
ENTRYPOINT ["java","-jar","/app/ai-springboot.jar"]

环境变量也可以运行命令式时指定: -e SPRING_PROFILES_ACTIVE=prod 设置了环境变量SPRING_PROFILES_ACTIVE( spring.profiles.active )的值为prod

10.2 构建镜像

在Dockerfile所在的目录下,执行以下命令来构建镜像:

docker build -t ai-app .
  • -t ai-app 指定了镜像的名称为 ai-app ,仓库在本地
  • . 指定了构建上下文的路径,这里是当前目录
docker build -t ai-app .
[+] Building 38.8s (8/8) FINISHED                    docker:default
 => [internal] load build definition from Dockerfile           0.0s
 => => transferring dockerfile: 552B                           0.0s
 => [internal] load metadata for docker.io/library/openjdk:1  16.4s
 ........
 => [2/3] WORKDIR /app                                         0.0s
 => [3/3] COPY ai-springboot.jar /app                          0.2s
 => exporting to image                                         0.4s
 => => exporting layers                                        0.4s
 => => writing image sha256:2eaf1552bb3fa483258d0c617b0770f4d  0.0s
 => => naming to docker.io/library/ai-app                      0.0s

10.3 运行容器

docker run -d -p 9000:9000 ai-app

-d表示以守护进程模式运行容器
-p 9000:9000表示将容器的9000端口映射到宿主机的9000端口(前面一个是宿主机端口)。-p 9001:9000 则需要使用http://IP:9001访问

docker run -p 9000:9000 ai-app

 .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
 '  |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::                (v3.2.1)

10.4 验证

可以通过访问http://IP:9000来验证应用是否正常运行

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

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

相关文章

【网络ping】无法ping通电脑 服务器失败是什么原因

【网络ping】无法ping通电脑 服务器失败是什么原因 转载: https://www.lsjlt.com/ask/show/show.php?id80772631782 点击此处 查看博文《无法ping通的原因》 一、无法ping 通的原因 网络连接问题:首先需要检查网络连接是否正常。可以尝试通过ping其他…

全国首个数据要素人才标准,亿信华辰携76家单位共同起草

在数字化浪潮汹涌的今天,数据已跃升为社会经济发展的核心引擎。如何精准、高效地评估数据要素领域人才的专业能力,成为了亟待解决的关键议题。亿信华辰积极响应国家战略布局,依托自身在大数据管理与应用领域的深厚底蕴,携手业界76…

阿里推出视频 AI 生成式框架 Tora,通过轨迹生成视频

在科技高速发展的今天,AI 已经开始融入人们的生活,就在不久前阿里集团推出了一款可以生成视频的 AI 框架 Tora,这是一款可以面向轨迹的 DiT 框架,它可以结合文本、视觉以及轨迹生成视频。 Tora 之前有可以生成视频的模型也就是扩…

Docker数据管理和网络管理

文章目录 一、Docker数据管理Docker容器的分层哪些数据需要持久化容器数据持久保存方式数据卷(data volume)数据卷的使用场景数据卷的特点数据卷使用方法实际例子 二、网络管理Docker安装完成后默认的网络设置创建容器后的网络配置修改默认网络设置容器名…

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算&#xff01;这一次&#xff0c;完成列表的渲染和统计计算的内容&#xff0c;比如&#xff0c;统计购物车内有多少货物的数量&#xff0c;及商品的总价格。 <script setup> import { useCartStore } from /stores/c…

RPA财务机器人是什么,RPA的具体应用场景有哪些?| 实在RPA研究

越来越多的人工智能及超自动化技术在企业财务工作中得以普及应用&#xff0c;以提升财务工作效率&#xff0c;促进财务部门实现全面数字化转型。 RPA财务机器人是什么&#xff1f; RPA&#xff0c;即机器人流程自动化&#xff08;Robotic Process Automation&#xff09;&#…

【方案合集】园区数据治理解决方案(PPT原件)

1、园区大数据治理综述 2、园区大数据治理总体架构 3、园区大数据治理演进路线 4、园区大数据治理建设实施 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划…

大模型的当前和未来

自2022年年底ChatGPT打响大模型热潮第一枪&#xff0c;至今已有一年半多的时间&#xff0c;大模型持续受到业界高度关注。大模型当前发展情况如何&#xff0c;未来又将如何演进发展&#xff1f; 大模型入门 1.什么是大模型、超大模型和Foundation Model&#xff1f; 大模型**…

『 Linux 』网络基础(二)

文章目录 数据在不同层之间的名称数据的跨网络传输端口号TCP协议与UDP协议网络字节序套接字编程的种类 数据在不同层之间的名称 以TCP/IP模型为例,数据在不同层之间有不同名称; 应用层(Applicant Layer) 数据名称一般为 消息(Message),请求/响应(Request/Response); 在这一层…

图像处理中的一些知识点详解

目录 Sobel算子的详细由来以及scharr算子laplace算子的由来 Sobel算子的详细由来以及scharr算子 具体解释可以参考&#xff1a;这篇知乎的前两个回答&#xff0c;尤其第二个回答。 补充&#xff1a;这里的梯度计算使用的是前向差分和后向差分相结合的中心差分思想&#xff08;…

看看月薪3W的电商运营,怎么做数据分析!

作为电商运营的你&#xff0c;得学会分析数据才是真正学会运营。其实不是数据分析太难&#xff0c;而是你没有找对方法&#xff01; 首先&#xff0c;从分析框架方面来看&#xff0c;可以分为【店铺整体、爆款单品、竞品店铺、推广数据、行业大盘】5个维度。从这些维度考虑&am…

【Linux系列】sshpass使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐

效果如下&#xff1a; 图片随便找的&#xff0c;可能需要调下样式&#xff0c;代码复制可用&#xff0c;留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…

【CTF | WEB】001、攻防世界WEB题目之backup

文章目录 backup题目描述:解题思路&#xff1a;解题过程&#xff1a; backup 题目描述: X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; 进入题目后显示&#xff1a; 解题思路&#xff1a; 在进行网站安全检查时&#xf…

北大和鹏城实验室联合推出的图像视频统一多模态大模型Chat-UniVi(CVPR 2024)

Chat-UniVi: Unified Visual Representation Empowers Large Language Models with Image and Video Understanding 论文信息 paper&#xff1a;CVPR 2024 code&#xff1a;https://github.com/PKU-YuanGroup/Chat-UniVi 训练130亿大模型仅3天&#xff0c;北大提出Chat-UniVi…

实战|uniapp模仿微信实现发送位置消息,解决滚动页面地图层级冲突

前言 在即时通讯应用中&#xff0c;虽然发送位置信息不是核心功能&#xff0c;但在特定场景下&#xff0c;这个功能仍然非常有用。 本文将介绍如何在 uniapp 中实现位置信息的发送和展示&#xff0c;特别是在遇到地图层级问题时的解决方案。 以下内容均基于 uniapp 打包 App …

puppeteersharp爬取网页数据

官网 https://github.com/hardkoded/puppeteer-sharp 安装 创建控制台项目&#xff0c;安装PuppeteerSharp 18.1.0 编写代码 安装chrome async static Task Main(string[] args) {//如果Chromium不存在则先下载var browserFetcher new BrowserFetcher();//获取安装的浏览…

redis面试(十三)公平锁排队代码剖析

我们来看一下第二种redis分布式锁 第一种锁是可重入锁&#xff0c;非公平可重入锁&#xff0c;所谓的非公平可重入锁是什么意思呢&#xff1f;胡乱的争抢&#xff0c;根本没有任何公平性和顺序性可言 第二种锁&#xff0c;可重入锁&#xff0c;公平锁 通过公平锁&#xff0c…

haproxy七层代理总结

一、HAProxy概念 1.1 什么是HAProxy&#xff1f; HAProxy是一款开源、高性能的负载均衡器和代理服务器&#xff0c;专为TCP和HTTP应用而设计。它可以将客户端的请求分发到多台后端服务器&#xff0c;从而提高应用的可用性和性能。HAProxy支持多种负载均衡算法和健康检查机制&a…

一篇文章带你学会向量数据库Milvus

一篇文章带你学会向量数据库Milvus 索引管理 Milvus 提供多种索引类型来对字段值进行排序&#xff0c;以实现高效的相似性搜索。它还提供三种度量类型&#xff1a;余弦相似度 (COSINE)、欧几里得距离 (L2) 和内积 &#xff08;IP&#xff09;来测量向量嵌入之间的距离。 建议…