Docker的安装和镜像定制记录

        Docker是一个使用虚拟化技术——LXC(Linux容器)的工具,它可以使用对应系统的镜像,来创建一个实例化容器,在这个容器上可以运行对应系统的程序。镜像和容器的关系,就像使用虚拟机通过ISO文件安装了一个操作系统。由于网安练习需要自己搭建环境,但是一来直接在实体系统上搭有安全隐患的环境很不明智,二来方便记录配置过程和尝试配置文件里语句的作用,三来只要配置成功一次,就可以通过自制镜像,来高效地完成相同的环境再次部署。

        Docker的安装过程:

        1、操作系统要求,64bit,kernel版本 >= 3.10,这里使用Fedora Workstation 30

        2、添加repo源:

        sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

        sudo dnf makecache

        3、安装docker并设置开机启动:

        sudo dnf install docker-ce

        sudo systemctl enable docker.service

        sudo systemctl start docker.service

        4、由于docker的运行必须拥有root权限,可以将当前用户加入docker组,来避免每次输命令添加sudo的麻烦:

        sudo usermod -aG docker $USER

        5、由于国内镜像下载速度慢,可通过配置加速器来加速,vim /etc/docker/daemon.json,在里面添加:

         {

            "registry-mirrors" : ["https://registry.docker-cn.com"]

        }

        重启docker,拉取的镜像会以中文docker网站为来源。

        6、现在我们可以通过docker search kali来搜索docker hub(跟github类似,是个镜像仓库)里的kali镜像有哪些,之后通过docker pull kalilinux/kali-linux-docker拉取官方kali镜像。

        此时我们拥有的只是镜像,类似于ISO文件,再执行docker container run -it kalilinux/kali-linux-docker bash,可以创造一个实例化容器,即操作系统。

        命令完成后会给一个bash shell,在shell上可以运行kali Linux的程序,并且通过docker container ls查看有一个正在运行的实例。

        给shell发送exit退出后,实例被关闭,但是实例文件还在。并且通过docker container run命令每次都会创建一个新的实例容器,新容器不包含用户的更改内容。如果需要打开之前用过的容器,可以通过docker start [CONTAINER_ID] && docker attach [CONTAINER_ID]打开。不想要的旧容器可以通过docker container rm [CONTAINER_ID]删除,其中[CONTAINER_ID]是实例的ID,一般保证拥有唯一性的情况,输入前4个字符就行了。

        Docker自制镜像可以有两个办法:

        (1)我们可以通过命令 docker commit [CONTAINER_ID] [IMAGE_NAME],来提交CONTAINER_ID这个容器对上一次commit的更改点(类似git commit),IMAGE_NAME是将要被制成的镜像的名称。

        这样做的好处是简单,只要有容器,就可以生成镜像,无需关心更改点;缺点是除了你自己,别人不会知道你做了什么操作(镜像所有者可以通过 docker history [IMAGE_NAME] 查看),除此之外,还有一个缺点就是做出来的镜像比较臃肿。

        (2)第二种办法是使用docker build -t [IMAGE_NAME]配合当前目录下的Dockerfile来定制,通过编写镜像定制规则文件Dockerfile,来严格把控更改点。这样制作的镜像精简、透明。

        Dockerfile的简单示例:

        FROM kalilinux/kali-linux-docker

        RUN apt-get update \

                  && apt-get upgrade -y \

                  && apt autoremove -y \

                  && apt-get install vim apache2

        其中FROM代表定制镜像是基于哪个镜像做了新操作,这里是官方kali镜像,做的操作就是RUN之后接的命令,更新软件包、删除不必要的包、下载vim和apache2。

        写好Dockerfile之后,通过docker build -t kali-apache2 .就制作一个名叫kali-apache2的镜像,这个镜像创建的实例容器就包含了更新软件包、删除不必要的包、下载vim和apache2这些操作。

        可以看出,Dockerfile规则其实就是原版镜像+定制镜像会对原版镜像做什么操作(执行什么命令)。

        好了,Docker了解到这里,基本满足了我的需要,接下来需要在kali容器上搭建LAMP环境。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,850评论 1 21
  • Docker简介Docker是一个由GO语言写的程序运行的“容器”; 目前云服务的基石是操作系统级别的隔离,在同一...
    gakiww阅读 579评论 0 0
  • 0x01 核心概念 Docker镜像类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统...
    闲云逸心阅读 4,778评论 0 9
  • 什么是Image? 废话不多说,先上图 最底层的Linux Kernel就是宿主机的操作系统内核,这一部分是共享的...
    Abububiu阅读 943评论 0 0
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,415评论 0 27