Docker学习

Docker学习

最近网安实践花式安装各种运算库真的麻烦,Docker可以对应用组件进行封装、部署、运行等生命周期管理,是用户的应用及其运行环境能够做到“一次封装,到处运行”,听起来很棒鸭,Java似的,那就学学吧~

说在前面 : )

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置,比如我们的Linux内核为第0层,这是一个只读的镜像,但是我们能够在外加层,由此我们就能得到centos、ubuntu等等其他镜像。

容器的定义和镜像几乎一摸一样,也是一层一层的,区别在于容器在镜像的基础上增加了一个可写层,我们对容器的更改是写到容器的文件系统中的,所以说运行态容器为由一个可读写的文件系统「静态容器」+ 隔离的进程空间和其中的进程构成,如下图所示。

BeNMPx.png

1. 安装docker

这里演示了win10下安装docker,其他操作系统可以参考官方文档

在开始图标处找到应用程序和功能

BEuUw4.png

然后开启Hyper-V

BEliB8.png

下载windows安装包(大概400+M,官网下载挺快的~),直接一路next完成安装,然后重启电脑即可 : )

BEGdRH.png

镜像加速

外网下载docker镜像太慢了,所以我们需要添加国内镜像,这里使用的阿里云镜像加速。

进入阿里云官网,找到镜像容器服务。

BE8s5F.png

然后找到镜像加速器,下面就有各种系统的配置方法

BE8IUO.png

将镜像加速器地址在docker客户端setting中设置好即可~

BEGuiF.png

2. hello-world

首先从hello-world开始,直接运行如下命令

docker run hello-world

然后就会提示不能再本地找到hello-world镜像,于是就从远程(阿里云)pull下来了,于是我们就成功运行了hello-world,虽然啥也没干 : (

BEJBhF.png


后面部分主要是一些命令的介绍,主要列举了一些比较常用的命令,当然更加详细的命令可以通过docker --help获得

3. docker镜像命令

3.1 镜像列表

使用docker images命令查看当前主机上的镜像,REPOSITORY表示镜像仓库源,TAG表示镜像的标签,IMAGE ID表示镜像ID号(仅显示了前12位),CREATED表示创建的时间,SIZE表示存储的大小

命令说明

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         显示摘要(也就是镜像说明)
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        不要截断输出
  -q, --quiet           Only show numeric IDs

BEUeC8.png

3.2 镜像查询

使用docker search在docker hub上查找我们所需的镜像(配合可选参数能对镜像做一些筛选)

命令详细说明:

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output

BVDkTJ.png

3.3 镜像提交

有时我们创建好容器后,对容器进行了一些修改,我们想要固化这些修改,我们可以将当前容器又重新生成镜像,使用docker commit命令。

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith
                         <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

举个栗子

BZ4Dot.png

3.4 镜像删除

使用docker rmi删除一个或多个镜像(多个镜像只需要用空格隔开即可)

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images

Options:
  -f, --force      Force removal of the image
      --no-prune   Do not delete untagged parents

如果需要删除的镜像还有容器存在使用使用强制删除

BZI38K.png

4. docker容器命令

4.1 创建容器

有了镜像文件,我们就能在镜像文件的基础上创建容器,使用docker run命令,关于该命令的一些一些细节可以通过docker run --help查看(帮助文档太长我就不搬上来了)

举个栗子,使用如下命令创建一个kali容器,-i交互式操作,-t终端,-v添加volume(/宿主机目录:/容器内目录:rw/ro,默认为rw(可读可写),也可以使用–volume-from从其他容器继承volume,其实和手动添加没区别),--name容器名字,-p指定端口号(宿主机端口:容器端口)

docker run -it -v D:\DataVolume:/DataVolume --name kali booyaabes/kali-linux-full

Be5hQS.png

4.2 删除容器

使用docker rm命令删除容器

Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

Remove one or more containers

Options:
  -f, --force     Force the removal of a running container (uses SIGKILL)
  -l, --link      Remove the specified link
  -v, --volumes   Remove anonymous volumes associated with the container

BeEJbQ.png

4.3 启动容器

使用docker start来启动容器

Usage:  docker start [OPTIONS] CONTAINER [CONTAINER...]

Start one or more stopped containers

Options:
  -a, --attach                  Attach STDOUT/STDERR and forward signals
      --checkpoint string       Restore from this checkpoint
      --checkpoint-dir string   Use a custom checkpoint storage directory
      --detach-keys string      Override the key sequence for detaching a
                                container
  -i, --interactive             Attach container's STDIN

BeGRgg.png

4.4 停止容器

停止容器有两种方式:

  • 使用docker stop来停止容器(同样的还有重启容器命令docker restart
  • 还可以使用docker kill强制停止容器

下面是两个命令是使用帮助

Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

Options:
  -t, --time int   Seconds to wait for stop before killing it (default 10)

Usage:  docker kill [OPTIONS] CONTAINER [CONTAINER...]

Kill one or more running containers

Options:
  -s, --signal string   Signal to send to the container (default "KILL")

BeGbCT.png

4.5 退出容器

退出容器主要有两种方式:

  • exit:容器退出并停止
  • ctrl+P+Q:容器不停止退出

4.6 进入容器

进入容器也有两种方式:

  • docker attach:直接进入容器
  • docker exec:在一个容器上执行命令,可以选择不进入容器而仅执行命令,当然也可以选择-it选项进入容器,并且使用exit退出时容器并不会停止

以下是两个命令的详细说明:

Usage:  docker attach [OPTIONS] CONTAINER

Attach local standard input, output, and error streams to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a
                             container
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process
                             (default true)
                             
                             
                             
Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a
                             container
  -e, --env list             Set environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format:
                             <name|uid>[:<group|gid>])
  -w, --workdir string       Working directory inside the container

使用docker attch进入容器

BeU5tI.png

使用docker exec执行命令,也可以选择打开TTY终端

BeaVE9.png

4.7 拷贝容器数据

有时需要将容器中的数据拷贝到宿主机上,但是又没有使用容器数据卷,这时候我们可以使用一个简单的docker cp命令拷贝出来。

Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
        docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

Copy files/folders between a container and the local filesystem

Use '-' as the source to read a tar archive from stdin
and extract it to a directory destination in a container.
Use '-' as the destination to stream a tar archive of a
container source to stdout.

Options:
  -a, --archive       Archive mode (copy all uid/gid information)
  -L, --follow-link   Always follow symbol link in SRC_PATH

比如我们将Linux容器中的一个文本文件拷贝到windows宿主机目录下

Bewel6.png

4.8 查看容器信息

使用docker inspect查看容器的详细信息,返回一个类似于json串的描述

Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Return low-level information on Docker objects

Options:
  -f, --format string   Format the output using the given Go template
  -s, --size            Display total file sizes if the type is container
      --type string     Return JSON for specified type

BeNlRK.png


docker还有许多内容鸭,docker file, docker compose之类的,感觉目前用不到~有机会再去学吧_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值