Docker入门-docker运行springboot应用(二)
环境准备
- 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入门-docker运行springboot应用(二)的更多相关文章
- docker入门篇 部署springboot项目
安装docker Ubuntu16.04安装Docker 使用docker 注册docker服务 systemctl enable docker systemctl status docker 然后在 ...
- docker 入门(docker 镜像 、容器、仓库)
一.关于docker 镜像 .容器.仓库之间的关系 镜像(Image): 类似于虚拟机 的镜像 容器(Container): 类似于操作系统(或者说是独立的软件), 由镜像可以创建大量的容器. 仓库( ...
- Docker入门-docker compose的使用
Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在https://github.com/docker/compose 上开源. ...
- Docker学习第一天(Docker入门&&Docker镜像管理)
简介 今天小区的超市买零食老板给我说再过几天可能就卖完了我有点诧异,老板又说厂家不生产了emmm 今天总算开始docker了! 1.Docker? 1.什么是Docker Docker 是一个开源的应 ...
- Docker入门与应用系列(二)镜像管理
1.1 什么是镜像 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 1.2 镜像从哪里来 Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...
- docker入门-docker应用场景和优势
一.什么是docker Docker是一个使用 Go 语言开发的,并且开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像.Dockerf ...
- redis哨兵集群、docker入门
redis-sentinel主从复制高可用 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果m ...
- Docker入门-笔记-1
Docker入门 Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注.如果你关注最新的技术发展,那么你一定听说过 Docker.不管是云服务还是微服务(Mi ...
- .NET Core + docker入门
下载安装docker docker客户端,今天vpn小水管实在是受不了,于是找了国内的下载地址 配置docker加速器 参考博文Docker for windows10 配置阿里云镜像 docker入 ...
随机推荐
- win10和linux引导问题(没有系统选择界面)
由于最近学习嵌入式和c模块化编程,需要使用Linux系统,但是编程之外,WIN10还是主力系统,决定装双系统. 往常一样,百度装双系统方法,网上千篇一律,大都一个套路. 首先,WIN10 下,新开一个 ...
- 项目Beta冲刺--2/7
项目Beta冲刺--2/7 作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 项目Beta冲刺 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合评估及 ...
- Css背景设置 、
每天进步一小步,一年进步一大步. 第一次发博客园文章,主要记录自己学习的一个过程. CSS3 背景 CSS3 包含多个新的背景属性,它们提供了对背景更强大的控制. background-size ba ...
- ReadIniTest_GetPrivateProfileString
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- django-评论
视图函数views.py # 订单评论 class OrderCommentView(View): def get(self, request, order_id): # 获取用户信息 user = ...
- PHP - assert()
Find and exploit the vulnerability to read the file .passwd.-------------查找并利用此漏洞读取文件.passwd. assert ...
- Wbbpack --3配置
Wbbpack --3配置 什么是webpack webpack 是一个现代 JavaScript 应用程序的静态模块打包(modulebundler)当 webpack 处理应用程序时,它会递归地构 ...
- three.js 加载3DS 404 文件找不到
web.config修改如下: code: <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配 ...
- MSSQL复制表数据及表结构
目标表存在: insert into 目标表 select * from 原表 目标表不存在: select * into 目标表 from 原表 复制表结构 select * into 目标表 fr ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...