目录
打包
编写DockerFile
构建镜像
创建容器并启动容器
测试
打包
使用maven或者其他构建工具,打包可运行jar或者war,这里使用可运行jar进行部署。
编写DockerFile
创建构建目录,复制jar包到构建目录,并编写Dockerfile如下;
#基础镜像,在openjdk8的基础上构建
FROM openjdk:8
#维护人信息
MAINTAINER weihao weihao322@163.com
#复制jar包到容器根目录下
COPY ./WebsiteFetcher-1.0-SNAPSHOT.jar app.jar
#启动命令
CMD java -jar app.jar
DockerFile的结构,文件中各个命令的含义,请参考《Docker实践(四)Dockerfile》
构建镜像
进入docker,使用
docker build -t app:1 .
命令构建镜像,其中-t指定镜像的名称和标签,“.”指定在当前目录下构建镜像,构建完成后使用docker images查看镜像。
[root@ecs-7bc6-0001 weihao]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
app 1 07cb5f17ac9a 5 minutes ago 514MB
创建容器并启动容器
使用命令
[root@ecs-7bc6-0001 weihao]# docker run -itd --net=host -v $PWD/logs:/home/work/logs app:1
创建并启动容器,其中
-i,打开容器标准输入
-t,为容器分配伪终端
-d,容器后台运行
--net=host,容器网络模式选择host模式,也可选择其他网络模式。
-v $PWD/logs:/home/work/logs,将当前目录的logs目录,映射到容器的/home/work/logs日志目录。根据实际情况配置。
app:1,镜像名称和标签
Docker网络模式
--net=bridge,网桥模式,docker安装成功之后,会给系统添加一个名字叫docker0的网桥,当创建一个新容器时,容器通过DHCP获取一个和docker0同网段的IP。并默认连接到docker0,以此来实现容器和宿主即的通信。
--net=host,host模式,这个模式下创建出来的容器,没有自己的网络环境,使用宿主机的网络IP和端口。
--net=container:NAME_OR_ID,container模式,指定一个已有的容器,共享该容器的IP和端口。除了网络共享以外,文件系统,进程等还是隔离开的。
--net=none:none模式,这个模式下,docker不为容器分配网络环境,需要开发人员自己添加网卡,配置IP,因此想用pipework配置容器的IP地址,必须再none模式下进行。
启动后发现容器已经运行
[root@ecs-7bc6-0001 weihao]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b7258cfa0e3 app:1 "/bin/sh -c 'java -j…" 9 minutes ago Up 9 minutes naughty_elbakyan
测试
查看日志目录,发现构建目录下logs目录
发现构建目录的logs目录下已经写入日志
[root@ecs-7bc6-0001 logs]# ls */*
fetcher/access_log fetcher/error_log fetcher/service_log
测试服务,在宿主机本机测试
[root@ecs-7bc6-0001 weihao]# curl http://127.0.0.1:9080/test
Hello World
在容器内测试
root@ecs-7bc6-0001:/# curl http://127.0.0.1:9080/test
Hello World
因为网络使用的host模式,在其他网络的主机通过宿主机的IP测试。
测试成功。
(完)(^_^)