十分钟搞定Win10 Docker环境

目录

Docker简介

没有虚拟化的原始时代

虚拟化部署过度时代

容器部署时代

Docker Desktop for Windows的安装

Docker核心概念

用IDEA编写Spring Boot测试项目

配置Docker设置

IDEA配置Docker测试连接

编写Docker文件

在IDEA中运行Dockerfile


Docker简介

最近几年来,容器算是时下非常火的一门技术了,Docker作为一种“轻量级”容器,想必大家已经都听说过了。2010年,几个大胡子年轻人在旧金山成立了一家做 PaaS 平台的公司,起名为dotCloud,后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为Docker,Docker从此便诞生了。

Docker采用Go语言编写,他本身也并不是一个容器,而是容器的引擎,可以把应用以及依赖包放到一个可移植的容器中,然后发布到任何流行的 Linux 系统上,通过这种方式实现虚拟化。相信大家的电脑里都安装过虚拟机,像VMWare或者Oracle VM VirtualBox之类的,通过安装虚拟机,虚拟出一套类似我们的电脑的另外一台“子电脑”,跟我们真实的电脑同时运行,拥有看似独立的CPU、内存以及硬盘空间等设备,与我们真实的电脑互相隔离,互不干扰。而Docker这种容器技术,也属于虚拟化技术,只不过相对虚拟机来说更加轻量级。

没有虚拟化的原始时代

没有虚拟化技术的时代,部署应用程序系统需要在机房里找到一台实实在在的物理机,在物理机上安装操作系统、中间件,然后部署程序,对外发布,如图所示:

这种模式的部署方式,缺点非常明显:

  • 成本较高,单台物理服务器成本是非常高的,无论小机或者PC Server,造价都是比较贵的。
  • 部署慢,我们要先安装服务器操作系统,然后安装操作系统,安装中间件,最后部署应用程序,如果出现问题,一个误操作可能都要浪费大量时间。
  • 资源浪费严重,单台服务器性能比较好,部署的应用程序不能完全合理利用硬件资源,容易造成浪费。
  • 扩展迁移效率低,如果需要扩展迁移应用程序,需要在准备相同的服务器资源,效率低下,速度慢。

虚拟化部署过度时代

虚拟化技术出现之后,解决了上述原始时代的一些问题。我们可以借助虚拟化技术,将服务器虚拟成若干独立资源,部署多套应用,互相隔离,充分利用硬件资源,使硬件资源充分发挥最大作用。

使用虚拟机的优点:

  • 更能充分发挥硬件资源的最大化利用价值
  • 更容易扩展应用及应用程序部署
  • 基于虚拟化技术可以更快速搭建云环境

虚拟机的缺点也比较明显,比如过分的利用了硬件服务器资源可能会导致性能急剧下降;如果虚拟机出现问题,可能会产生连影响,并且问题的排查可能也会比较麻烦,需排查是虚拟机软件的问题或底层系统的问题;最后适用于服务器的稳定虚拟化技术授权也需要花费一些成本。

容器部署时代

相比虚拟机时代,Docker的容器化部署更加简单灵活、易用。Docker通过底层的Linux技术(LXC等),对Linux进程进行封装隔离,而被隔离的进程也被称为容器,完全独立于宿主机的进程,我们套用官方的图来看一下:

Docker相对于虚拟机来说,在操作系统级别进行隔离,而且两者之间也存在一些根本性差异:

来源摘自《Docker-从入门到实践》

如果想了解更多关于Docker的知识,可以参考官方文档或者搜索一下。

Docker Desktop for Windows的安装

Windows10(MAC)下安装Docker环境

在win10下安装Docker非常方便,安装之前我们要看一下我们电脑是否启用了虚拟化,打开任务管理,切换到性能选项卡上,可以看到如下图。

如果没有启用,打开控制面板,找到程序和功能,选则打开或关闭Windows功能,如下图,勾选上Hyper-V选项。

我们去官方下载Docker for Desktop Window版(也有MAC版)

Win10专业版64位系统直接下载Docker Desktop就可以了,如果其他版本去下载安装Docker Toobox,本文介绍Docker Desktop的安装及使用。下载完毕后,开始安装

安装后,重新启动电脑。 再次登录之后,发现docker已经安装成功,桌面和任务栏上有Docker的图标,并且Docker默认随机启动,是Running的状态,如下图:

Docker核心概念

容器技术的核心概念包括仓库(Repository)、容器(Container)、镜像(Image)三个。

镜像:简单地理解,Docker镜像就是一个Linux的文件系统(Root FileSystem),这个文件系统里面包含可以运行在Linux内核的程序以及相应的数据。Docker可以看做是一个独立的用户空间,当Docker通过镜像创建一个容器时,就是将镜像定义好的用户空间作为独立隔离的进程运行在宿主机的Linux内核之上。

与镜像相关的命令:

Usage:  docker image COMMAND

Manage images

