开始准备面试了
很多坑要填,java,docker,php源码审计,内网渗透,计网…
怎么这么多坑要填的
先写写docker吧
Docker基础
镜像(images)
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
常用命令
- 查看已有的docker镜像
dockers images
- 从公网拉取一个镜像
docker pull iamge_name
- 查找镜像列表
docker search nginx
- 删除镜像
docker rmi image_name
- 导出镜像
docker save -o image_name.tar image_name
容器(Container )
顾名思义,容器就是用来存放镜像的东西
一个镜像可以起多个容器,并且可以指定不同的参数
常用命令
- 查看所有的容器
docekr ps -a
- 基于镜像启动一个容器
docker run image_name
,常用docker run -d -p 主机端口:容器端口
- 重新启动或中止一个已经存在的容器
docker container start/stop
- 创建容器的同时进入容器
docekr run -it --name newname image_name
- 查看端口映射情况
docker port container
- 退出容器
exit
- 删除容器
docker rm container
,删除前先停止容器
进入容器有几种方式
- attach命令
docker attach 是 Docker 自带的命令,直接docker attach container
但是进入以后exit会导致容器的停止 - exec命令
docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。
常用docker exec -it container bash
从这里exit不会导致容器停止,所以常用exec命令 docker commit
可以将容器保存为镜像- 容器也支持导入导出
export/import
仓库(Repository )
概念类似于git的仓库,有官方仓库,也能构建自己的私有仓库
利用<仓库名>:<标签>的形式来获取指定仓库中的镜像,例如ubuntu:16.04获取16.04版本的ubuntu
Dockerfile
我们常用Dockerfile来构建一个新的镜像
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
直接看一个上次招新题目的dockerfile1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73FROM ubuntu:14.04
MAINTAINER N0rth3ty <northity.com>
ENV REFRESHED_AT 2018-09-30
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND noninteractive
# 先写 修改源/更新 【如果必须的话】
# 替换源(这里可用sed或者直接COPY一个完整的sources.list来替换)
RUN sed -i 's/http:\/\/archive.ubuntu.com\/ubuntu\//http:\/\/mirrors.163.com\/ubuntu\//g' /etc/apt/sources.list
# 进行更新
RUN apt update -y
# 安装wget
RUN apt -y install wget
# 安装chrome浏览器
RUN apt -y install apt-transport-https
RUN wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/
RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN apt update -y
RUN apt install -y google-chrome-stable
# 安装apache2
RUN apt -yqq install apache2
# 安装php5
RUN apt -yqq install php5 libapache2-mod-php5
# 安装php扩展
RUN apt install -yqq php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
#安装python及必须组件
RUN apt install -y python2.7
RUN apt install -y python-pip
RUN pip install --upgrade pip
RUN pip install selenium
RUN apt-get install -y git
RUN git clone git://github.com/urllib3/urllib3.git
WORKDIR ./urllib3
RUN python setup.py install
# 再 修改一些配置
# 对于文件中的替换字符串,多使用sed命令
# 例如去掉apache2的列目录漏洞
RUN sed -i 's/Options Indexes FollowSymLinks/Options None/' /etc/apache2/apache2.conf
# 添加文件到相应目录
ADD html/ /var/www/html/
ADD xssbot.py /var/www/xssbot.py
# ADD geckodriver /usr/bin/geckodriver
ADD chromedriver /var/www/chromedriver
#这里的ip需要替换为实际使用的ip和端口
RUN sed -i "s/http:\/\/localhost/http:\/\/139.199.223.182:2000/g" /var/www/xssbot.py
# 修改为可执行
# RUN chmod 777 /usr/bin/geckodriver
RUN chmod 777 /var/www/chromedriver
# 修改目录权限为可写
RUN chmod 777 -R /var/www/html/post
RUN chmod 777 -R /var/www/html/submit_fdasfh2jfka
# 删除Apache主页
RUN rm /var/www/html/index.html
RUN echo "ServerName localhost:80" >> /etc/apache2/apache2.conf
# 添加start.sh,并准备开机执行
COPY ./start.sh /root/start.sh
RUN chmod +x /root/start.sh
ENTRYPOINT cd /root; ./start.sh
EXPOSE 80
再具体看一些命令
- 一个dockerfile中只能有一个CMD命令,慎用CMD命令
直接贴链接吧,感觉这里总结的比我好
https://yeasy.gitbooks.io/docker_practice/image/build.html