docker入门-docker运行springboot应用

心若不动,风又奈何;你若不伤,岁月无恙。      2022-05-19     248

关键词:

环境准备

  • jdk8
  • 安装docker
  • 镜像加速器配置
  • docker私有仓库
  • springboot工程的jar包

 

docker部署项目

dockfile

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻烦。参考

注意Dockerfile必须和Jar包在同一路径下

创建并编辑dockfile文件

touch Dockerfile

Dockfile

FROM java:8
EXPOSE 8080
VOLUME /slm
ADD helloworld-1.0-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  • FROM 基础镜像必要,代表你的项目将构建在这个基础上面
  • EXPOSE 允许指定端口转发
  • VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
  • ADD 将文件从路径
  • ENV 可以用于为docker容器设置环境变量
  • ENTRYPOINT 指定 Docker image 运行成 instance (也就是 Docker container) 时,要执行的命令或者文件。

开始构建:

docker build -t app .

-t boot-docker 代表你要构建的名字

控制台输出:

Sending build context to Docker daemon  14.35MB
Step 1/7 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete 
fce5728aad85: Pull complete 
76610ec20bf5: Pull complete 
60170fec2151: Pull complete 
e98f73de8f0d: Pull complete 
11f7af24ed9c: Pull complete 
49e2d6393f32: Pull complete 
bb9cdec9c7f3: Pull complete 
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
 ---> d23bdf5b1b1b
Step 2/7 : EXPOSE 8080
 ---> Running in baa4bf07bb14
Removing intermediate container baa4bf07bb14
 ---> f11644c60f39
Step 3/7 : VOLUME /slm
 ---> Running in b9416fbc0df5
Removing intermediate container b9416fbc0df5
 ---> 3f5578b86bca
Step 4/7 : ADD helloworld-1.0-SNAPSHOT.jar app.jar
 ---> 2644a63eee12
Step 5/7 : RUN sh -c 'touch /app.jar'
 ---> Running in 287d2c7fea63
Removing intermediate container 287d2c7fea63
 ---> 5eadcec67575
Step 6/7 : ENV JAVA_OPTS=""
 ---> Running in df119f19b273
Removing intermediate container df119f19b273
 ---> 1259b5b9c02a
Step 7/7 : ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
 ---> Running in 7bdbc2046342
Removing intermediate container 7bdbc2046342
 ---> 20a76c5f6685
Successfully built 20a76c5f6685
Successfully tagged app:latest

 

我们可以看到已经构建完成,Successfully built 20a76c5f6685这句话指明了刚刚构建的镜像ID现在我们可以根据这个ID来进行操作。

docker run -d -p 8080:8080 20a76c5f6685

控制台输出:

[root@iZ2ze895xh98oa4skpbtiuZ hello]# docker run -d -p 8080:8080 20a76c5f6685
4e3881ca9f99bbf59852a1b54131783ceec264334d708d4f8ddbfdf0f9fcf306

 

查看镜像

[root@iZ2ze895xh98oa4skpbtiuZ hello]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
app                 latest              20a76c5f6685        6 seconds ago       672MB
hello-world         latest              fce289e99eb9        11 months ago       1.84kB
java                8                   d23bdf5b1b1b        2 years ago         643MB

可以看到app镜像已经有了

 

查看正在运行的镜像

[root@iZ2ze895xh98oa4skpbtiuZ hello]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
4e3881ca9f99        20a76c5f6685        "sh -c 'java $JAVA_O…"   10 minutes ago      Up 10 minutes       0.0.0.0:8080->8080/tcp   strange_knuth

可以看到app镜像的CONTAINER的ID为4e3881ca9f99,名称为strange_knuth,映射的端口号为8080

 

进入app镜像所在的容器

[root@iZ2ze895xh98oa4skpbtiuZ hello]# docker exec -it 4e3881ca9f99 /bin/bash
root@4e3881ca9f99:/#

 

查看容器中的信息

root@4e3881ca9f99:/# ls
app.jar  bin  boot  dev  etc  home  lib  lib64    media  mnt  opt  proc  root  run  sbin    slm  srv  sys  tmp  usr  var

可以看到app.jar在容器中

 

宿主机开放8080访问端口,在浏览器中进行访问

 

 

 访问成功

 

docker相关命令

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器   添加-v参数,   后边为 宿主机目录:容器目录    --name后边是容器名称     centos:7指的是镜像以及版本号

docker run -di /usr/local/myhtml:/usr/local/myhtml --name=mycentos7 centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示。

 Permission denied

这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要添加参数 -privileged=true来解决挂载目录没有权限的问题

 

将容器保存为镜像

docker commit contailer_nginx mynginx
contailer_nginx是容器名称   mynginx是新的镜像名称

镜像备份
docker save -o mynginx.tar mynginx

-o 输出到的文件

执行后,运行ls命令即可看到打成的jar包

 

恢复镜像

doker load -i mynginx.tar

参考网址:

https://www.jb51.net/article/165159.htm

https://www.runoob.com/docker/docker-architecture.html

 

docker容器技术入门03

