环境准备

  • 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

 

posted on 2019-12-14 11:22  风又奈何  阅读(672)  评论(0编辑  收藏  举报