• Docker的使用


    • 什么是Docker

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

    现在越来越多的环境搭建都使用的是Docker,因为它部署方便、安全、并且在Docker上有很多的镜像供大家下载。例如现在有很多的CTF的比赛的环境几乎都是用Docker搭建的。还有很多的漏洞复现环境我们也都可以从Docker上面直接下载使用。

    Docker的一些基本概念

    概念 说明
    镜像 用于创建Docker容器的模板,就像我们安装虚拟机也需要镜像一样
    容器 根据镜像创建的一组应用,是镜像运行时的实体(就是像是编程语言中类和对象的关系)
    仓库 Docker仓库用来保存镜像,每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签,这也是很多时候按照网上的教程按照环境时候容易出现错误的地方。
    Dockerfile 一种构造镜像的文件的DSL

    在Linux上安装Docker

    我这里面用的是kali,至于其他的情况可以到菜鸟教程去看看。

    PS:kali安装Docker是跟其他的Linux是不一样的,其他的可以看一下菜鸟教程的(站长真的人很好,一个人维护全站,真的无私)

    
    apt-get update
    apt-get install -y apt-transport-https ca-certificates
    apt-get install dirmngr
    
    //step 2
    
    apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 
    --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    
    //step 3
    echo 'deb https://apt.dockerproject.org/repo debian-stretch main' > 
    /etc/apt/sources.list.d/docker.list
    
    //step 4
    apt-get update
    apt-get install docker-engine  //这一步得等很久。。
    
    //step 5
    service docker start //启动docker服务即可
    

    参考:
    https://www.jianshu.com/p/f246e4e37bf7

    service docker start

    docker version执行一下看看有没有具体的版本信息。

    Docker的使用

    • 在Docker中利用容器运行应用程序

    例如docker run ubuntu:18.04 /bin/echo "Hello World"

    这里面解释一下几个参数

    参数 说明
    docker Docker的二进制执行文件
    run 与前面的docker组合来运行一个容器
    /bin/echo "Hello World" 在启动的容器里执行的命令

    当然运行容器是需要镜像的,我们这里面使用的是ubuntu:18.04这个镜像。Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

    以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

    • 运行交互式的容器

    利用-i -t就可以做到

    docker run -i -t ubuntu:18.04 /bin/bash

    输入exit或者CTRL +D即可退出。

    • 启动容器(后台模式)

    使用以下命令创建一个以进程方式运行的容器

    docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

    屏幕会输出一个字符串,这个就是容器的ID,可以通过容器ID查看对应容器发生了什么。

    docker ps查看容器状态

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    fb8adbec2cea        ubuntu:18.04        "/bin/sh -c 'while..."   9 seconds ago       Up 8 seconds                            boring_jennings
    

    参数解析

    参数 说明
    CONTAINER ID 容器ID
    IMAGE 使用的镜像
    COMMAND 启动容器时运行的命令
    CREATED 容器创建的时间
    STATUS 容器状态

    docker logs fb8adbec2cea通过容器ID查看对应容器内部的输出日志。

    docker stop fb8adbec2cea关闭对应ID的容器

    容器的使用

    • 使用镜像启动一个容器(交互式的操作)

    docker run -it ubuntu:18.04 /bin/bash

    exit即可退出

    • 启动已经停止的容器

    在Docker中停止的容器并没有被删除,我们还可以去重新启动

    docker ps -a查看所有的容器

    docker start 容器ID即可启动

    docker run -itd --name QAQ ubuntu:18.04 /bin/bash后台运行

    docker restart ID重启容器

    • 进入容器

    使用-d参数时,容器进入后台。此时可以进入容器。

    docker attach ID退出时容器停止

    docker exec -it ID /bin/bash退出时容器不会退出

    • 导入和导出容器

    docker export ID > 1.tar导出本地的某个容器快照

    cat 1.tar | docker import - imgae/tag导入容器快照在导入为镜像

    docker import http://example.com/exampleimage.tgz example/imagerepo远程导入

    docker rm -f ID删除ID

    docker container prune删除所有的处于终止状态的容器

    • 运行web服务

    其实就是在启动的时候加上运行web服务的命令而已

    docker pull training/webapp用于下载网上的镜像

    docker run -d -P training/webapp python app.py容器后台启动

    docker run -d -p 5000:50000 training/webapp python app.py指定端口进行映射(第一个是主机端口)

    • 查看WEB应用程序日志

    docker logs -f ID

    docker top ID查看进程

    docker inspect ID检查WEB应用程序

    镜像的使用

    • 镜像查看

    docker images列出镜像

    参数详解

    参数 说明
    REPOSITORY 表示镜像的仓库源
    TAG 镜像的标签
    IMAGE ID 镜像ID
    CREATED 镜像创建时间
    SIZE 镜像大小

    同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

    • 获取镜像

    docker pull xxxx:xxx

    • 查找镜像

    docker search xxx

    • 删除镜像

    docker rmi xxx

    • 创建镜像

    1、从已经创建的容器中更新镜像,并且提交这个镜像
    2、使用 Dockerfile 指令来创建一个新的镜像

    • 更新镜像

    docker run -t -i ubuntu:15.10 /bin/bash进入镜像

    apt-get update

    exit退出

    docker commit -m="has update" -a="Mikasa" 8397bb46dd0a mikasa:test1创建镜像

    参数 说明
    -m 提交的描述信息
    -a 指定作者
    8397bb46dd0a 容器的ID
    mikasa:test1 指定要创建的目标镜像名
    • 使用Dockerfile创建镜像

    docker build -t imgae/test1:tag dockerfile文件所在目录

    • 设置镜像标签

    docker tag 镜像ID image/test:tag

    设置容器的连接

    Docker中部署了一些Web服务,如果要想外部访问这些应用,可以使用-p或-P来指定端口映射。

    • 网络端口映射

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

    这里面的-P参数就是容器内部端口随机映射到主机的高端口(选择高端口一般是为了防止端口冲突)。

    • 指定端口映射

    docker run -d -p 5000:5000 training/webapp python app.py

    映射到本机的5000端口

    • 指定网络地址

    docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

    • 指定udp端口(默认tcp)

    docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

    Docker容器互相关联

    • 容器命名

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

    使用 --name 指定命名

    • Docker新建网路

    docker network create -d bridge mikasa

    -d指定Docker的网络类型,有bridge,overlay等,mikasa则是创建的网络名

    • 新建容器连接网络

    docker run -itd --name test1 --network mikasa training/webapp python app.py

    docker run -itd --name test2 --network mikasa training/webapp python app.py

    这个时候这两个应该是处于同一网络下了,我们可以试着去ping一下

    docker exec -it test1 /bin/bash

    进入test1中更新一下,一开始是没有ping命令的。使用exec是有原因的,至于为什么请看前面的介绍。

    qpt-get update更新源

    apt install iputils-ping安装ping

    ping test2

    这样两者就已经互相连接上了。

    如果你有多个容器之间需要互相连接,推荐使用 Docker Compose。

    结语

    关于Docker的简单总结、介绍就到这里面了,还有其他比较复杂的操作,请参考官方文档。

  • 相关阅读:
    CSS Grid 网格布局全解析
    VSCode插件和首选项配置
    mybatis分页实现原理
    org.apache.ibatis.exceptions.PersistenceException解决办法
    使用ssm框架在使用id查询时应注意的问题
    出现Caused by: org.apache.ibatis.executor.ExecutorException: No constructor found in com.duowenjia.bean.StudentInfo matching [java.lang.Integer, java.lang.String, java.lang.String, java.lang.String]的问题
    如何实现每个页面都判断session
    count(*),count(常量),count(列名)的区别
    json的jsonarray是有区别的
    毕业设计(高校网上作业提交系统)开发记录(20)
  • 原文地址:https://www.cnblogs.com/Mikasa-Ackerman/p/Docker-de-shi-yong.html
Copyright © 2020-2023  润新知