关键词:
环境准备
- 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中运行k3shttps://www.xtplayer.cn/k3d/introduction-k3d-run-k3s-docker-src/#The-“Simple”-Way在本文中,我们将讨论k3d,它是一种支持你在已经安装Docker的地方,一次性运行Kubernetes集群的工具。我知道你有问题,让我开始... 查看详情