centos安装、docker配置、容器运行

  • Post author:
  • Post category:其他




Linux下安装docker的使用

一、课程目标

1、docker是什么
2、docker的架构、名词解析
3、都看恻然对测试人员的意义
4、docker安装
5、镜像命令
6、容器命令
7、DockerFile介绍
8、部署项目实战(Tomcat+JDK+MySQL)

二、centos相关配置

centos系统安装与配置
   https://www.runoob.com/w3cnote/vmware-install-centos7.html

centos安装 docker 
	1) https://www.cnblogs.com/tianfengcc/p/14320255.html
	2) https://zhuanlan.zhihu.com/p/342836513
	
docker配置 mysql
	https://www.jianshu.com/p/979881019aef

docker容器错误
	https://blog.csdn.net/qq_32828933/article/details/107208444
	



1、docker是什么

docker是一个开源的应用容器引擎,让开发者可以快速打包所需要的应用以及依赖包 到一个可移植的容器中,然后发布到服务器上,也可以实现虚拟化,容器是完全使用沙箱机制,互相之间不会有任何接口

没有docker之前,需要把一套环境所用到的工具都部署一遍,花费的时间非常久。有了 docker 之后,只需要把环境打包成一个镜像,复制到另外一台服务器上安装镜像即可

官网:https://www.docker.com/

image-20221106102658154.png



2、docker的架构、名词解析

窗口(repository):
Docker hub,存储镜像的仓库,分为私有仓库和共有仓库

镜像(image):
一种轻量型、可执行的独立软件包,用来打包软件运行环境和给予运行环境开发的软件,可基于此模板运行处 多个容器

容器(container):
镜像的运行实例,通过镜像创建独立运行的一个或一组应用

image-20221106103028467.png



3、docker容器对测试人员的意义

1、解决环境不一致
容器部署的对象是镜像,镜像不仅仅包含代码版本,还包含 系统运行所需的基础环境,使用同样的镜像版本进行测试,不会存在环境不一致的情况。容器消除环境差异,降低环境类型的bug

2、快速部署测试环境
容器采用"一次构建多次部署",大大提升测试环境交付速率,节省测试人员的等待时间

3、环境隔离
不同任务运行在不同容器中,互相之间不影响

image-20221106103347676.png



4、docker安装

官方文档地址(Linux系统要求-CentOS7或更高版本)
https://docs.docker.com/get-docker/ 

docker安装
1)更新yum源
	yum update 
2)安装必要的包,提供yum-config-manager,可用来管理yum源
	yum install -y yum-utils 
3)配置国内镜像源
	yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	
	如果配置后使用 yum报错404解决方案
		1、执行:
				wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
		2、如还未解决详情请看:
		      https://zhuanlan.zhihu.com/p/272603210
	
4)安装docker
	yum install docker-ce docker-ce-cli containerd.io

docker启动/查看状态/停止
1)systemctl start  docker
2)systemctl status docker
3)systemctl stop   docker


docker卸载
1)查看yum 安装列表,关于docker信息
	yum list installed | grep docker   
	
2)删除docker目录下的 某文件
	yum -y remove containerd.io.x86_64
  	yum -y remove docker-ce-cli.x86_64
3)删除 环境变量中所有docker文件
	rm -rf /var/lib/docker



5、docker镜像命令

拉取镜像mysql:5.7
	docker pull mysql:5.7
	
ps:
1、默认docker从Docker Hub上拉取镜像https://hub.docker.com/,确保已存在
2、不写版本号,默认下载最新版	
1)列出本地已有的镜像
	docker images
	docker image ls
	
2)强制删除镜像
	docker rmi -f [镜像名/id]
3)查看镜像详细信息
	docker inspect [镜像名/id]
	



6、容器命令

1)创建并运行一个 mysql 名为 my_mysql 的容器
docker run -p 3303:3306 --name my_mysql -v ~/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin -d mysql:5.7


说明:

创建容器时,最后mysql:5.7表示mysql镜像的版本,可以写,表示指定该版本;如果不写也可以,docker会自动在本地检测有没有最新的,如果没有会自动去docker hub上去下载。

上述命令各个参数的含义:
run 运行一个docker容器
--name 后面这个是生成的容器的名字 my_mysql
-p 3303:3306 表示这个容器中使用3306(第二个)映射到本机的端口号也为3303(第一个)
-v 容器所挂载的路径/目录/文件;如不写默认在 root根目录下
-e MYSQL_ROOT_PASSWORD=admin 初始化root用户的密码
-d 表示使用守护进程运行,即服务挂在后台

