最近在了解docker使用,在网上找资料发现很少有可以系统的了解某一个操作目的的大部分细节的参考,学起来非常吃力、耗时。
这里整理了一下自己在入门摸索过程中的几个入门级的操作,可以连贯的对实现一个nodejs容器基础操作有个清晰的了解,下面进入正文。
网上很容易找到关于docker的container运行、镜像拉取、容器查看等操作,这里不多说

// 拉取镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST] // 同 docker image pull// 拉取官方的nodejs的镜像
docker pull node
复制代码

使用nodejs镜像创建一个新的nodejs容器,命名为my-node

docker run -itd --name my-node node /bin/bash
复制代码

当然还可以使用docker create创建一个新容器,但不马上运行。下面带着一系列问题来了解相关命令:

如何查看创建的容器?

创建并运行完成后,可以这样查看正在运行的容器

docker ps // 或 docker container ls
复制代码

结果如下,最后NAMES为容器名,很多操作都可以使用容器名来制定该容器,跟ID类似

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a2e2c6b8360f        node                "/bin/bash"         5 days ago          Up 5 days                               my-node
复制代码

也可以使用docker container ls -a来查看所有已经创建的容器(包括没有运行的)

如何查看容器里面运行的软件版本?

这也是我开始学习docker时遇到的问题之一,关键就是exec命令,它的作用就是在运行的容器中执行命令。格式为:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
复制代码

简单的查看nodejs版本的方式为:

docker exec my-node node --version
// 结果
v11.6.0
复制代码

my-node 为容器名即CONTAINER, node 为COMMAND,--version为ARG 即在my-node 容器里执行node --version 命令,这是使用exec执行命令的基本方式,缺点是只能执行一次,而且不能进行后续的交互。更好的方式是

docker exec -it my-node /bin/bash
复制代码

-it 选项的功能跟run命令的-it类似,打开可以进行交互的终端,/bin/bash就是运行容器的bash程序,这个效果跟使用run命令才不多,这样就进入到容器里面,容器拥有简单的linux命令,比如ls、shell等因为是nodejs的容器,所以可以执行node命令,如:node -v,就像在linux系统里面一样:

root@a2e2c6b8360f:/# node -v
v11.6.0
root@a2e2c6b8360f:/#
复制代码

除此之外,当然也可以执行js代码,运行node cli命令。这是容器运行的常用方式,在后文会有用到。

现在终端交互为容器的终端,如何退出容器呢?

有两个方法,可以使用ctrl + d,也可敲入exit命令,两种方法等效。

注: 还可以使用attach命令进入容器,但是这样退出容器终端的同时也会stop容器,这是不希望看到的(经测试加--sig-proxy=false不行)

知道如何在容器里运行js代码了,那如何把js代码或文件放进容器里面,或者说

如何利用容器执行我们在容器外编辑的js文件呢(在不打包镜像的情况下)?

要解决这问题,就需要用到挂载或volume(数据卷)的功能。docker可以通过-v、--mount选项来挂载宿主机与容器的共享目录。以windows下面的docker为例,另外再创建一个名为node-a的容器来实现挂载:

docker run -itd --name node-a -v $pwd/test:/test node /bin/bash
复制代码

在这行命令中,-v之后的参数为 宿主目录:容器目录,意即把宿主机的$pwd/test($pwd为当前工作目录)目录挂载到容器的/test目录(根目录下的test文件夹)。

绑定成功后,在宿主机的 $pwd/test 目录下的任何文件变动,都会实时同步到容器的/test文件夹下。 例如在宿主机$pwd/test 目录下新建一个文件foo.js,里面一行js代码console.log('this is a test!'),然后进入到容器,可以看到test目录,并在文件夹下有foo.js

docker exec -it my-node /bin/bash
root@a4562d3e28da:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var  vol
root@a4562d3e28da:/# cd test && ls
foo.js
root@a4562d3e28da:/# node foo.js
this is a test
复制代码

这样,就可以通过在容器外面编辑文件,而在容器里面运行。可以很方便的进行测试。 通过inspect命令可以查看当前的挂载信息:

docker inspect -f "{{json .Mounts}}" node-a
[{"Type":"bind","Source":"/host_mnt/c/**/桌面/**/my-docker/test", // 宿主机目录"Destination":"/test",   // 容器目录"Mode":"","RW":true,"Propagation":"rprivate"
}]
复制代码

当容器多了,忘了对应的挂载目录,这个就非常有用,关于inspect命令的使用,点击。关于-v选项的更多细节可以参考

