2021.3.4docker项目实战
1.需要掌握的知识点
- 认识docker
- docker常用命令
- 预习docker录播课程
1.1环境准备:docker安装
1.2所需镜像
docker pull jenkins
docker pull mysql
docker pull bitnami/testlink
docker pull selenium/node-chrome-debug:3.7.1-beryllium
docker pull selenium/hub:3.7.1-beryllium
docker pull prom/mysqld-exporter
docker pull registry:2
docker pull prom/prometheus
docker pull prom/node-exporter
1.3私有镜像
链接:https://pan.baidu.com/s/17LoVXi3MKoX4qp0d5isY3Q 8
提取码:cc61
3.自我课上笔记
selenium grid只支持web端的UI层(因为测web启动浏览器特别耗cpu)
接口不需要做分布式,因为接口只是消耗的带宽,直接作用于服务器
虚拟机用的真实的IP,doker用的虚拟的IP,对于容器来说,环境变量就是参数
面试1:--link
面试2:为什么selenium-grid不支持ie浏览器?因为liux启动不了IE,而doker是用linux的内核
面试3:使用doker可以做操作系统的兼容性测试吗?不能,因为操作系统就是内核,所有启动在宿主机上doker,都是使用的宿主机的内核,都是一样的内核,也就是一样的操作系统;即使启动时用的不同的镜像、centos和rethat
(注意看得见、摸得着的都是软件,不是操作系统)
注意:doker可以做浏览器的兼容性测试
面试4:什么是doker?doker是个骗子,容器就是宿主机上的一个进程
linux是用namespace來隔离的
linux的名称空间是什么?命名空间可以包含变量、函数、结构体以及类等;命名空间是一个作用域,为了防止命名冲突。不同命名空间内可以有相同名字的成员;
2. 虚拟网卡可以打破docker之间的隔离,成对出现,V1无条件的转发给V2,多个docker之间的通信用网桥bridge来广播
虚拟机是真实的网络,可以放到路由里的
3.brige网络模式
docker几乎可以打破所有的边界:网络、进程、目录。。。
--link:向容器的环境变量里注入参数
--net=container:共用网络
3.contaner模式:就是当起一个docker时,共用其他容器的网络
4.host模式:就是当起一个docker时,使用宿主机的网络
4.使用dockerfile制作镜像
4.1课程大纲
- docker commit和dockerfile的使用:dockerfile轻量级,可记录,可复现,使得镜像的开发和维护更容易
- 多from指令的使用方式
- 分层镜像系统的原理
面试题:
1.
2.镜像减肥:镜像层不可修改,容器是增量的方式,如果启动容器后在容器里删镜像层,那越删文件,镜像越大,因为产生了新的记录;所以只能在dockerfile里减
4.2命令
from单继承,只能继承一个基础镜像
一个run指令1个shell拼接命令
一个run指令多个shell命令,下列只是在调试过程中使用,一个run指令就是一层镜像,镜像越多,io损耗越多
如果要设计不重复的组件的镜像的话,适当的run是可以接受的把,不用太考虑最大镜像层数限制和io性能的问题
docker run --name=prometheus -d -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
docker run --name grafana -d -p 8000:3000 grafana/grafana
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['k8s.testing-studio.com:9100']
- job_name: 'mysql'
static_configs:
- targets: ['k8s.testing-studio.com:9104']
- job_name: 'cadvisor'
static_configs:
- targets: ['k8s.testing-studio.com:8091']
5.课堂作业
编写一个基于后端服务的dockerfile
代码地址:https://github.com/ycwdaaaa/holmes.git
答案:
dockerfile:
FROM centos:7
ADD entrypoint.sh /root
ADD requirements.txt /root
WORKDIR /root
USER root
RUN yum install -y epel-release \
&& yum install -y python34 git python34-setuptools python34-devel.x86_64 \
&& easy_install-3.4 pip \
&& yum install -y gcc \
&& yum install -y soci-mysql-devel.x86_64 \
&& ln -s /usr/local/mysql/bin/mysql /usr/bin \
&& pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
ENTRYPOINT ["/root/entrypoint.sh"]
启动脚本:
#!/bin/bash
mkdir -p /opt/web
cd /opt/web
git clone https://github.com/ycwdaaaa/holmes.git
cd holmes
pip3 install -r requirement.txt -i https://mirrors.aliyun.com/pypi/simple/
/usr/bin/python3.4 app.py
while true
do
sleep 10
done
搭建镜像仓库:
docker pull registry:2
docker run -d -p 5000:5000 -v /usr/local/registry:/var/lib/registry --restart=always --name registry registry:2
docker pull busybox
docker tag busybox localhost:5000/bosybox:v1.0
docker push localhost:5000/bosybox:v1.0
curl http://localhost:5000/v2/_catalog
多FROM指令
FROM centos:6.9 as builder
# 下载基础工具
RUN echo "this is a test" > gaofei.tar
FROM busybox
WORKDIR /root
COPY --from=builder gaofei.tar .