0
点赞
收藏
分享

微信扫一扫

基于Docker的部署


Docker是使用Dokerfile文件来编译自己的镜像的。

Dockerfile

Dockerfile主要有如下的指令。

1.FROM 指令

FROM指令指明了当前镜像继承的基镜像。编译当前镜像时会自动下载基镜像,如:

FROM ubuntu

2. MAINTAINER 指令

MAINTAINER指令指明了当前镜像的作者,如:

MAINTAINER wyf

3. RUN 指令

RUN指令可以在当前镜像上执行Linux命令并形成一个新的层。RUN是编译时(build)的动作。
示例可有如下两种格式,CMD和ENTRYPOINT也是如此:

RUN /bin/bash -c "echo helloworld"

RUN ["/bin/bash", "-c", "echo hello"]

4. CMD指令

CMD指令指明了启动镜像容器时的默认行为。一个Dockerfile里只能有一个CMD指令。CMD指令里设定的命令可以在运行镜像时使用参数覆盖。CMD是运行时(run)的动作,如:
CMD echo “this is a test”
可被docker run-d image_name echo”this is not a test”覆盖。

5. EXPOSE指令

EXPOSE指明了镜像运行时的容器必需监听指定的端口,如:

EXPOSE 8080

6. ENV指令

ENV指令可用来设置环境变量,如:

ENV myName=wyf

ENV myName wyf

7. ADD 指令

ADD指令是从当前工作目录复制文件到镜像目录中去,如:

ADD test.txt /mydir/

8. ENTRYPOINT 指令

ENTRYPOINT指令可让容器像一个可执行程序一样运行,这样镜像运行时可以像软件一样接收参数执行。ENTRYPOINT是运行时(run)的动作,如:

ENTRYPOINT ["/bin/echo"]

我们可以向镜像传递参数运行:

docker run -d image_name "this is not a test" \

项目目录及文件

我们使用源码的ch10docker来作为演示用的Spring Boot项目,这个项目很简单,只修改了入口类,代码如下:

/**
* @author yuhao.wang
*/
@Controller
public class SwaggerController {

@GetMapping("/")
public String swaggerUi() {

return "redirect:/swagger-ui.html";
}
}

在CentOS 7.1上的/home/app目录下放入我们编译好的jar包,如spring-boot-student-banner-0.0.1-SNAPSHOT.jar,在同级目录下新建一个Dokcerfile文件,如:

[root@localhost app]# ls
Dokcerfile spring-boot-student-banner-0.0.1-SNAPSHOT.jar
[root@localhost app]#

Dockerfile文件内容如下:

FROM java:8 

MAINTAINER wyh

ADD spring-boot-student-banner-0.0.1-SNAPSHOT.jar app.jar

EXPOSE 80

ENTRYPOINT ["java","-jar","/app.jar"]

代码解释:
1. 基镜像为Java,标签 版本. 为8。
2. 作者为wyh。
3. 将我们的spring-boot-student-banner-0.0.1-SNAPSHOT.jar添加到镜像中,并重命名为app.jar。
4. 运行镜像的容器,监听80端口。
5. 启动时运行java -jar app.jar。

编译镜像

在/home/app目录下执行下面命令,执行编译镜像:

docker build -t wisely/rabbitmqdemo .

其中,wisely/rabbitmqdemo为镜像名称,我们设置wisely作为前缀,这也是Docker镜像的一种命名习惯。
注意,最后还有一个“.”,这是用来指明Dockerfile路径的,“.”表示Dockerfile在当前路径下。
编译的过程如下所示:

[root@localhost app]# docker build -t wisely/rabbitmqdemo .
Sending build context to Docker daemon 18.09 MB
Step 1 : FROM java:8
Trying to pull repository docker.io/library/java ...
8: Pulling from docker.io/library/java

5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:34959eed5df6bfe74a17fbf459ed29505d51a48d5cb4a39f215b613c65b8023b
---> d23bdf5b1b1b
Step 2 : MAINTAINER wyh
---> Running in 0b3f96b31980
---> 4c7c4c54a5e5
Removing intermediate container 0b3f96b31980
Step 3 : ADD spring-boot-student-banner-0.0.1-SNAPSHOT.jar app.jar
---> 4193c2e8f6c9
Removing intermediate container 0fe2f499d5af
Step 4 : EXPOSE 80
---> Running in 855a2fc6ad27
---> 059bbcc036af
Removing intermediate container 855a2fc6ad27
Step 5 : ENTRYPOINT java -jar /app.jar
---> Running in ba217b0e2951
---> cc2264154e35
Removing intermediate container ba217b0e2951
Successfully built cc2264154e35

这时我们查看本地镜像,如:

[root@localhost app]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wisely/rabbitmqdemo latest cc2264154e35 2 minutes ago 661.2 MB
docker.io/java 8 d23bdf5b1b1b 12 months ago 643.1 MB
[root@localhost app]#

这里我们可以看到rabbitmqdemo和java两个镜像。

运行

通过下面命令运行:

docker run -d --name appdemo -p 80:80 wisely/rabbitmqdemo

查看我们当前的容器状态,如下所示:

[root@localhost app]# docker run -d --name appdemo -p 80:80 wisely/rabbitmqdemo
9da20077be1c672acbcdad0b582c45794305698e1d165c0d6376d3771232692b
[root@localhost app]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9da20077be1c wisely/rabbitmqdemo "java -jar /app.jar" 19 seconds ago Up 17 seconds 0.0.0.0:80->80/tcp appdemo
[root@localhost app]#

当前的CentOS系统的ip为192.168.35.128,访问​​http://192.168.35.128​​ ,我们可以看到如图所示页面。

基于Docker的部署_Docker-部署

源码

​​https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases​​

spring-boot-student-banner 工程



举报

相关推荐

0 条评论