N0rth3ty's Blog.

Docker入门笔记

字数统计: 1.1k阅读时长: 4 min
2018/11/26 Share

开始准备面试了
很多坑要填,java,docker,php源码审计,内网渗透,计网…
怎么这么多坑要填的
先写写docker吧

Docker基础

镜像(images)

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
常用命令

  • 查看已有的docker镜像 dockers images

image

  • 从公网拉取一个镜像 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),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
直接看一个上次招新题目的dockerfile

1
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
73
FROM 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

CATALOG
  1. 1. Docker基础
    1. 1.1. 镜像(images)
    2. 1.2. 容器(Container )
    3. 1.3. 仓库(Repository )
  2. 2. Dockerfile