前一阵试了试写Dockerfile创建docker image,但有时全靠Dockerfile写实在有些难度,退而求其次试一试使用commit来创建镜像:
想了想干脆创建一个Java+Scala+Tomcat的环境好了,首先创建一个拥有操作系统的container:
docker run -i -t ubuntu /bin/bash
其中,-it的意思是这个:
-t, --tty Allocate a pseudo-TTY -i, --interactive Keep STDIN open even if not attached
然后使用docker cp命令将本地的tar包传入容器
cloud@cloud5:~/docker$ docker cp --help Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH Copy files/folders between a container and the local filesystem Use '-' as the source to read a tar archive from stdin and extract it to a directory destination in a container. Use '-' as the destination to stream a tar archive of a container source to stdout. --help Print usage -L, --follow-link Always follow symbol link in SRC_PATH
然后将这些包解压并删除:
tar -zxvf ...... rm ....
接下来配了/etc/profile和/etc/rc.local,设置了环境变量和开机自启动,并重启容易docker restart env。
然后问题来了,rc.local和/etc/profile都没有生效,docker container肯定不是完全启动,但是启动哪些我不是很清楚,只能通过迂回方式解决:手动启动/etc/rc.local。首先登录我们的container
docker exec -it env bash
使用docker自带的命令要远好于install ssh,如果在本地执行使用上面的命令就可以实现修改container的功能,我们将/etc/profile中配置好的环境变量写入rc.local,写之后的rc.local是这样的:
#--------------JAVA-------------------- JAVA_HOME=/usr/local/jdk/ PATH=${PATH}:${JAVA_HOME}/bin CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export JAVA_HOME PATH CLASSPATH #--------------SCALA------------------ SCALA_HOME=/usr/local/scala-2.10.5/ PATH=${PATH}:${SCALA_HOME}/bin export SCALA_HOME PATH #-------------TOMCAT------------------ CATALINA_HOME=/usr/local/tomcat CATALINA_BASE=/usr/local/tomcat PATH=${PATH}:${CATALINA_HOME}/bin export CATALINA_HOME CATALINA_BASE PATH /etc/init.d/ssh start /usr/local/tomcat/bin/startup.sh /bin/bash exit 0
接下来使用docker commit env docker-env命令创建一个image。之后试试这个image是否可用
docker run --name tomcat -i -t -p 50016:22 -p 50017:8080 docker-env /etc/rc.local
访问 localhost:50017发现可以访问tomcat,设置成功。我在执行run的时候设置它的启动命令是/etc/rc.local,这样就可以将我们tomcat直接开机启动,并且将环境变量加入进来,由于在试用时走了一些弯路,所以我这里还装了vim和ssh,所以image略大,如果不装这两个会小一些。创建出来的tomcat打上war包可以部署web服务,这样在服务迁移时便会简单许多,至少只装一个docker应该就可以了。。