Docker搭建测试环境知识

Docker:

什么是Docker?

装应用的容器,开源,托管在github上,跨平台,支持windows、mac、linux

Docker的思想:集装箱、标准化(运输方式、存储方式、API接口)、隔离

想搭建一个网站,如何做?

LNMP(linux+Nginx+Mysql+PHP)

安装各种软件以及各自的依赖环境、配置参数

Docker解决了什么问题?

1、运行环境不一致、迁移服务器

2、隔离性解决了 各个应用的相互影响,限制了最大的CPU和硬盘,超过了杀掉

3、双11业务量大,标准化让 增加服务器部署环境变得简单 按一个按钮分分钟部署上百个服务器环境部署完成;

Docker核心词汇:镜像(Build集装箱)、仓库(Ship超级码头)、容器(Run运行程序的地方)

运行程序过程:在仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器;

镜像:Image 就是一系列文件(运行环境的文件、程序文件)保存在本地,格式为

联合文件系统 Union FS 把不同目录下的文件集合在同一个文件夹,实现文件的分层。每一层文件都是只读的,每层加载完成就是同一个目录;每一层可以自己定义;–目的:要在其他机器上运行

​ 分层:操作系统引导–操作系统–tomcat、jdk–程序文件–容器

容器:本质上进程, 最上面一层是可读可写的

仓库:docker自己提供的

​ hub.docker.com—加载镜像的速度特别慢

​ c.163.com蜂巢 —把镜像传到docker仓库里

内部人私用的,在内网环境搭建一个仓库中心;

安装:http://imooc.com/article/16448 Centos

1、yum install -y docker安装docker–》docker version查看版本–》systemctl start docker 启动docker–》docker info查看docker信息、systemctl status docker查看docker状态

docker实践部分

镜像:

拉取镜像到本地: docker pull [OPTIONS参数] NAME[:TAG版本]

查看本机有哪些镜像:docker images [OPTIONS] [ REPOSITORY [ :TAG ]

容器:

docker run [OPTIONS] IMAGE [:TAG] [COMMAND] [ARG]

eg:运行Nginx(web服务器)

Nginx—是需要持久运行,前台挂起(ctrl+c结束)&后台运行

1、docker pull 名字(在网易蜂巢找,有地址,直接复制)

2、docker images

3、docker run 名字同上(在前台运行,ctrl+c结束,不推荐)

—docker run -d 名字: 后台运行,返回容器的id(字符串)

4、docker ps 查看目前正在运行的容器

5、docker exec -it f4 (容器id) bash 查看容器内部的结构,进入到名称为容器id的主机

​ which nginx 查看nginx的位置

​ ps -ef 当前服务都有哪些进程

​ exit 退出容器

docker网络

网络类型:Bridge(独立分配, 端口映射) Host(和主机共同使用网络,不需要配IP) None(没有网络)

docker stop 容器id—停掉镜像

docker run -d -p 8080:80 容器名 ----端口映射,开放一个容器端口80到主机8080上

netstat -na|grep 8080 查看是否开放了端口,在浏览器上localhost:8080可以看到nginx

docker run -d -P 容器名 把所有监听的端口都和主机建立映射

docker -ps 可以看到 主机开放随机端口到容器tcp 端口,localhost:随机端口可以看到nginx

制作自己的镜像

Dockerfile–用来告诉docker我要怎样制作镜像

docker build—根据dockerfile里面的步骤构建镜像

下载war包到本地—》打开终端 --》docker images查看镜像

在蜂巢查看tomcat路径,docker pull 路径 下载tomcat到本地作为基础镜像(包括了jdk)

查看tomcat的默认环境CATALINA_HOME:/usr/local/tomcat

ls 查看项目web war包的名称 mv 名称 新名称 —改名

vi Dockerfile i写

from tomcat路径

MAINTAINER 所有者的名字 所有者的联系方式—这行可以不写

COPY war包名称 /usr/local/tomcat/webapps(tomcat的webapps下的路径)

wq保存退出

docker build -t 名字 . ------docker file的目录 当前目录用.表示,-t是给镜像起名

docker images查看新建的镜像

运行自己的容器

docker -run -d -p 8888:8080 镜像名字

docker ps

netstat -na|grep 8888 已经处于listen状态

在浏览器上访问 localhost:8888 —进入tomcat

localhost:8888/镜像名 ----进入项目

https://www.imooc.com/video/14626

Docker四个组件的关系?

Docker:汽车引擎

dockerfile:汽车图纸

images:类似于样板车

container:将一些汽车的零件拼接在一起,运行

Docker compose:老司机,可以跑多个container

Docker Volumn:汽车的油箱,做数据迁移

Docker Swarm:交通枢纽

Docker Registry:4S店 

https://labs.play-with-docker.com 在线练习docker

https://segmentfault.com/a/1190000011263661#articleHeader13Docker

Docker-compose 老司机

我们部署应用一般会使用多个容器,如果我们一个个去启动应用,当项目非常多时,就很难记住,docker compose是一个配置文件,负责对docker容器集群的快速编排;允许用户通过一个单独的docker-compose.yml文件来定义一组相关联的应用容器为一个项目;

安装:

pip install docker-compose

在docker-compose.yml文件中,编写过程:https://blog.51cto.com/wutengfei/2156792

启动:cd到YAML文件所在文件夹,执行命令docker-compose up

docker-compose up -d后台运行

停止运行 docker-compose down

Docker Volume: 油箱 数据卷

docker数据持久化,不会随着容器的结束而结束,可重复利用,共享容器间的数据;

Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上.

挂载:docker run -it -v my-volume:/mydata alpine sh (将my-volume挂载到container中的/mydata目录)

第一种形式

docker run -v 容器内部地址 镜像名称
docker run -d --name nginx -v /usr/share/nginx/html nginx
运行nginx容器,通过-v挂载一个卷组,通过-d后台启动,通过--name为容器指定名称

docker inspect 容器名称
docker inspect nginx
查看指定容器所有信息

查看Mounts节点下的Sources节点和Destination节点信息
该容器把宿主机的Sources对应目录挂载到容器内部的Destination的目录地址

cd Sources对应的目录路径
vim index.html,修改index.html文件

docker exec -it 容器名称 /bin/bash
进入到容器内部

cd Destination对应的路径路径
然后查看index.html文件,发现是刚刚修改后的内容,即挂载成功,映射关系正确

第二种形式

docker run -v $PWD/code:/var/www/html nginx
本地目录挂载到容器里面的一个路面里面
docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx

cat html/index.html
查看本地文件的内容

docker exec -it 容器名称 /bin/bash
进入到容器内部

cat /usr/share/nginx/html/index.html
发现其内容和本地文件的内容一致,即映射关系正确

第二种形式

docker run --volumes-from ...

mkdir data
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
产生一个仅有数据的容器

docker run -it --volumes-from data_container ubuntu /bin/base
从另外一个容器挂载, 运行并直接进入容器内部

mount
cd mydata
touch whatever.txt
exit

cd data
ls
查看本地data目录下是否有whatever.txt文件
可以多个容器挂载一个数据容器,实现数据共享

Docker Swarm 交通枢纽 一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。

Docker Registry 镜像仓库 4S店

docker pull 镜像名称
从镜像仓库中拉取指定镜像
docker push 镜像名称
将本地镜像推送到镜像仓库

你可能感兴趣的:(测试环境搭建)