Docker技术简析


Docker技术简析

Docker相对于其他虚拟技术的优势

Docker比虚拟机节省空间和内存。因为虚拟机虚拟的是操作系统,而操作系统都很庞大。

Docker比虚拟环境(Virtual Environments)能做的更多。如Python虚拟环境,依然依赖本机的安装文件,不能虚拟数据库运行环境,无法导出为他人使用等。

Docker的一些命令

# 可以看现在docker系统的情况
$ docker info

# 看我们现在有几个image
$ docker image ls

# 查看container的运行情况(正在运行中、暂停和停止的image)
$ docker container ls -la

实际使用docker来运行Spring Boot项目

首先在项目根目录运行package命令打包项目到jar包

$ mvn package spring-boot:repackage

2,在项目根目录创建dockerfile

# Start with a base image containing Java runtime
FROM openjdk:8-jdk-alpine
# Add Maintainer Info
LABEL maintainer="[email protected]"
# Add a volume pointing to /tmp
VOLUME /tmp
# Make port 8080 available to the world outside this container
EXPOSE 8080
# The application's jar file
ARG JAR_FILE=target/websocket-demo-0.0.1-SNAPSHOT.jar
# Add the application's jar to the container
ADD ${JAR_FILE} websocket-demo.jar
# Run the jar file 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/websocket-demo.jar"]

以上代码中2处的websocket-demo-0.0.1-SNAPSHOT.jar应改为第一步打包好的jar包名。

3,然后build它

$ docker build -t spring-boot-websocket-chat-demo .

可能会遇到报错:

Get https://registry-1.docker.io/v2/library/openjdk/manifests/8-jdk-alpine: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fopenjdk%3Apull&service=registry.docker.io: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

这时修改系统DNS为8.8.8.8,一般可解决问题。

4,运行

$ docker run -p 5000:8080 spring-boot-websocket-chat-demo

5,在游览器打开:0.0.0.0:5000

导出image到另一个机器上运行

这是Docker的一个重要功能。当我们在本机开发好功能后,我们通常要部署到生产或者测试机器上。

# 你需要把Docker image存为一个文件:
$ docker save -o <path for generated tar file> <image name>

# 然后复制文件到新机器,load它。
$ docker load -i <path to image tar file>

# PS: 可能需要在命令前加sudo.

# 注意在存为文件时,要指示文件名:
docker save -o c:/myfile.tar centos:16

参考

A Beginner’s Guide to Docker

Dockerizing your Spring Boot applications