上一篇,我们已经成功安装好了docker,这一篇,我就要讲一下怎么使用。
还是先说说docker吧。都说docker是一个容器,可是怎么理解这个容器?你必须知道下面三点
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
1.Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
2.镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。我们可以自己build镜像,也可以从Docker Hub去拉取很多官方镜像。
3.docker有官方的仓库(第二点的Docker Hub),里面有很多已经构建好的镜像,我们只需要去下载就好了,专业术语就是pull,拉取,当然也有其他仓库地址,也有私有仓库,就是自己构建一个仓库来存储镜像,这些大家可以参考一下官方中文文档,里面也有很多基本命令,我们回归正题。
相信通过上面三点,你对docker正体有了大致的了解,接下来我举个简单的例子,手把手教你部署一个web项目,过程中会介绍一下常用的docker指令。
1.首先,我们用idea创建一个springboot项目。这个我就不详细描述了,创建一个controller
@RestController
@RequestMapping("/test")
public class DockerTestController {
@RequestMapping("/one")
public String testOne() {
return "hello world";
}
}
server.port设置成8080,然后用maven package打包。当然要在pom文件中设置build参数,不然运行会报错,参考我这篇文章。
2.将打号的jar包扔到linux上去,目录你随意就好,我这里的路径是
[root@VM-12-12-centos java_test]# pwd
/data/java_test
3.新建一个Dockerfile,注意这里的名字是默认的,一般都不会改它,如果你实在想改名字,build的时候加入-f参数就行。
Dockerfile是一个文本文档,它包含用户可以在命令行上调用的所有命令,并组装一个映像。Dockerfile怎么理解呢,你可以看做是mapper.xml上面那一段声明,固定的,只是参数可以增删而已。
[root@VM-12-12-centos java_test]#touch Dockerfile
[root@VM-12-12-centos java_test]# vim Dockerfile
创建之后我们vim这个文件,编写一些东西。
FROM java:8
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 80
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
注意,ADD docker-0.0.1-SNAPSHOT.jar app.jar 这个jar包要跟你自己项目打成的jar包命名要一致。其他参数,我们下回在讲,这不影响我们部署项目。或者大家可以参考这边文章Dockerfile 介绍
接下来看看我们的目录,就两个文件。
[root@VM-12-12-centos java_test]# ls
docker-0.0.1-SNAPSHOT.jar Dockerfile
4.上面我们说到了,要将项目构建成一个镜像,才能被docker容器运行,现在准备工作做好了,我们开始构建。
docker build -t docker-demo .
-t:tag标签的意思,docker-demo为标签名,也可以说是镜像名,“.”表示当前目录。在当前目录下构建一个标签名为docker-demo的镜像。
5.查看我们的镜像。docker images 或者docker image ls都可以查看我们的镜像列表。image_id就是唯一标识符。
当然不要镜像的话,也可以执行docker image rm [image_id] 来删除镜像,这里image_id不需要输入完全,docker所有操作都不需要完全输入id,只要能唯一确定就行了。比如我删除这个镜像只需要输入docker image rm 3eb 就行了。
6.用docker容器运行我们的镜像
docker run --name docker-six -d -p 9001:8080 docker-demo
参数解释一下,–name:运行起来叫啥名字,-d后台运行,-p端口映射 后面的docker-demo就是我们第4步构建镜像的时候起的名字。重点说下这个端口映射:-p 9001:8080,我们后面的8080代表我们项目的端口server.port,前面那个代表我们想用9001去映射8080端口,这样映射之后,我们浏览器输入9001端口就能访问到我们项目的8080端口了,如果不想映射,则可以不要这个参数。当然,不选择映射也可以这样设置:-p 8080:8080
7。看看我们的结果,浏览器访问一下,可以看到我们项目在docker中是启动成功了的。
8.一些常用的容器操作
(1)用命令看容器:docker container ls查看当前所有运行的容器
[root@VM-12-12-centos java_test]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a50708893e01 docker-demo "java -Djava.secur..." 29 hours ago Up 29 hours 80/tcp, 0.0.0.0:8080->8080/tcp docker-six
[root@VM-12-12-centos java_test]#
(2)对容器的常用操作,前面一个run,还有停止,删除等等。
[root@VM-12-12-centos java_test]# docker container stop a50
a50
[root@VM-12-12-centos java_test]#
a50就是CONTAINER ID 为:a50708893e01的简写
(3)停止之后的容器怎么查看呢,只需要在ls后面加个参数-a就行了。
[root@VM-12-12-centos java_test]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a50708893e01 docker-demo "java -Djava.secur..." 29 hours ago Exited (143) About a minute ago docker-six
(4)删除一个容器项目
docker container rm a50
如果容器正在运行想要删除会报错的,这是后再加个参数-f就行了,这时候容器自行会去kill掉
docker container rm -f a50
(5)我们run的时候 可以用docker logs 容器id来查看启动日志
以上就是全部内容了,希望对大家有所帮助。