【Docker基础】从零开始,通过Docker挂载文件夹并启动bash

首先

Docker的官方教程一次性完成了多种任务,并且对基础知识了解不够,因此我总结了一些步骤,希望通过尽可能少的知识来掌握Docker的概要,并仅完成简单的任务。如果在阅读本文之后,您可能会知道在实现Docker中想要做的事情时需要查询哪些方面的内容。

环境是

    • macOS High Sierra

 

    Docker ver 18

虽然在这里发生了,但基本上在其他环境中也应该没有太大差别。

Docker的基础知识

Docker通过管理独立于宿主操作系统的环境中的应用程序执行单元来管理称为”容器”的内容。容器是由”镜像”创建的。镜像和容器的关系类似于编程语言中的类和实例的关系。镜像包含了执行应用程序所需的环境(例如指定的库),通过指定镜像、在其中运行的应用程序以及其他选项来创建单独的执行单位,即容器。此外,与编写了类设计的源代码相对应,Dockerfile用于编写镜像的设计。

根据以上情况,关于Docker的具体操作步骤按照以下流程进行。括号中的英语单词将在后面解释,表示对应的Docker命令。

    1. 写出一个包含所需的运行环境(镜像)的Dockerfile

 

    1. 使用Dockerfile构建镜像

 

    1. 使用镜像、指定应用程序和其他选项创建容器

 

    1. 运行容器

 

    如果应用程序不会自动停止,停止容器

然而,如果图片已经存在于网络上,就不需要执行步骤1和2。为了将各种指定设置为配置文件,我们提供了一个名为docker-compose的命令。现在,让我们从最简单的工作开始,并最终执行一个容器,该容器与主机OS共享文件夹并启动bash。

从图像创建容器并运行容器。

在编写自己的Dockerfile之前,您可以指定在网络上公开的映像和要运行的应用程序,创建一个容器并运行该容器。

首先,我们从网络上获取Debian镜像。

$ docker pull debian
Using default tag: latest
latest: Pulling from library/debian
bc9ab73e5b14: Pull complete
Digest: sha256:802706fa62e75c96fff96ada0e8ca11f570895ae2e9ba4a9d409981750ca544c
Status: Downloaded newer image for debian:latest

在接下来的create命令中,您需要指定镜像和要运行的应用程序来创建容器。在本次示例中,我们将使用echo作为应用程序,仅将文本显示在标准输出中。

$ docker create debian echo "Sauna Ikitai"

可以使用ps命令列出创建的容器。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                     PORTS               NAMES
893a4674e4fe        debian              "echo 'Sauna Ikitai'"   9 minutes ago       Exited (0) 8 minutes ago                       quizzical_franklin

我会尝试使用start命令来指定容器ID进行执行。

$ docker start -i 893a4674e4fe
Sauna Ikitai

用这个方法,容器已经可以执行了。但是,每次都分别创建和执行容器很麻烦。当遇到这种情况时,你可以使用run命令,它会同时执行创建和启动操作。

$ docker run -i debian echo "Sauna Ikitai"
Sauna Ikitai
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                     PORTS               NAMES
b5b5829e62d9        debian              "echo 'Sauna Ikitai'"   6 seconds ago       Exited (0) 5 seconds ago                       determined_mcclintock
893a4674e4fe        debian              "echo 'Sauna Ikitai'"   9 minutes ago       Exited (0) 8 minutes ago                       quizzical_franklin

在本地挂载文件夹后启动Bash。

使用Docker作为开发环境时,我认为需要将主机操作系统中的文件夹挂载到容器中。可以使用”-v”选项来进行文件夹挂载。需要注意的是,文件夹的路径必须是绝对路径。此外,要通过bash登录到容器中,需要使用”-i”和”-t”选项。另外,在”–name”参数中指定容器的名称。

$ docker create -it -v /Users/owner/for_docker:/for_docker --name tyler_durden debian
83fc7b68a7d5257b9cac43569526e05fabeea4357b5feff07cc2d0a0cc39a9dd
$ docker start -i tyler_durden
root@d56c0a008ea4:/# ls
bin  boot  dev  etc  for_docker  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

确实被攀附上了。

使用Docker Compose

每次输入不同的选项都很麻烦。因此,Docker Compose可以将各种选项组合成一个设置文件进行管理。为了以设置文件的形式编写上述选项,可以按照以下方式操作。

version: '3'
services:
  tyler_durden:
    image: 'debian'
    # -v option
    volumes:
      - .:/for_docker
    # -i option
    stdin_open: true
    # -t option
    tty: true

将docker-compose.yml文件放入适当的文件夹中,然后执行以下命令,即可获得与通过docker run指定各种选项时相同的结果。

$ ls
docker-compose.yml
$ docker-compose run tyler_durden
root@052e1ed5a153:/# ls
bin  boot  dev  etc  for_docker  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

结束

我原本想解释一下Dockerfile的编写方法,但觉得有点麻烦,如果心情好的话我会在以后补充。