当然也可以使用--mount来进行挂载(官方推荐),或者使用volume来共享数据(但在windows、mac下,由于docker是跑在虚拟机里面,所以获取docker volume在本地的目录会比较麻烦),有兴趣可以深入了解。当然也可以通过dockerfile配置image来配置,但这不属于本文范围。

转载于:https://juejin.im/post/5c4828fd51882525927901a1

docker几个基础命令及nodejs容器相关推荐

  1. Docker、docker安装及基础命令

    Docker是什么? Docker是一个在2013年开源的应用程序,并且是一个基于go语言编写的PAAS服务. Docker最早采用LXC技术,之后改为自己研发并开源的runc技术运行容器. Dock ...

  2. 在虚拟机安装中Docker及一些基础命令

    一.安装 yum -y update yum install -y docker docker version 查看docker版本信息 安装成功如上图. 二.基础命令 1.docker pull 镜 ...

  3. rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令

    文章目录 一.RabbitMQ安装 1.1 二进制安装 1.2 rabbitmqctl工具 1.3 docker安装 二.rabbitmq基础命令 2.1 多租户与权限类 2.1.1 创建虚拟主机 2 ...

  4. docker入门之基础命令

    安装 更新yum到最新版本 yum update 下载依赖,yum-util 提供yum-config-manage功能,另外则是device-mapper驱动依赖 yum install -y yu ...

  5. docker概念和基础命令

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 ...

  6. docker 安装与常用命令与常用容器(containers)环境

    注意区别 container 与 image 的关系,container 的建立需要 image 的承载,也即 container 依赖 image,停止并删除了 container 并不会删除 im ...

  7. 容器处于restarting状态_Docker容器操作-基础命令

    docker container run 该命令用于启动新容器,该命令的最简单的形式是接收镜像和命令作为参数.镜像用于创建容器,而命令则是希望容器运行的应用. $ docker container r ...

  8. Docker学习之二------基础命令(镜像、容器)

    Docker基础命令 配置文件路径: /etc/sysconfig/docker docker镜像及容器目录 docker主目录:/var/lib/docker 存放容器目录:/var/lib/doc ...

  9. DockerKubernetes ❀ Docker镜像与容器相关操作基础命令详解

    文章目录 1.Docker信息查询 1.1 版本信息 1.2 详细信息 1.3 帮助命令 2.镜像命令 2.1 本地镜像查看 2.2 镜像搜索 2.3 镜像拉取 2.4 镜像删除 3.容器命令 3.1 ...

最新文章

  1. 线程在Linux中的实现
  2. sql server datetime格式_为什么你SQL Server中SQL日期转换出错了呢?
  3. FW : 一只小青蛙的一生(图片连载)
  4. [Winform]一个简单的账户管理工具
  5. activity 生命周期_如何理解安卓activity的生命周期(on-create篇)?
  6. 背景图层和普通图层的区别_008Photoshop四赞图层(图层样式)
  7. 解决 | 老司机都无法解决的事情,谁能解决?
  8. 解决ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接
  9. 可以十倍地提高.NET 应用程序的速度集群存储器对象缓存控件NCache
  10. atitit.基于http json api 接口设计 最佳实践 总结o7
  11. 通达信手机版分时图指标大全_通达信七彩虹分时图指标,出现红色柱时候可以大胆买入...
  12. 中国大陆五级行政区划数据爬虫
  13. 一文搞定BP神经网络——从原理到应用(原理篇)
  14. 数学史思维导图_8张思维导图揭示:数学应该如何学,才能逆袭为学霸?
  15. DirectX12(D3D12)基础教程(六)——多线程渲染
  16. (转)Excel自定义格式详解
  17. 采用GlodWave软件制作个性化铃声
  18. 穿透代理获取用户真实IP地址
  19. SQL Server 实验二 创建数据库
  20. .net通过S7.net读写西门子PLC中,字符串,bool,整数,小数及byte型

热门文章

  1. Xen虚拟化之一:Xen环境组件详解
  2. Hibernate 异常 Unable to instantiate default tuplizer
  3. python读取网站_科学网—python 获取网址 - 林清莹的博文
  4. python的Web框架,Django框架中的请求与响应
  5. tesseract 4.0 编译安装(CentOS)
  6. 数据库中存储日期的字段类型究竟应该用varchar还是datetime ?
  7. Eclipse快捷键指南
  8. [译文]ASCII art with C#
  9. MacOS开发必备工具brew,安装nginx反向代理,替代linux工具 apt-get和 yum...
  10. 港府拟修例禁止电子烟入口及销售 保障市民健康