docker项目demo

demo项目说明

此代码用于演示如何创建一个docker项目, 项目情况如下

  • 由maven构建
  • 测试主java类一个,类中启动了一个HttpServer监听请求

目录结构

|--docker-demo
    |--src
        |--main
            |--java
                |--com
                    |--leon
                        |--demo
                            |--App.java
    |--Dockerfile
    |--pom.xml

Dockerfile说明

# 基于openjdk7创建image
FROM openjdk:7

# docker运行主机的工作项目跟目录
WORKDIR /home/ops/workspace/docker-demo

# 对外暴露的端口
EXPOSE 9999

# 复制的jar文件
COPY target/docker-demo-1.0.jar .

# 运行的docker命令(命令不能串联,比如CMD ["java -jar docker-demo-1.0.jar"]是没法正常运行的)
CMD ["java","-jar", "docker-demo-1.0.jar"]

关于Dockerfile的说明:

  • Dockerfile是否要放在项目中?在Docker操作上并无强制,Dockerfile只是一个用于构建image的指令集合。理论上只要docker命令可以访问就可以。

操作

docker镜像生成准备

  • 在docker运行的服务器上创建工作目录/home/ops/workspace/docker-demo,这也是项目目录
  • 项目根目录下运行 mvn clean install 将在target目录下生成jar包

生成镜像

生成

ops@leon-aliyun:~/workspace/docker-demo$ sudo docker build -t docker-demo:1.0 .
Sending build context to Docker daemon  51.71kB
Step 1/5 : FROM openjdk:7
 ---> d735a2057e60
Step 2/5 : WORKDIR /home/ops/workspace/docker-demo
 ---> Using cache
 ---> 8ff9439bed6e
Step 3/5 : EXPOSE 9999
 ---> Using cache
 ---> 33ed3ef74c6e
Step 4/5 : COPY target/docker-demo-1.0.jar .
 ---> Using cache
 ---> 7c26ab12c30b
Step 5/5 : CMD ["java","-jar","docker-demo-1.0.jar"]
 ---> Using cache
 ---> 2fb1fff1d5ff
Successfully built 2fb1fff1d5ff
Successfully tagged docker-demo:1.0

查看镜像

ops@leon-aliyun:~/workspace/docker-demo$ sudo docker image ls
[sudo] password for ops: 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker-demo         1.0                 2fb1fff1d5ff        43 minutes ago      475MB
openjdk             7                   d735a2057e60        10 months ago       475MB

构建并启动Docker容器

ops@leon-aliyun:~/workspace/docker-demo$ sudo docker run --publish 9999:9999 --name dd docker-demo:1.0
Server is listening on port 9999

查看Docker容器运行情况

ops@leon-aliyun:~/workspace/docker-demo$ sudo docker container ls
[sudo] password for ops: 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
c2b19a51a686        docker-demo:1.0     "java -jar docker-de鈥   About a minute ago   Up About a minute   0.0.0.0:9999->9999/tcp   dd

验证

访问http://localhost:9999/server 验证

例外处理

当出现启动docker出错时可能是CMD命令问题。如果需要进入docker查看docker中的内容可以进行如下两步操作:

# 启动docker环境并运行bash
ops@leon-aliyun:~/workspace/docker-demo$ sudo docker run -itd docker-demo:1.0 /bin/bash              
c8d1c39376c2eb6bd105a437acb1261f0ccb761b763567e92dcba508179bd6f0

# 进入启动的docker中
ops@leon-aliyun:~/workspace/docker-demo$ sudo docker attach c8d1c39376c2eb
root@c8d1c39376c2:/home/ops/workspace/docker-demo# 

避坑及其他说明

  • maven编译的插件jdk版本要与docker创建image使用基础镜像一致
  • 本次docker镜像创建过程张总并未在docker生成步骤中进行jar的生成,而是提前生成好的,实际可以根据需要去调整。

👉🏻 demo地址

发表评论