Docker入门命令学习

2018/8/9 10:29

前言

本篇介绍Docker的基础使用。

大家一定或多或少地听说过“Docker”吧??!

1.搭靶场,会有专门的docker搭建;

2.有的服务器甚至直接将Docker当作服务器来运营;

3.CTF中,为了方便,很多形形色色的系统都会直接使用轻量级的docker来完成相关任务。(因为这些系统镜像的docker版本非常非常小,docker比绝大多数虚拟机安装杂七杂八的系统方便得多)

目前笔者见到的CTF题目直接用到的docker

1.符号执行(angr),

2.恶意代码分析(remnux),

3.ELF题目中曾用到陌生的RISC-V系统,

等等,docker是最好的解决办法。

以下为学习 docker 需要具备的基础知识(资料来源:百度)。

(笔者注:这里是纯文本,强烈建议详细阅读本文所有内容,动手复现本文命令,既可以掌握docker的基础用法了。枯燥是学习的必经之路)

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

一个完整的Docker有以下几个部分组成:

1.dockerClient客户端

2.Docker Daemon守护进程

3.Docker Image镜像

4.DockerContainer容器

Docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。 [3]

以下为笔者重编的docker命令学习资料(资料来源:菜鸟教程):

大家在自己的linux中输入docker查看是否有docker,没有的话需要安装以下docker(注:ubuntu内核高于3.10才支持docker):

Ubuntu安装:查看内核是否高于3.10:uname -r

获取最新的Docker安装包:wget -qo- https://get.docker.com/ | sh

启动Docker后台服务:

service docker start

测试运行hello-world:

docker run hello-world

使用docker run命令在容器中运行一个程序:

docker(docker的二进制执行文件) run(与docker组成容器)ubantu:15.10(镜像) /bin/echo "Hello world"(启动的容器中执行命令)

运行交互式的容器:

docker run -i(允许对容器内标准输入交互) -t(新容器内指定一个伪终端或终端) ubantu:15.10 /bin/bash

交互后可直接输入命令查看容器

以进程方式创建一个容器:

docker run -d(让程序在后台运行) ubuntu:15.10 /bin/sh -c "while true; do echo hello world;sleep 1; done"

返回容器ID的长字符串

确认是否有容器在运行

docker ps

查看容器的标准输出:

docker logs (容器IDor 自动分配的名字)

停止容器:

docker stop (可选:写ID或name)

请求帮助:

docker(没错,只输入这个单词即可显示help信息)

docker command --help(更深入一些)

docker stats --help

docker容器中运行一个Python Flask应用运行一个WEB应用:

docker pull training/webapp #载入镜像

docker run -d -P(将容器的网络端口映射到主机上) training/webapp python app.py

docker ps(会发现多了端口的信息(docker默认开放了python flask的端口被映射))

docker run -d -p 5000:5000(-p参数可指定) training/webapp python app.py

docker ps(查看端口是否被映射到正确位置)

可单独直接查看端口信息的命令:docker port (ID或名字)

查看WEB应用程序日志:

docker logs -f(类似linux的tail -f) (ID或名字)

查看web应用的进程:

docker top determined_swanson

检查WEB应用程序:docker inspect determined_swanson(会返回一个JSON文件记录着Dokcer容器的配置和状态信息)

停止WEB应用程序:docker stop determined_swanson

重启WEB应用程序:docker start determined_swanson

docker ps -l(查询最后一次创建的容器)

docker restart(对正在运行的程序可重启)

移除WEB应用容器:docker rm determined_swanson(删除容器时,容器必须时停止状态)

查看本地主机上的镜像:docker images

指定15.10的ubuntu运行容器:dockerrun -t -i ubuntu:15.10 /bin/bash

(不指定一个镜像的版本标签的话,默认使用ubuntu:lastest镜像)

获取新的镜像:docker pull ubuntu:13.10

更新镜像(需要创建一个新的容器):docker run -t -i ubuntu:15.10 /bin/bash

在内部:apt-get update 然后:exit

设置镜像标签:docker tag 860c279d2fec(容器ID)runoob/centos:dev

-P :是容器内部端口随机映射到主机的高端口。

-p : 是容器内部端口绑定到指定的主机端口。

上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp

当我们创建一个容器的时候,docker会自动对它进行命名。另外,我们也可以使用--name标识来命名容器,例如:

docker run -d -P --name runoob training/webapp python app.py

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180809G0LYV500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券