Docker容器的基本操作首先要注意的是,所有的docker命令都是以docker开头,也就是指调用docker程序。我们要学习的第一个命令就是dockerrun,运行一个容器。以Docker02教程中的容器为例:这样我们就成功的运行了一个容器,dockerrun后... 查看详情

docker入门

最近接手新的项目,用到了docker,所以花了两个晚上入了个门。慕课网上有简单的入门视频,有兴趣的坎坷可以去入个门.好了,进入正题,首先简单介绍下docker和虚拟机的区别:docker区别于虚拟机的地方在于,docker容器并不是... 查看详情

docker入门

1、使用命令行的工具来检索名字为“tutorial”的镜像$dockersearchtutorial2、使用docker命令来下载镜像$dockerpulllearn/tutorial3、查看已下载的镜像$dockerimages4、在docker容器中运行helloworld!dockerrun命令有两个参数,一个是镜像名,一个是要... 查看详情

docker-入门

...管理设置/配置一台物理服务器或虚拟机,以便用于运行Docker容器的过程。 3.编排/编配包括容器调度的过程、集群管理、容器的连接(发现)以及网络流量路由。可以将其理解为一个控制器进程,用于觉得在哪里运行Docker容... 查看详情

docker入门

一、Docker简介Docker两个主要部件:Docker:开源的容器虚拟化平台DockerHub:用于分享、管理Docker容器的DockerSaaS平台-- DockerHubDocker使用客户端-服务器(C/S)架构模式。Docker客户端会与Docker守护进程进行通信。Docker守护进程会处理复杂... 查看详情

docker安装入门(代码片段)

installdocker命令dockerversion//docker版本dockerpullnginx//拉取nginxdockerimages//查看本机docker镜像dockerps-a//查看运行中的dockerdockerstopID//暂停运行的dockerdockerstartID//启动已经暂停的dockerdockerrm-fID//删除dockerdockerexec-it 查看详情

docker入门:容器

...着像机器,实际是进程,是一个运行时程序。要操作一个Docker容器,只需要执行dockercontainer命令。可以通过help查看run运行容器基础使用:docker container run nginxDocker会到本地区查找有没有叫做nginx的镜像(镜像这篇暂不... 查看详情

docker入门:容器(containers)

        这个《Docker入门系列》文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成。主要是作为个人学习记录。有错误的地方,Robin欢迎大家指正。分为如下几个部分:1Docker入门:... 查看详情

docker的基础入门(代码片段)

docker的基本概念docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一... 查看详情

docker入门到实践——简单操作

...于系统支持量单机支持上千个容器一般几十个2.基本概念Docker包括三个基本概念:镜像(Image)容器(Container)仓库(Repository)Docker镜像Docker镜像就是一个只读的模板。镜像可以用来创建Docker容器。Docker容器Docker利用容器来运行... 查看详情

docker入门实践基本操作

Docker安装完毕,我们就可以试着来运行一些命令了,看看docker可以干什么。(一)创建一个容器首先,让我们运行一个最简单的容器,hello-world。如果安装没有问题,并运行正确的话,应该会出现下面的结果:$dockerrunhello-worldUnabletofi... 查看详情

docker入门第一部分:定位和设置(代码片段)

目录Docker入门第一部分:定位和设置Docker概念镜像和容器容器和虚拟机准备你的Docker环境测试Docker的版本测试Docker安装回顾总结Docker入门第一部分:定位和设置docker入门教程可以让你学会一下内容:1.搭建你的Docker环境(也就是... 查看详情

docker入门

...sp;            docker标准化,快速扩展,弹性伸缩。隔离性。docker应用启动时设置其运行的最大cpu占用、内存、硬盘等资源,如果超过就杀掉它。1.解决运行环 查看详情

docker入门记录1

一. 什么是Docker1.英文意思是集装箱,很形象。直白点就是将程序运行环境打包在一个箱子里,然后箱子扔到哪里,里边的程序都可以运行。这样以来一个显而易见的好处是:和以前的开发环境等相比,你不用每换一台电脑... 查看详情

docker基础入门

docker概念docker是基于go语言实现的容器项目,docker构建思想:build,shipandrunanyapp,anywhere,即一次封装,到处运行。docker在linux容器基础上进行了进一步的优化。使得docker容器更像是一种轻量级的沙盒。docker优势●更快的交付和部... 查看详情

docker入门

一、介绍1、Docker的特性:文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。网络隔离:每个进程容器运行在自己的网络空间,虚拟接... 查看详情

docker快速入门——docker常用命令(代码片段)

Docker快速入门——Docker常用命令一、Docker命令简介1、Docker命令简介Docker的命令清单可以通过运行sudodocker或者sudodockerhelp命令查看。Docker容器技术在不断演化过程中,Docker的子命令已经达到41个,其中核心子命令(例如:run)还会... 查看详情

k3d入门:在docker中运行k3s

k3d入门:在Docker中运行k3s​​https://www.xtplayer.cn/k3d/introduction-k3d-run-k3s-docker-src/#The-“Simple”-Way​​在本文中,我们将讨论k3d,它是一种支持你在已经安装Docker的地方,一次性运行Kubernetes集群的工具。我知道你有问题,让我开始... 查看详情