【黄啊码】centos7配置docker教程

2022-06-10 10:44:54 浏览数 (1)

之前项目使用tomcat部署,随着后期项目越来越多,同一个tomcat下启动N个项目,造成的问题就是更新其中某一个项目会导致整个tomcat重启,其他同一个tomcat下的项目导致暂时无法访问,非常影响工作效率。为了解决这一个痛点,所以目前想到使用docker容器部署配置项目,希望以此可以隔离不同项目环境,使之不互相影响。

环境说明

centos7(192.168.1.146,docker宿主机)

jenkins服务器(192.168.1.143)

docker安装

docker安装命令:

代码语言:javascript复制
# yum install -y epel-release yum install docker-io

安装完成之后,需要设置docker随机启动,命令如下

代码语言:javascript复制
[root@localhost ~]# systemctl enable docker

截图如下

然后启动docker

代码语言:javascript复制
[root@localhost system]# systemctl start docker
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

第一次启动的时候提示"Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.",这里需要禁用禁用selinux,如图修改docker配置文件

代码语言:javascript复制
#vi /etc/sysconfig/docker
******
设置--selinux-enabled=false,如图

修改保存之后再次启动docker成功!

tomcat镜像

此前曾尝试拉去docker官网的tomcat7镜像来进行项目部署,但是发现获取的镜像文件jdk不符合项目需求,所以这里改为使用本地的jdk和tomcat制作镜像。

下载jdk和tomcat包

准备需要的jdk版本和tomcat版本,版本要可以一起配合使用;这里使用的是之前项目中用到的jdk-8u152-linux-x64.tar.gz和apache-tomcat-7.0.103.tar.gz,将两个tar包上传到docker服务器中,如图

记得要加上可执行权限!!!

代码语言:javascript复制
# chmod 777 apache-tomcat-7.0.103.tar.gz
# chmod 777 jdk-8u152-linux-x64.tar.gz
制作Dockerfile文件
代码语言:javascript复制
# touch Dockerfile
# vi Dockerfile

编辑Dockerfile文件,内容如下

代码语言:javascript复制
# 基础镜像
FROM centos
# 作者
MAINTAINER  chy
# 把jdk与tomcat添加到容器中
ADD jdk-8u152-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-7.0.103.tar.gz /usr/local/
# 配置环境变量
# 设置编码字符
ENV LC_ALL en_US.UTF-8
# 留意jdk(tomcat)文件夹的名称,此处必须和jdk(tomcat)解压后的文件名一致,否则无法启动tomcat
ENV JAVA_HOME /usr/local/jdk1.8.0_152
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.103
ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.103
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 容器运行时监听的端口
EXPOSE 8080
#配置容器启动后执行的命令
ENTRYPOINT /usr/local/apache-tomcat-7.0.103/bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0.103/logs/catalina.out
#启动时运行tomcat
CMD ["/usr/local/apache-tomcat-7.0.103/bin/catalina.sh","run"]
代码语言:javascript复制
# 以当前目录下(.)的 Dockerfile 文件 构建镜像名为 chy/tomcat 的镜像
# docker build -t chy/tomcat-70103:v1 .
# 查看镜像
# docker images
启动项目

使用docker启动项目有三种方式:

第一种:把war包丢到宿主机 在丢到container里面丢到tomcat/webapps

代码语言:javascript复制
docker cp rcm_test.war 16c1d697bf43:/usr/local/tomcat/webapps

这种方式的弊端据说是容器重启后项目就会不再了,可以尝试验证一下~

第二种:挂载方式启动:

代码语言:javascript复制
#挂载方式启动项目
# docker run -d -v /docker_file/rcm_test.war:/usr/local/apache-tomcat-7.0.103/webapps/rcm_test.war -p 8081:8080 --name rcm chy/tomcat-70103:v1

第三种方式:使用Dockerfile文件

这种方式暂时没有尝试,后期验证~

这个时候就可以正常访问网站了http://192.168.1.146:8081,如图

搭建私库

代码语言:javascript复制
[root@localhost ~]# docker pull registry
[root@localhost ~]# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry

修改配置文件

代码语言:javascript复制
 # vi /etc/docker/daemon.json 
{"insecure-registries":["192.168.1.146:5000"]}
# service docker restart

docker常用命令

代码语言:javascript复制
# 启动docker服务
# systemctl start docker
# 重启docker 容器
# docker restart id/name
# 查看镜像&删除镜像
# docker image ls
# docker image rm 容器id/容器name
# 查看启动的所有的进程以及历史记录,docker ps查看的是运行的容器
# docker ps -a 
# 关掉容器
# docker stop e307e884417f(容器id或name)
# 删除容器
# docker rm e307e884417f(容器id或name)
# 启动
# docker start bdfa03a03a68(容器id或name)

# 查看容器内部的全部细节:
# docker inspect 容器id

# 进入容器
# docker exec -it jolly_poincare /bin/bash
# cd /usr/local/apache-tomcat-7.0.103/logs
# 查看tomcat日志信息
# tail -f catalina.out

CI集成

由于目前暂无介入私库,所以在shell脚本中执行命令进行持续构建。

构建

jenkins新建自由风格的项目,增加构建配置(使用centos系统安装的maven工具) shell脚本命令如下

代码语言:javascript复制
# 由于war需要替换jdbc和licens文件,所有需要解压war包替换文件重新打包
cd /docker_file/war/target/
mv *.war rcm_test.war
mv rcm_test.war /docker_file/rcm_test
cd /docker_file/rcm_test
jar -xvf rcm_test.war
rm rcm_test.war
cp -rf /docker_file/jdbc.properties /docker_file/rcm_test/WEB-INF/classes/jdbc.properties
cp -rf /docker_file/license.lic /docker_file/rcm_test/WEB-INF/classes/license.lic
cd /docker_file/
./timestamps_local.sh > release.properties 
cp -rf /docker_file/release.properties /docker_file/rcm_test/WEB-INF/classes/release.properties
cd /docker_file/rcm_test/
jar -cvf rcm_test.war .
ls | grep -v *.war | xargs rm -rf
mv rcm_test.war /docker_file/war/target/
构建后操作

错误指引

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details

如果启动docker提示此错误,需要禁用selinux,方法参考之前配置

docker启动正常,访问提示"拒绝访问",使用curl方式提示同理
排查过程:
代码语言:javascript复制
# 开启防火墙端口访问
# firewall-cmd --permanent --zone=public --add-port=8081/tcp

tomcat启动正常,没有任何报错信息!很头疼,从头排查查看启动容器配置

代码语言:javascript复制
#挂载方式启动项目
# docker run -d -v /docker_file/rcm_test.war:/usr/local/apache-tomcat-7.0.103/webapps/rcm_test.war -p 8081:8080 --name rcm chy/tomcat-70103:v1

这里第一次启动的时候写错了

OPTIONS说明:

代码语言:javascript复制
-d: 后台运行容器,并返回容器ID;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

--name="nginx-lb": 为容器指定一个名称;

所以前一个"8081"是主机外部访问的端口,而后一个"8080"是内部容器的端口,这里很重要!!!

tomcat中文显示

启动的时候tomcat中文会显示"???",需要在Dockerfile文件中增加字符配置

0 人点赞