解释:
--name 容器名称、 -d后台运行、-p映射端口 -e 设置参数 3306mysql默认端口

1)列出当前正在运行的容器
	docker ps  
	
2)列出当前正在运行及退出的容器
	docker ps -a  
	
3)启动/停止/重启容器	
	docker start/stop/restart [容器Id]  
	
4)进入到容器的内部
	docker exec -it [容器ID] /bin/bash 
    
5)显示容器日志 -tf 实时日志&时间 --tail n 限制条数
	docker logs -tf --tail n 容器id 
    
6)删除掉已退出的容器 -f强制删除
	docker rm [容器Id] 
	
7)本机host向 docker容器传输文件
	docker cp [本地文件路径] [容器ID]:[容器内部路径]  
		
Docker 容器的退出状态码及重启策略

Docker 容器的退出状态码:
    0:表示正常退出
    非 0:表示异常退出(退出状态码采用 chroot 标准)
    125:Docker 守护进程本身的错误
    126:容器启动后,要执行的默认命令无法调用
    127:容器启动后,要执行的默认命令不存在
    其他命令状态码,容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码
    
Docker 容器的重启策略如下:
    no:默认策略,在容器退出时不重启容器
    no-failure:在容器非正常退出时(退出状态非 0),才会重启容器
    no-failure:3:在容器非正常退出时重启容器,最多重启 3 次
    always:在容器退出时总是重启容器
    unless-stopped:在容器退出时总是重启容器,但不考虑在 docker 守护进程启动时就已经停止了的容器 



7、项目环境架构

并不是所有项目都是这个架构:
我们项目用的操作系统centos、应用服务器tomcat、数据库mysql
1) tomcat:应用服务器软件,“项目容器” ,开发的代码包放到tomcat上运行
2) mysql:数据库服务,“数据仓库”

image-20221106120319601.png

项目环境包含:
基础软件 + 项目代码 + 数据库脚本等

基础软件:
操作系统centos、应用服务器tomcat(依赖java环境-jdk)、数据库mysql
1) 项目代码:war包、properties配置文件 — 开发提供
2) 数据库脚本:sql脚本文件 — 开发提供

ps:
1) 用于tomcat连接数据库的配置文件,需要改配置
	jdbc_ningmengban.properties  

2)用于日志输出格式的配置文件,不需要改
	log4j.properties 

image-20221106120704419.png



8、Docker部署项目实战(Tomcat+JDK+MySQL)

1、开发或运维直接把项目环境所需要部署的基础软件+项目代码+数据库脚本等,直接构建成镜像,打包成压缩包lemonban.tar;或者上传docker hub

2、lemoban.tar传递到测试服务器上,直接加载镜像,完成测试环境部署

1)加载镜像
docker load -i lemonban.tar

2)查看本地已有的镜像
docker images

3) 运行容器
docker run --name=ningmengban -d -p 3308:3306 -p 8088:8080 lemonban:0.1

4)测试访问地址
http://云服务器ip:8088/ningmengban/app/register/register.html

说明:
这里项目用到 两个容器,所对应默认端口为:mysql(3306)、tomcat(8080)
容器运行访问对外开放所设置端口为:mysql(3308)、tomcat(8088)

注意:
访问不了,确认云服务器开放8088端口、3308端口
--> 在云服务器设置-安全组配置

配置后访问比如:
http://139.224.61.195:8088/ningmengban/app/register/register.html

tomcat目录结构说明- 项目容器

bin
Linux或windows平台上可执行脚本文件,如启动和关闭Tomcat的脚本

conf
Tomcat服务器的各种全局配置文件,其中包括

server.xml:Tomcat的主要配置文件,服务器配置信息,如端口号、虚拟主机等

tomcat-users.xml:Tomcat用户的文件,保存tomcat的用户名、密码、角色信



web.xml:部署描述符文件,注册了很多MIME类型,即文档类型

lib
所有jar文件

logs
执行时的日志文件比如启动报错,会保存在该目录的文件中

temp
运行时所产生的临时文件

webapps
主要Web发布目录,默认情况下把Web应用文件(项目包)放于此目录

work
Tomcat会将JSP生成的Servlet源文件和字节码文件放到这个目录下,缓存文件

LICENSE
许可证

NOTICE
说明文件

RELEASE-NOTES
版本说明

RUNNING.txt
运行说明文件
如何查看项目服务器日志?定位错误日志?
tomcat项目日志文件 
	logs目录下catalina.out实时日志文件;

