Linux 环境下Docker部署项目(七)

冉升10个月前行业资讯667

一、前言

本文是讲述的是怎么样定义Dockerfile,然后在Docker中部署springboot项目。由于只是为了学习docker容器部署。因此本文基于的镜像只是基于单纯的java 8(由于官网弃用了 java 改成了 “operJDK”,镜像是 from xxx,文章中有截图展示)。大家可以根据自身的情况去拉取(添加)不同的镜像,比如MySQL xx版本、Tomcat xx 版本、Nginx xx版本、Redis xx 版本等集成环境。

二、项目打包上传

1. 项目打包简单 (故省略)

2. 上传jar包程序到Linux

创建一个文件夹用来存放上传的jar包程序(位置随意 名字随意 存放java程序)
在这里我是 cd /usr/local 下,创建了一个 my_docker的文件目录

1.png

下图所示,我是使用的finalshell 进行直接拖动上传的。

2.png

三、拉取镜像

1. 拉取镜像java:8(jdk1.8)

docker pull java:8

2. 拉取 java8 出错:

Error response from daemon: manifest for java:8-jdk not found: manifest unknown: manifest unknown

查询java镜像 docker search java

3.png

3. 解决方法

官方明确说了 java镜像已经弃用,请使用 openjdk
Dockerfile 更改为 FROM openjdk 完美解决
java DEPRECATED; use “openjdk” (or other JDK impl

4.png


四、创建Dockerfile文件

Dockerfile文件编写规则:

1、指令大小写不敏感,为了区分习惯上用大写

2、Dockerfile 非注释行第一行必须是 FROM

3、文件名必须是 Dockerfile

4、Dockerfile 指定一个专门的目录为工作空间

5、所有引入映射的文件必须在这个工作空间目录下

6、Dockerfile 工作空间目录下支持隐藏文件(.dockeringore)

7、(.dockeringore)作用是用于存放不需要打包导入镜像的文件,根目录就是工作空间目录

8、每一条指令都会生成一个镜像层,镜像层多了执行效率就慢,能写成一条指定的就写成一条。


1. 创建Dockerfile文件

先 cd my_docker 进入后my_docker目录下,再执行下面命令创建一个Dockerfile的文件

touch Dockerfile

注意:这里不要使用mkdir创建文件

2. 编辑Dockerfile

vim Dockerfile

添加以下内容

FROM openjdk
MAINTAINER yjw <yjw@163.com>
ADD person-admin.jar my.jar
EXPOSE 8888
CMD java -jar my.jar

定义父镜像:FROM openjdk ( 注意:如果前面没有pull拉取镜像,那么在执行Dockerfile时也会自己拉取)


定义作者信息:MAINTAINER yjw < yjw@163.com >


将jar包添加到容器: ADD person-admin.jar my.jar


定义容器启动执行的命令:CMD java -jar my.jar


向外暴露项目端口号:8888

5.png

3. 构建镜像(需要在Dockerfile同级目录下构建)

docker打包 注意最后有个点 user 是打包成的镜像名

docker build -f ./Dockerfile -t my_project .

6.png

4. 查看镜像

docker images

7.png

5. 启动后端项目镜像

5.1 启动成功(正常可直接进入第6步

docker run -d --name my_docker -p 8888:8888 my_project

8.png

注意:如果以上命令能够正常执行启动,没有出现下面的错误异常!!!那么可以跳过后面解决的步骤。

5.2 启动失败 (正常可略过

下面的错误提示:

docker: Error response from daemon: Conflict. The container name “/my_docker” is already in use by container “69734e81d1d0c091c3c63112d93ab2ecd4eb4ef8b5011df9018a0b6bdc530c84”. You have to remove (or rename) that container to be able to reuse that name.

See ‘docker run --help’.

原因:由于我命令执行错误,但是在执行过程中容器已经创建成功,再次(第二次)执行相同命令时提示被占用。( 这里我想过初次是创建,后面执行docker start my_docker启动也没生效。可能是别的原因影响了)

9.png

5.3 解决方法 (正常可略过

(1)查看容器的状态

(2)删除容器/修改容器名称(不删数据)

(这个命令将会强制删除名称为 my_docker 的容器,即使容器正在运行)

① 删除容器
docker container rm -f my_docker

12.png

使用docker images 命令,发现镜像my_project没有删除

13.png

如上两个图所示,只是容器被删除了,但是镜像等数据没有被删除。

② 创建同样名称的新容器

然后执行以下命令,这将创建一个新的容器,并将其继续命名为 my_docker

docker run -d --name my_docker -p 8888:8888 my_project


14.png

③ 删除旧的容器及其所有相关数据

请注意,这并不会影响旧的容器,只是重命名了容器。
如果您想删除旧的容器及其所有相关数据
,请使用以下命令:

docker container rm -f my_docker && docker image rm my_project

6. 看运行日志

docker logs -f -t my_docker

PS: -t 后面跟的是自己前面步骤创建的docker容器名称。比如我的是my_docker

15.png

7. 检验启动成功

docker ps -a

16.png

五、阿里云镜像仓库创建、拉取、上传

1. 创建阿里云镜像仓库

创建远程镜像仓库总体步骤

本步骤操作将指导您使用自己的阿里云账号开通容器镜像服务并创建镜像仓库。阿里云容器镜像服务默认实例版可免费使用,其使用限制请参见容器镜像服务计费说明。

1.使用您的阿里云主账号登录容器镜像服务控制台,开通个人版的实例列表。

2.【前往开通】》单击【设置Registry登录密码】》设置阿里云Docker Registry登录密码,然后单击 【确定】 。

3.在容器镜像服务控制台,依次单击 【默认实例】 > 【命名空间】 > 【创建命名空间】,在 【创建命名空间】 弹框中填写命令空间名称,然后单击 【确定】 。

4. 单击 【本地仓库】 > 【创建镜像仓库】 。

5. 在镜像仓库列表,选择上一步创建的镜像仓库,单击列表中的“操作按钮 ”【管理】 ,查看镜像仓库详情。


官网云镜像服务台

① 开通个人版的实例列表

登录容器镜像服务控制台,开通个人版的实例列表。

17.png

② 设置Registry登录密码

18.png

③ 创建命名空间

19.png

④ 创建镜像仓库

⑤ 创建成功后,点击管理进行信息预览

镜像仓库列表,选择上一步创建的镜像仓库,单击列表中的“操作按钮 ”【管理】 ,查看镜像仓库详情

22.png

2. 镜像上传、拉取

跟着阿里云的操作指南来执行命令就行。( 注意:由于我先前没有上传过,所以我是先进行的上传后拉取 )

① 登录阿里云Docker Registry(个人版)

23.png

② 将镜像推送到Registry

docker images

docker tag e86f19b06dc9 registry.cn-guangzhou.aliyuncs.com/docker_project_space/dockerdemo:1.0
 
push registry.cn-guangzhou.aliyuncs.com/docker_project_space/dockerdemo:1.0

24.png

上传阿里云后,查看镜像版本

25.png

③ 从Registry中拉取镜像

docker pull registry.cn-guangzhou.aliyuncs.com/docker_project_space/dockerdemo:1.0

④ 删除镜像的命令和操作

docker rmi registry.cn-guangzhou.aliyuncs.com/docker_project_space/dockerdemo:1.0.1

PS:因为我先前创建了一个1.0.1 。所以不要疑惑为什么前面的步骤版本是1.0

26.png

六、docker run hello-world分析(与步骤无关可忽略

27.png————————————————

本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ

相关文章

Linux CentOS7虚拟机配置静态IP并允许上网的配置方法

Linux CentOS7虚拟机配置静态IP并允许上网的配置方法

前言当我们成功的将CentOS镜像安装到了我们的虚拟机上后,可是这个时候,虚拟机还没有配置IP信息,为了后面开发方便,我们需要设置一个静态IP。一、开启本地电脑VMnet8本地电脑,右键点击网络-&g...

Docker 基础与实战指南(1)

Docker 基础与实战指南(1)

Docker 可以使项目的部署变得简单,大大减少了运维工作量。即便你对 Linux 不熟悉,你也能轻松部署各种常见软件、Java项目。linux 上安装 docker 这里就不进行讲解,我使用的 li...

什么是 SRE?一文详解 SRE 运维体系

什么是 SRE?一文详解 SRE 运维体系

可观测性系统在任何有一定规模的企业内部,一旦推行起来整个SRE的运维模式,那么对于可观测性系统的建设将变得尤为重要,而在整个可观测性系统中,通常我们会分为如下三个方面:指标监控:即各种指标监控,比如基...

一文讲透研发,SRE,运维,DevOps 的区别

一文讲透研发,SRE,运维,DevOps 的区别

研发,SRE ,运维是工种,而 DevOps 是体系。如果拿足球来打比方,研发,SRE ,运维对应的就是前锋,中场,后卫这样的位置,而 DevOps 则是诸如 4-3-3 这样的阵型。 研发...

Docker:namespace隔离实战

Docker:namespace隔离实战

namespacenamespace通过一种内核技术来实现,允许将不同的系统资源隔离和封装到独立的命名空间中。为容器化、虚拟化和隔离提供强大的基础。通过使用namespace技术,Linux内核可以创...

浅谈linux性能调优之六:IO调度算法的选择

浅谈linux性能调优之六:IO调度算法的选择

一) I/O调度程序的总结     1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.    2) 每个块设备都有它自...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。