Han Jianchun个人博客 Beautiful Architecture in Software Design

docker安装部署javaweb

2017-04-14
hanjianchun

docker容器安装部署javaweb项目

安装启动查看步骤

安装docker

yum pull docker

启动、关闭和重启docker服务

service docker start
service docker stop
service docker restart

设置为开机自启动

systemctl enable docker

下载centos镜像

docker pull centos

查看所有的镜像

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              a8493f5f50ff        7 days ago          192.5 MB

新建并启动centos容器

docker run -i -t -v /mnt/software/:/mnt/software/ centos:latest /bin/bash  
1. 其中,相关参数包括:  
2. -i:表示以"交互模式"运行容器  
3. -t:表示容器启动后会进入其命令行  
4. -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>  

查看docker容器的进程

docker ps	#查看正在运行的容器
docker ps -a	#查看所有的容器
docker ps -l	#查看最近一次的容器

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                            PORTS                    NAMES
63ef725483b8        tomcat_api_v1:01    "/bin/sh -c '/root/ap"   58 minutes ago      Up 58 minutes                     0.0.0.0:8888->8080/tcp   tomcat_api_01

已存在容器的执行命令

docker stop {CONTAINER ID}		#关闭容器
docker stop $(docker ps -q)		#停止全部运行的容器
docker start {CONTAINER ID}		#开启容器
docker attach {CONTAINER ID}		#1.进入开启的容器
docker exec -it {CONTAINER ID} /bin/bash	#2.进入开启的容器
在进入容器之后就可以安装jdk和tomcat并配置环境变量 > 删除容器和镜像

docker rm {CONTAINER ID}	#删除关闭的容器
docker rm $(docker ps -aq)	#删除全部的容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)	#关闭并删除全部的容器
docker rmi	${IMAGE ID}		#删除没有容器依赖的镜像

使用[docker commit]制作镜像

commit制作镜像会把一些没用的全部打包过来,比如我安装了nginx,redis,tomcat;现在我只需要tomcat容器,然后commit制作了一个镜像,会把nginx和redis全部打包进来,docker history {IMAGE ID} 使用这个命令可以看到其实多了很大的空间,但是如果安装基础服务,比如JDK,那是可以用这个办法的:

先启动centos容器,进入安装好jdk并配置好环境变量,退出;
docker commit {CONTAINER ID}  {your_name}	#这就制作好了一个镜像,这个镜像就是当前{CONTAINER ID}的状态

使用dockerfile制作javaweb镜像

完美解决了docker commit的缺点,用什么就装什么,一点不浪费;

首先在/home/ok/tomcat目录下新建文件,名为:Dockerfile,然后拷贝jdk,tomcat到当前目录,项目打包成ROOT.tar.gz;
# Pull base image
FROM centos:latest

MAINTAINER ultrasoft "ultrasoft"

ADD jdk-8u111-linux-x64.tar.gz /usr/java

ENV JAVA_HOME /usr/java/jdk1.8.0_111
ENV PATH $JAVA_HOME/bin:$PATH

#TOMCAT_ADD
ADD apache-tomcat-7.0.77.tar.gz /root

ADD catalina.sh /root/apache-tomcat-7.0.77/bin
ADD server.xml /root/apache-tomcat-7.0.77/conf
RUN rm -rf /root/apache-tomcat-7.0.77/webapps/ROOT/

ADD ROOT.tar.gz /root/apache-tomcat-7.0.77/webapps/

EXPOSE 8080

ENTRYPOINT /root/apache-tomcat-7.0.77/bin/startup.sh && tail -f /root/apache-tomcat-7.0.77/logs/catalina.out

指令详解:
FROM	指明从哪个镜像制作
MAINTAINER	名称	  邮箱
ADD 	如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去。
COPY	将文件从<源路径>复制到<目标路径>
RUN		在制作镜像的过程中执行linux指令
EXPOSE	指定对外提供的端口
ENV		设置环境变量
ENTRYPOINT		指定镜像启动的入口点

Dockerfile编写完成后进行镜像生成

docker build -t javaweb:0.1 .		#这句执行后会生成一个名为javawebTAG为0.1的镜像

启动容器

docker run -d -p 8080:8080 --name tomcat_01 javaweb:0.1
启动完成后会自动启动tomcat并部署项目
如果想再启动一个容器,把端口和名称换一下就行
docker run -d -p 8888:8080 --name tomcat_02 javaweb:0.1

现在就可以通过 http://ip:8080访问web网站了

遇到的问题

docker部署了tomcat后调用命令 bin/startup.sh发现启动特别慢

修改tomcat/bin目录下的文件catalina.sh
加入下面一段代码。解决启动时耗时太久的问题
if [[ "$JAVA_OPTS" != *-Djava.security.egd=* ]]; then 
	JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom" 
fi

在dockerfile的时候把这个文件替换掉也可以的

Comments