如果是非tomcat项目 ,服务器日志看哪个文件,问开发
如何查看服务器端日志?

1)进入到容器内部,通过tail -f 查看:
	docker exec -it [容器id] /bin/bash
	cd 切换到tomcat/logs目录
	tail -f catalina.out
2)用docker命令查看:
  docker logs -tf [容器id]
  
3)过滤错误日志?  
	| grep exception
	



9、Docker项目部署

1、将开发的项目war包、sql脚本、配置文件properties;所需的tomcat、jdk放置在同一个目录/opt下

2、准备好Dockerfile文件 —— 开发或运维写好的,内容详情讲解 /opt目录下

3、确认sql脚本有包含到创建库

4、确认jdbc.properties配置文件 是连接到已创建的库

进入/opt目录
    1)构建镜像
    	docker build -t lemonban2:2.0 ./
    
    2)查看已有镜像
    	docker images

image-20221106122650570.png

1)运行容器
docker run --name=lemonban2 -d -p 3305:3306 -p 8085:8080 lemonban2:2.0

2)将镜像打包成一个压缩包/或者传到docker bub
docker save -o ningmengban.tar lemonban:1.1

10、DockerFile构建镜像

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。

Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像
具体步骤:
    1、编写一个dockerfile 文件
    2、docker build 构造一个镜像
    3、docker run 运行镜像
    4、docker push 发布镜像

image-20221106122853770.png



11、DockerFile指令

FROM 		#基础镜像
MAINTAINER 	#镜像是谁写得
RUN     	#镜像构建是所需运行的命令
ADD     	#添加基础镜像之外的其他内容
WORKDIR 	#镜像工作目录
VOLUME  	#设置容器卷挂载目录
EXPOSE  	#暴露端口,作用与 -p 一样指定端口
CMD     	#指定容器启动时运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT  #指定容器启动时的命令,可以追加命令
ONBUILD   	#当构建一个基础 dockerfile 时 ,触发 ONBUILD
COPY      	#类似 ADD,将文件拷贝到镜像中
ENV       	#构建时设置环境变量
 

image-20221106123637957.png

FROM mysql:5.7 
MAINTAINER tudou 

#复制文件并解压文件 
ADD apache-tomcat-8.0.30.tar.gz /opt/ 
ADD jdk-8u141-linux-x64.tar.gz /opt/ 

#进入容器之后的路径 
ENV MYPATH /opt 
WORKDIR $MYPATH 

#设置编码集,防止tomcat中文乱码 
ENV LANG C.UTF-8 

#设置mysql root密码 
ENV MYSQL_ROOT_PASSWORD 123456 

#设置java环境变量 
ENV JAVA_HOME /opt/jdk1.8.0_141 
ENV CLASSPATH $JAVA_HOME/lib 
ENV CATALINA_HOME /opt/apache-tomcat-8.0.30 
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin 

#复制文件到容器内部 
COPY ningmengban.war /opt/apache-tomcat-8.0.30/webapps/ 
COPY log4j.properties /opt/apache-tomcat-8.0.30/conf/ 
COPY jdbc_ningmengban.properties /opt/apache-tomcat-8.0.30/conf/
COPY ningmeng.sql /opt/ 

#运行容器时执行的命令
#1、启动mysql 
#2、执行ningmeng.sql脚本 
#3、启动tomcat 
#4、在控制台持续输出tomcat日志 
CMD nohup sh -c 'service mysql start && mysql < /opt/ningmeng.sql && /opt/apache-tomcat-8.0.30/bin/startup.sh && tail -f /opt/apache-tomcat-8.0.30/logs/catalina.out'



12、内外网知识点

内、外网区别
1) 内网又称为局域网或者私网
2) 外网又称为广域网或者公网
本地电脑需访问测试环境,确保在同一个局域网,即保证在同一个ip网段

image-20221106123835159.png



13、以上配置、部署操作截图

image-20221106124229416.png

image-20221106124257659.png

image-20221106124353424.png

image-20221106124450407.png

image-20221106124517126.png

image-20221106124615295.png

image-20221106124853418.png

image-20221106124911531.png

image-20221106124927048.png

image-20221106124948709.png

image-20221106125026752.png

image-20221106125059409.png

image-20221106125115906.png

image-20221106125651156.png

image-20221106125849423.png

image-20221106125910425.png

image-20221106130102079.png

image-20221106130248502.png



版权声明:本文为weixin_46572924原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。