Docker初体验(二)- 创建docker镜像

2017-04-20  本文已影响0人  大路无疆

上一篇中解释了Docker与虚拟机的不同,以及使用它的好处--一次创建到处运行。那么这一篇就介绍怎么创建一个可以在各处运行的Docker镜像。创建Docker有不同的方式,一种是基于基础镜像创建容器,在容器中做相关配置,安装运行应用需要的包,然后提交新的镜像, 这种方式适合配置复杂的镜像;另外一种是使用Dockerfile,自动化的生成镜像,这种方式适用于需要自动化的场景。

手工配置镜像

在最近的小项目中,我们要创建一个Jenkins的Docker镜像,它负责编译打包工程,安装AWS CLI, 打包应用的Docker镜像,所以需要安装很多的组件。接下来我们来一步一步配置我们的Docker镜像。

首先,我们从DockerHub上找到一个基础镜像,我们运行命令来创建进行配置的基础容器:

docker run -d  -p 18080:8080  -v ${PWD}/jenkins_home:/var/jenkins_home jenkins

登陆容器,并执行安装操作:

docker exec -it --user jenkins containerId bash

查看容器的相关配置信息:

docker inspect containerId

装好相关应用后将配置的容器提交到本地镜像:

docker commit containerId lane0201/jenkins:latest

也可以添加环境变量,开放新的接口和卷,例如

docker commit --change "ENV DEBUG true"  --change  "VOLUME /tmp" -c "EXPOSE 8080" containerId  lane0201/jenkins:version1

提交本地镜像到远程仓库,之后就可以根据新的镜像创建容器了:

docker push lane0201/jenkins:latest

相关命令的具体配置参考官方的docker文档

使用Dockerfile生成镜像

docker build命令根据指定的Dockerfile文件生成镜像, 例如:

docker build -f /path/to/a/Dockerfile .

一个简单的Dockerfile是这样的:

FROM frolvlad/alpine-oraclejdk8:slim

VOLUME /tmp

ENV MYSQL_HOST 127.0.0.1

ENV MYSQL_PORT 3306

ENV MYSQL_USER myUser

ENV MYSQL_DATABASE myDatabase

ADD 17high_web-0.0.1-SNAPSHOT.jar app.jar

RUN sh -c 'touch /app.jar'

ENV JAVA_OPTS=""

ENTRYPOINT [ "sh", "-c", "sleep 15 && java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

关于Dockerfile的具体配置可以参考docker build文档

上一篇下一篇

猜你喜欢

热点阅读