提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
- 采用手动docker镜像构建方式,不依赖于maven等构建工具,这种方式可以针对任何程序创建镜像,本文以java应用为例。
一、构建步骤
1.安装docker工具
-
准备好一台linux系统服务器
-
安装docker步骤略过(上篇文章有写)
-
输入命令docker info表示安装成果
-
创建文件夹
[root@dev1 build_image]# pwd /root/build_image [root@dev1 build_image]#
2.上传编译后的可运行程序
[root@dev1 build_image]# ls
nat-server.jar
[root@dev1 build_image]#
3.创建Dockerfile文件
[root@dev1 build_image]# touch Dockerfile
[root@dev1 build_image]# ls
Dockerfile nat-server.jar
[root@dev1 build_image]#
- 编辑Dockerfile文件
#作为基础镜像
FROM openjdk:8-jdk-alpine
#设置镜像源,apk add是alpine系统安装命令,同时设置时区,防止时间问题
RUN echo "http://mirrors.aliyun.com/alpine/v3.12/main/" > /etc/apk/repositories && apk add --no-cache procps curl bash tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
#安装软件,根据用户自己选择
RUN set -xe && apk --no-cache add ttf-dejavu fontconfig
#创建可执行程序所在的路径
RUN mkdir -p /usr/local/nat/
#将Dockerfile所在目录下的可执行程序复制到容器镜像中的文件夹中
ADD nat-server.jar /usr/local/nat/
#启动容器内的java程序
ENTRYPOINT java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap $JAVA_OPTS -jar -Duser.timezone=Asia/Shanghai /usr/local/nat/nat-server.jar
用openjdk:8-jdk-alpine 代替 java:8 可以大量减少镜像的体积,同时解决容器限制内存大小的问题
4.执行手动构建命令
- docker build -t nat-server:1.0.0 .
[root@dev1 build_image]# docker build -t nat-server:1.0.0 .
Sending build context to Docker daemon 5.766MB
Step 1/8 : FROM openjdk:8-jdk-alpine
---> a3562aa0b991
Step 2/8 : ENV TZ=Asia/Shanghai
---> Using cache
---> 373f003debbc
Step 3/8 : RUN echo "http://mirrors.aliyun.com/alpine/v3.12/main/" > /etc/apk/repositories && apk add --no-cache procps curl bash tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
---> Using cache
---> 878fc98f99a6
Step 4/8 : RUN set -xe && apk --no-cache add ttf-dejavu fontconfig
---> Using cache
---> 8b4f40013838
Step 5/8 : RUN mkdir -p /usr/local/nat/ && mkdir -p /usr/local/nat/config/
---> Using cache
---> 242e9799ef45
Step 6/8 : ADD nat-server.jar /usr/local/nat/
---> Using cache
---> 92eba017d115
Step 7/8 : ADD ./config/config.properties /usr/local/nat/config/
---> Using cache
---> 9b7c2e991e50
Step 8/8 : ENTRYPOINT java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap $JAVA_OPTS -jar -Duser.timezone=Asia/Shanghai /usr/local/nat/nat-server.jar /usr/local/nat/config/config.properties
---> Using cache
---> aa0954a76595
Successfully built aa0954a76595
Successfully tagged nat-server:1.0.0
[root@dev1 build_image]#
docker build -t nat-server:1.0.0 . 后面有个.不要弄丢了噢
-t 表示tag,定义镜像的名字和版本
[root@dev1 build_image]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nat-server 1.0.0 aa0954a76595 About an hour ago 136MB
出现以上表示构建成功,然后可以开始启动docker
5.Push到阿里容器镜像中
#登录
$ sudo docker login --username=xxxx registry.cn-shanghai.aliyuncs.com
#修改镜像tag成阿里的镜像tag
$ sudo docker tag nat-server:1.0.0 registry.cn-shanghai.aliyuncs.com/xxx/nat-server:1.0.0
#通过docker push命令到阿里镜像中
$ sudo docker push registry.cn-shanghai.aliyuncs.com/xxx/nat-server:1.0.0