docker入门笔记1

简介

由于最近在尝试插桩和fuzzing方面的各种工具,工具种类繁多且不是每一个都能用的上,如果每一个都配置一遍环境很麻烦,工具的repo上有不少提供了docker image的链接,故尝试使用docker。
此次环境为Mac Mojave。

docker相关概念

docker是一个便于开发,转移,运行应用程序的平台,可以将应用程序及其环境打包,与基础架构分离。但是由于只是包括了应用程序所需要用到的部分,且只虚拟化操作系统不虚拟化硬件环境,所以比虚拟机轻量很多。
一些概念
Image:Docker Image是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代码,runtime,系统工具,系统库和设置。
Container:当Image运行的时候,就会生成一个Container,可以将其理解为一个Image的实例。同一个image每次新生成的Container是相同的。这个Container可以暂停,终止,重启,和删除等。

安装及测试

  1. docker官网上下载Mac版本的docker应用程序,文件格式为dmg,与其他应用程序无异。
  2. 运行应用程序,当docker启动完成后,即可通过命令行输入docker指令。我们先输入docker --version查看版本。
    > docker --version
    
    Docker version 17.12.0-ce, build c97c6d6
    
    输出无误后,再输入docker run hello-world下载image测试样例。
    > docker run hello-world
    
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    ca4f61b1923c: Pull complete
    Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    ...
    
    到这里安装成功。

image和container的使用

咱们先分析一下docker run hello-world进行了什么操作。
首先docker客户端联系docker后台程序在本地寻找image,没找到->后台程序连接docker hub下载image到本地->后台程序通过image创建新的container->后台程序执行container中的应用并将结果返回给客户端。
在这个过程结束之后,docker的container和Image中将留下创建的container和下载的Image。我们可以对其继续进行操作。

对于一个image来说,主要的操作在于查看,下载和删除Image。操作如下:

#显示本地的Images
> docker images #或docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
hello-world          latest              fce289e99eb9        3 months ago        1.84kB

#删除一个本地Image(只有对应的Container都删除后才能删除)
> docker image rm fce289e99eb9 #最后一个参数是Image ID
Untagged: hello-world:latest
Untagged: hello-world@sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3

#下载新的Image
> docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

对于Container来说,常用的命令比较多。除了与Image类似的之外,还有停止,提交,启动等。

#显示正在运行的Container(这个是我此时正在运行的另一个Image的Container)
> docker container ls
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS               NAMES
484b4bc0ba72        moflow/afl-dyninst   "/bin/bash"         3 hours ago         Up 3 hours                              dreamy_ellis

#显示所有Container
> docker container ls -a
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS                     PORTS               NAMES
6e6358c8b1a1        hello-world          "/hello"            5 minutes ago       Exited (0) 5 minutes ago                       inspiring_zhukovsky
484b4bc0ba72        moflow/afl-dyninst   "/bin/bash"         3 hours ago         Up 3 hours                                     dreamy_ellis

#删除一个Container 如果Container还在运行需要加-f选项
> docker container rm 6e6358c8b1a1 #最后一个参数是container的ID
6e6358c8b1a1

#创建一个新Container
> docker run hello-world #最后一个参数为Image的名称

# 创建一个新Container并指定执行指令
> docker run [Image_name] [Instruction]

# 如果需要拿shell并保持连接
> docker run -it [image_name] /bin/bash

#启动一个已有container并且将输入输出attach上去
> docker start -a 35257feacc81 

#停止一个Container
> docker stop 35257feacc81

#提交一个Container使之生成一个新的Image
> docker commit 35257feacc81 my_image



文件传输

另外一个很重要的操作就是文件传输,支持双向传输,命令如下:

#其中mycontainer是container的ID
docker cp foo.txt mycontainer:/foo.txt
docker cp mycontainer:/foo.txt foo.txt

本次笔记就先到这里啦

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值