Docker打包微服务镜像

407 阅读4分钟

Docker打包微服务镜像

我们准备将一个微服务打包成Docker镜像,在各种服务器中进行运行。下面以learn-docker-storage为案例

微服务打包镜像

learn-docker-storage服务打包后上传到服务器

创建DockerFile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条构建镜像所需的指令和说明。

创建一个Dockerfile文件

vi Dockerfile

具体内容如下

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD learn-docker-storage-2.0-SNAPSHOT.jar app.jar
EXPOSE  8003
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

命令解释

  • FORM:定制的镜像都是基于 FROM 的镜像,这里的 openjdk 就是定制需要的基础镜像,后续操作都是基于openjdk
  • VOLUME:挂载一个数据卷,这里因为没有名称,所以是一个默认的数据卷(后面详细解释)
  • ADD:添加一层镜像到当前镜像,这里就是添加SpringBootTest镜像到当前层,并改名app.jar
  • EXPOSE:暴漏端口,因为我们的自己的端口是8003,所以我们暴漏8003
  • ENTRYPOINT:设定容器启动时第一个运行的命令及其参数,这里就是容器以启动就执行 java -jar /app.jar

打包镜像

写好DockerFile后就需要用docker build命令来构建我们的镜像了,这样就可以将我们的微服务打包成一个镜像了

构建命令格式

构建一个镜像需要使用以下命令

docker bulid -t 仓库名/镜像名:tag .

参数解释

  • -t: 镜像的名字及标签,一般命名规则是 仓库名/镜像名:tag,

    • 仓库名:一般是私服或者dockerhub等地址,如果忽略默认就是dockerhub的地址docker.io.library/
    • 镜像名称:就是我们的自己的服务名称,可以随意命名
    • tag:就是我们的版本号
  • . :这个 . 表示当前目录,这实际上是在指定上下文的目录是当前目录,docker build 命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像。

构建镜像

进入Dockerfile的目录,通过如下命令构建镜像

 docker build -t learn-docker-storage:0.0.1 .

构建完成如果出现Successfully说明已经构建成功了,

image.png

查看我们构建的镜像

使用docker images命令查看我们构建完成的镜像

docker images

我们可以看到我们的镜像就在第一个位置

image.png

运行镜像

刚才已经打包完成了镜像,现在我们运行我们自己的镜像

# 运行容器
docker run -d -p 8003:8003 learn-docker-storage:0.0.1
# 查看运行中的容器
docker ps

image.png

参数最后的learn-docker-storage:0.0.1是镜像的名称,如果启动容器可以使用镜像名称或者镜像ID

参数解释

  • -d:后台运行
  • -p:映射端口,将宿主机的8080端口映射到docker内部的8080端口上

查看启动日志

使用docker logs 容器ID来查看启动日志

docker logs -f 74c239792266

image.png

尝试访问服务

通过curl 命令来访问服务

curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool

image.png

我们发现服务调用成功了,我们基本实现了微服务改造为docker方式并运行

停止容器

我们要把刚才运行的容器停止掉,使用docker stop 容器ID 停止一个容器

docker stop 3752f7088a04

停止容器后,我们在通过进程查看是看不到容器的,但是容器还是存在我们的服务中的

查看全部容器

通过docker ps 只能看到运行中的容器,但是我们停止的容器是看不到的,可以加上-a 查看所有的容器

docker ps -a

image.png

我们可以看到 加上-a参数可以看到刚才已经停止掉的容器

启动停止的容器

想要启动一个停止的容器可以使用docker start 容器ID

docker start 3752f7088a04

image.png

这样就把刚才已经停止的容器启动了

删除容器

已经停止的容器可以使用docker rm 容器ID删除容器,但是对于运行中的容器可以加上-f参数强制删除

docker rm -f 3752f7088a04

image.png

这样可以将一个运行的容器强制删除,如果停止的容器可以通过通过docker rm删除

docker rm 3752f7088a04

这个时候就把容器给删除掉了