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