Commands:
build       Build an image from a Dockerfile(构建镜像的命令)
history     Show the history of an image(显示镜像构建历史过程)
import      Import the contents from a tarball to create a filesystem image(导入一个由容器导出的镜像)
inspect     Display detailed information on one or more images(显示一个镜像的详细信息)
load        Load an image from a tar archive or STDIN(从一个文件或标准输入流中导入镜像)
ls          List images(查看镜像列表)
prune       Remove unused images(删除虚悬镜像)
pull        Pull an image or a repository from a registry(从仓库拉取镜像)
push        Push an image or a repository to a registry(推送镜像到仓库)
rm          Remove one or more images(删除镜像)
save        Save one or more images to a tar archive(streamed to STDOUT by default)(保存镜像到文件)
tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE(给镜像打标签)

容器:容器是通过镜像来创建的,生成的容器是一个独立于宿主机器的隔离进程,并且有属于容器自己的网络和命名空间。

与容器相关的命令:

Usage:  docker container COMMAND

Manage containers

Commands:
attach      Attach local standard input, output, and error streams to a runnin                                                                                             g container
commit      Create a new image from a container's changes(把容器保存为镜像)
cp          Copy files/folders between a container and the local filesystem
create      Create a new container(创建一个新的容器)
diff        Inspect changes to files or directories on a container's filesyste                                                                                             m
exec        Run a command in a running container(在一个运行的容器中执行命令)
export      Export a container's filesystem as a tar archive
inspect     Display detailed information on one or more containers
kill        Kill one or more running containers(杀死一个或多个正在运行的容器)
logs        Fetch the logs of a container
ls          List containers(显示本地容器列表)
pause       Pause all processes within one or more containers
port        List port mappings or a specific mapping for the container
prune       Remove all stopped containers
rename      Rename a container(重命名容器)
restart     Restart one or more containers(重启一个或多个容器)
rm          Remove one or more containers(删除一个或多个容器)
run         Run a command in a new container(运行一个新的容器)
start       Start one or more stopped containers
stats       Display a live stream of container(s) resource usage statistics
stop        Stop one or more running containers(停止一个或多个容器)
top         Display the running processes of a container
unpause     Unpause all processes within one or more containers
update      Update configuration of one or more containers
wait        Block until one or more containers stop, then print their exit codes

仓库:存放镜像的地方,由于镜像之间独立存在,所以镜像多的时候需要有个地方专门存储,这就是仓库。

详细的Docker概念、架构、命令等请参考官方文档或搜索相关资源。

用IDEA编写Spring Boot测试项目

为了试用一下我们的Windows Docker功能,我们先用IDEA先创建一个简单的Spring Boot项目,然后编写一个dockerfile使这个项目部署到docker环境并测试是否可用。

编写Spring Boot Demo工程

集成Spring Web

编写代码

package org.dothwinds.dockertest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DockerTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(DockerTestApplication.class, args);
    }

    @RequestMapping("/sayHi")
    public String sayHi(@RequestParam(value = "name", defaultValue = "dothwinds") String name){
        return "Hi," + name + " welcome to my world.";
    }

}

修改配置文件application.properties,指定项目端口号为8080,如下图可以看到服务没有问题。

server.port=8080

启动服务测试

然后我们运行Maven package,在target目录下打包生成docker-test-1.0.0.jar文件 。

配置Docker设置

首先我们需先设置一下Docker for Desktop。右键点击Docker任务栏图标,打开settings

首先选中这个选项Expose daemon on tcp://localhost:2375 without TLS,这个选项可以让我们在本地调或远程进行连接。

然后由于我们需要先下载基础镜像环境,所以还需要先配置镜像加速,加速点为国内站点,下载速度会很快,我们配置一个网易163的加速站点"http://hub-mirror.c.163.com",然后应用并重启。

重启成功,设置已经生效了。如果配置文件修改的不符合格式,那么Docker不会重启成功,这个时候需要回复原配置文件在进行修改尝试。

IDEA插件配置Docker测试连接

IDEA默认已经安装Docker插件(如果没安装,自己去安装一下),我们只需要配置一下就可以了,如图,打开Settings,找到Docker,添加一个docker配置。

默认不需要修改内容,可以看到能够连接Docker成功。下面我们编写一个Docker文件。

编写Docker文件

在项目工程里新建dockerfile文件,并编辑为如下内容:

#拉取java8基础镜像,linux + java8运行环境
FROM java:8
#VOLUME为容器上的目录,用于在镜像文件中创建一个挂载点目录,以挂载Docker host上的卷或其它容器上的卷
VOLUME /tmp
#拷贝打好包的jar文件到为app.jar
ADD target/*.jar app.jar
#暴露docker 8080端口
EXPOSE 8080
#指定默认的运行程序,运行我们的Spring Boot程序,通过本机8080可以访问到
ENTRYPOINT ["java","-jar","/app.jar"]

在IDEA中运行Docker Service

然后新建一个docker运行选项

选则Dockerfile配置

选则我们配置好的内容并执行,观察build log看有没有出错,等待Build完成。

Build完成会自动运行我们的java -jar命令启动我们编写好的程序

在本机访问测试一下,如下图,可以成功访问到,至此,Win 10环境下的docker就搞定了,整体来说还是很简单的,但是要想熟练运用Docker还有很长的路要走,加油~~

参考资料:

https://docs.docker.com/

http://dockone.io/article/9249

https://blog.csdn.net/yanhongbin1993/article/details/81436849

https://juejin.im/post/5d4522c1f265da03e05af5f5

发布了18 篇原创文章 · 获赞 33 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Dothwinds/article/details/105021502