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/
2、docker的架构、名词解析
窗口(repository):
Docker hub,存储镜像的仓库,分为私有仓库和共有仓库
镜像(image):
一种轻量型、可执行的独立软件包,用来打包软件运行环境和给予运行环境开发的软件,可基于此模板运行处 多个容器
容器(container):
镜像的运行实例,通过镜像创建独立运行的一个或一组应用
3、docker容器对测试人员的意义
1、解决环境不一致
容器部署的对象是镜像,镜像不仅仅包含代码版本,还包含 系统运行所需的基础环境,使用同样的镜像版本进行测试,不会存在环境不一致的情况。容器消除环境差异,降低环境类型的bug
2、快速部署测试环境
容器采用"一次构建多次部署",大大提升测试环境交付速率,节省测试人员的等待时间
3、环境隔离
不同任务运行在不同容器中,互相之间不影响
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:数据库服务,“数据仓库”
项目环境包含:
基础软件 + 项目代码 + 数据库脚本等
基础软件:
操作系统centos、应用服务器tomcat(依赖java环境-jdk)、数据库mysql
1) 项目代码:war包、properties配置文件 — 开发提供
2) 数据库脚本:sql脚本文件 — 开发提供
ps:
1) 用于tomcat连接数据库的配置文件,需要改配置
jdbc_ningmengban.properties
2)用于日志输出格式的配置文件,不需要改
log4j.properties
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
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 发布镜像
11、DockerFile指令
FROM #基础镜像
MAINTAINER #镜像是谁写得
RUN #镜像构建是所需运行的命令
ADD #添加基础镜像之外的其他内容
WORKDIR #镜像工作目录
VOLUME #设置容器卷挂载目录
EXPOSE #暴露端口,作用与 -p 一样指定端口
CMD #指定容器启动时运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定容器启动时的命令,可以追加命令
ONBUILD #当构建一个基础 dockerfile 时 ,触发 ONBUILD
COPY #类似 ADD,将文件拷贝到镜像中
ENV #构建时设置环境变量
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网段
13、以上配置、部署操作截图
…
版权声明:本文为weixin_46572924原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。