一、简单的介绍一下docker是什么(本文主要讲的是docker在windows上的应用)
Docker:是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器。
Docker的核心概念:镜像、仓库、容器
Docker镜像:是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
Docker 利用容器(Container):来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
仓库(Repository):是集中存放镜像文件的场所
一次docker的操作流程
- 一般的流程中,client发pull命令从仓库把image拉到docker host,然后通过run命令指挥image到host上面弄一个container来跑这个image。
- 当然也可以是相反的流程,client 通过build命令在host上面创建一个自己的image,然后通过push命令把image推到仓库。之后这个image可以被别的人或者自己pull。
2、 DOCKER在windows上的安装
2.检查电脑环境
2-1.检查版本,为了运行docker,你的机器必须是windows7或以上的64bit系统。
2-2.另外,你的机器必须支持硬件虚拟化技术(Hardware Virtualization Technology)并且已被启用。对于windows10系统来说,你可以在 任务管理器->性能 中查看到你的电脑是否开启了虚拟化
2-3.怎么开启虚拟化,因为电脑型号不一样,所以每台电脑进入BOIS的方式不一样,重启电脑,我的电脑是Lenovo的ThinkPad,所以我按的是F1,进入BOIS页面,找到Security,把Security下面的Virtualization里面的Intel(R) Virtualization Technology的状态改为Enable
然后再重启就好了。
3下载dockerToolbox
3-1. https://get.daocloud.io/toolbox/,下载新版本
3-2 全部next就可以了
安装完成
安转成功之后桌面会多三个图标
如果安装完成之后桌面少了一个Oracle VM VirtualBox 的话,找到你的dockertoolbox
安装目录下面的installers下面的virtualbox,双击virtualbox.msi进行安装。
双击Docker Quickstart Terminal图标,启动一个终端,第一次运行会比较就,一般会报下载对应的镜像iso到对C:下的docker路径的错误,把dockertoolbox下的boot2docker.iso复制放到你docker运行下载镜像的位置,再重新启动就可以了。
启动成功会出现这样的界面
三、docker使用
1、docker的常用命令
一个docker引擎开启之后是空的,你需要用docker引擎去build或者下载你自己的镜像然后运行,通过暴漏出来的端口号去访问。
下面以我的windows为例
1-1、如果你想要去查看一个镜像的运行效果,你需要先下载一个镜像,直接运行命令docker pull 镜像名
他会自动去下
下载成功之后,运行docker images查看已经下好的镜像
使用docker run 直接运行镜像
-d 是容器在后天运行
-p 是暴漏出来的端口号
第一个是你要暴漏出来通过地址访问的端口号,第二个本地主机端口号
指令指南
- 容器生命周期管理
- 容器操作运维
- 容器rootfs命令 — docker [commit|cp|diff]
- 镜像仓库
- 本地镜像管理
- 其他命令 — docker [info|version](命令太多,根据实际使用情况再请自行百度)
2、使用dockerfile制作镜像
2-1、Docker与微服务-使用Maven插件构建Docker镜像(可以参照)
2-2、打开我们的项目,在我们项目的src/main下面新建一个docker文件,在docker文件里面新建Dockerfile文本
FROM java:8
VOLUME /tmp
ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Dockerfile文件
修改pom.xml
<build>
<plugins>
<!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
<!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository
name ... only [a-z0-9-_.] are allowed -->
<!-- 如果要将docker镜像push到DockerHub上去的话,这边的路径要和repo路径一致 -->
<imageName>eacdy/test</imageName>
<!-- 指定Dockerfile所在的路径 -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 以下两行是为了docker push到DockerHub使用的。 -->
<serverId>docker-hub</serverId>
<registryUrl>https://index.docker.io/v1/</registryUrl>
</configuration>
</plugin>
</plugins>
</build>
这样build之后的项目会报找不到2375端口的错误
需要我们去修改dockerhost的端口
输入docker-machine env
$Env:DOCKER_TLS_VERIFY = "1"
$Env:DOCKER_HOST = "tcp://192.168.99.100:2376"
$Env:DOCKER_CERT_PATH="C:\Users\Administrator\.docker\machine\machines\default(每个人的路径都不一样)
再去修改pom.xml
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<imageName>eacdy/test</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!-- 解决Connect to localhost:2375的问题的其中一种方式,注意要跟docker-machine env相一致 -->
<dockerHost>https://192.168.99.100:2376</dockerHost>
<dockerCertPath>C:\Users\Administrator\.docker\machine\machines\default</dockerCertPath>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 以下两行是为了docker push到DockerHub使用的。 -->
<serverId>docker-hub</serverId>
<registryUrl>https://index.docker.io/v1/</registryUrl>
</configuration>
</plugin>
这样build的项目就不会报错了
(作者本人亲测有用)
四、总结
docker从一个概念到了解,感觉功能还是很强大的,把项目打包成一个镜像,放到容器里去跑通过暴露出来的端口就可以访问了,非常方便实用。本文粗劣的介绍了docker的安装和使用,如果有问题可以留言,写的不好也忘指出,下一篇继续介绍docker和微服务相关的知识。