layout: post
category : docker容器
tags : [docker]

学习docker,必须要熟练掌握docker命令,如果基础不牢的话,是无法进一步提高的。docker有很多命令,但常用的却不多。本文结合实际情况讲讲常用的命令。

在开始之前,必须要清楚,docker镜像是一个静态概念,而容器则是一个动态概念,有些类似程序,可执行的二进制文件,仅是一个文件,不管运行不运行,它都在那里(除非删除了),但只有运行了,才是真正的“程序”,才能发挥其作用。同样,只有运行了镜像,将其变成容器,才是真正运行这个“镜像”,达到相应的目的。

docker权限管理

默认情况下,大部分docker命令只允许root权限用户使用,普通用户无法执行。为了使得普通用户也能使用docker命令。需要配置权限。具体参考前面文章介绍。

docker程序

输入docker,按1次Tab键,可看出有很多以docker开头的命令,如下:

$ docker
docker                  docker-containerd-ctr   docker-init             docker-runc
docker-compose          docker-containerd-shim  docker-machine          docker-swarm
docker-containerd       dockerd                 docker-proxy

其中常用的有客户端docker、服务端dockerd(注:在docker后加d表示是守护进程-daemon)、编排工具docker-compose(上篇文章已安装了),其它暂时用不到。
服务端程序dockerd提供着所有的docker服务,查询其运行状态如下:

$ ps -ef |grep dockerd
root       1893      1  0 7月13 ?       00:57:05 /usr/bin/dockerd -H fd://

该进程由/etc/init.d/docker管理启动、停止操作。如果停止这个进程,很多docker命令将无法使用。

对于大部分应用来说,“docker命令”指的就是使用docker这个命令,即亦是docker客户端的操作。docker客户端可以连接其它主机的docker服务端,这个在docker in docker场合中可能会使用到,后续会有文章介绍。

docker服务相关

停止docker:

/etc/init.d/docker stop
或
service docker stop

启动docker:

/etc/init.d/docker start
或
service docker start

重新启动docker:

/etc/init.d/docker restart
或
service docker restart

docker客户端相关

拉取镜像

Docker官网(dockerhub)或其它网站有许多已经做好的镜像文件,使用docker pull命令可以直接将其拉取到本地使用(而不需要自己创建):

docker pull image-name:tag

如:

docker pull busybox # dockerhub官方镜像
docker pull latelee/busybox # 笔者托管在dockerhub上的镜像
docker pull nvidia/cuda:8.0  # nvida官方镜像
docker pull registry.cn-hangzhou.aliyuncs.com/latelee/wordpress # 笔者托管在阿里云仓库的镜像

注意,默认使用latest标签,此时不需要输入latest也可以。如要指定版本,则需要带标签。
默认情况下,下载的是dockerhub官方镜像,地址:https://hub.docker.com/。如果下载其它网站的镜像,镜像地址需要改变。至于具体镜像地址,一般提供镜像服务的网站都给出说明。

创建镜像

上面说的是已有的镜像,如果要自己创建镜像,则要自己编写Dockerfile,然后使用docker build命令,命令示例如下:

docker build -t myimage .

关于镜像的创建,在后续文章中会继续介绍。

上传镜像

对于已制作好镜像(或从其它仓库拉取的镜像),可以用docker push上传到自己的镜像仓库。首先要登陆对应的仓库,默认是hub.docker.com。使用命令docker login,输入账号和密码即可。如果登陆阿里云仓库,命令如下:

sudo docker login --username=latelee@163.com registry.cn-hangzhou.aliyuncs.com # 这是笔者的账号

上传镜像需要2个步骤,首先对镜像打标签,使用docker tag命令,然后使用docker push上传到仓库,默认是hub.docker.com。
比如将busybox上传到hub.docker.com。

docker tag busybox latelee/busybox
docker push latelee/busybox

关于阿里云仓库的使用,后续文章介绍。

对于不涉及机密的docker镜像,建议使用Dockerfile+自动构建的方式来保证,这样不需要自己创建。

运行镜像(变成容器)

一般运行镜像命令为:

docker run -itd 镜像名称

上面命令比较简单,其变化形式有:

  • 指定容器名称
docker run --name 容器名称 -itd 镜像名称
  • 需要挂载目录
docker run --name 容器名称 -v /home:/home -itd 镜像名称

其中-v表示挂载,前一目录为主机目录,后一目录为容器内目录,注意,如果挂载的容器目录已存在内容则会被覆盖,但由于内容是在镜像内的,所以不会被删除,只是本次运行的容器没有而已。

  • 需要映射端口
docker run --name 容器名称 -p 8080:80 -itd 镜像名称

其中-p前一个端口表示主机端口,后一个端口表示容器内部端口。注意,主机端口不能被重复占用。

停止容器使用命令:

docker stop 容器ID/容器名称

删除容器命令:

docker rm 容器ID/容器名称

注意,删除的容器必须是已经停止的,如果要强行删除,则需要添加-f选项。

另外也可以用docker start来启动镜像,但笔者实际使用的比较少。

进入容器

运行已经在运行的镜像(用于容器在后台启动,而又想进入该容器交互界面):

docker exec -it 容器ID/容器名称 bash
docker exec -it 容器ID/容器名称 sh

注意,以上的“bash”或“sh”是运行容器首先执行的命令,前面给出的示例没有注明,是因为每个docker镜像都有默认的启动执行命令,详细在后文讲述。
在执行docker exec 时,可以自行使用要执行的命令,比如:

# 查看正在运行的myubuntu内核版本号
docker exec -it myubuntu uname -a
Linux 6f15602f0338 4.13.0-38-generic #43~16.04.1-Ubuntu SMP Wed Mar 14 17:48:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# 查看根目录文件列表
docker exec -it myubuntu ls

这些命令的执行结果,与进入该容器再执行相同命令的结果,是一样的,但可以减少进入容器这一步骤,在实际中非常有用。

删除镜像

删除镜像使用如下命令:

docker rmi 镜像名称

注意,docker rm是删除容器,而docker rmi是删除镜像,两者操作的对象是不一样的。

导出导入镜像

在一台主机上制作了镜像,就可以利用导出导入功能,将其迁移到另一台主机(当然,也只可以使用仓库的pull形式,但要依赖镜像仓库)。

将镜像保存到本地目录:

docker save -o file.tar image:tag

示例:

docker save -o ubuntu16.04_20170703.tar ubuntu:16.04

注意,压缩包是tar格式,不是tar.bz2格式,如果要研究该压缩包,则可以解压,解压使用tar xf xxx.tar形式。解压后得到的内容包括很多层,这里就不涉及了。
在另一台主机上导入,使用命令格式:
docker load -i file.tar
示例如下:
docker load –I ubuntu16.04_1017.tar
导入之后,使用docker images可查看镜像信息。

其它常用的命令

停止所有容器:

docker stop $(docker ps -aq)

删除所有容器(如果正在运行,则不会被删除):

docker rm $(docker ps -aq)

删除所有包括latelee关键字的镜像:

docker rmi $(docker images | grep latelee | awk '{print $3}')  # awk的作用是得到三列(第三列即为镜像ID)

删除所有标记为none的镜像:

docker rmi $(docker images | grep none | awk '{print $3 }')

本文所有命令均已测试通过,但仅保证在发文之时或延后一段时间有效。但命令本质是一样的。

李迟 2018.7.3

我的docker随笔4:docker常用命令相关推荐

  1. Docker(一):Docker的安装与常用命令

    相关阅读: Docker(一):Docker的安装与常用命令 Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit Docker(三):Docker镜像导入与导 ...

  2. docker实践(2)常用命令和DockerFile详解

    <docker实践(1) 入门和springBoot实践部署> <docker实践(2)常用命令和DockerFile详解> <docker实践(3) 仓库registr ...

  3. Docker(三):Docker镜像加速器和常用命令

    镜像加速器(免费) 1.打开阿里云官网,搜索"容器镜像服务". 2.点击左边导航栏"镜像加速器". 3.把加速器地址复制到Docker配置. 在registry ...

  4. 一文搞定 Docker 容器技术与常用命令

    简介:Docker 是一个开源的应用容器引擎,基于 Go 语言开发,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的系统. Docker 简介 Do ...

  5. Kubernetes与Docker基本概念与常用命令对照

    摘要: Docker是众多用户上手入门的基础容器和编排工具,提供了良好的开发者体验.Kubernetes是强大的容器编排平台,功能丰富.它们有很多概念和操作都有类似之处.我们今天会和大家对比基本概念与 ...

  6. docker的介绍和常用命令

    最近,微服务很火,所以spring cloud , dubbo也跟着一起流行起来了,紧跟其后的则是容器化技术的出现, docker则是容器化技术领头羊, docker是使用google出的go语言开发 ...

  7. Linux下docker的安装及常用命令

    docker主要是用来管理像MySQL.Tomcat.Nginx等软件的,在安装docker之前,首先保证你的系统里没有老版本docker 清除老版本docker,命令过长,用 \ 分行 sudo y ...

  8. docker安装部署和常用命令

    一 添加yum源 yum install epel-release –y yum clean all yum list 二 安装运行Docker yum install docker-io –y sy ...

  9. Docker 学习笔记(Docker 架构 / 镜像 / 容器 / 常用命令 / Dockerfile / 镜像仓库)

    Docker 1. Docker 入门 1.1 Docker 是什么 1.2 Docker 和 虚拟机 1.3 镜像 容器 仓库 1.4 Docker 架构 1.5 Docker 安装 1.6 doc ...

  10. docker下载安装和常用命令

    系列文章目录 前言 官网及下载 https://docker.com/ 一.卸载旧版本docker yum remove docker \docker-client \docker-client-la ...

最新文章

  1. 红包规则_“科普闯关100%夺红包”游戏规则升级了!速速来看!
  2. java B2B2C Springboot仿淘宝电子商城系统-负载均衡之ribbon+feign
  3. SendMessage CString
  4. linux下为php添加curl扩展的方法
  5. Codeforces Round #246 (Div. 2)
  6. 瞿菡云计算机,“国家资助 伴我成长”——我校学生王丽娜、肖云菡荣获中职教育“国家奖学金”事迹材料...
  7. Java性能调优调查结果(第一部分)
  8. python 图 鼠标 显示_在matplotlib图形窗口(带imshow)中,如何删除、隐藏或重新定义鼠标的显示位置?...
  9. 你要「老婆」不要?谷歌程序员20行代码把二次元「老婆」带到现实世界
  10. Shell编程之运算
  11. 山东大学暑期实训——智能人物画像综合分析系统
  12. Oracle题目求帮助
  13. 微信小程序地图组件 无限闪烁导致小程序崩溃
  14. 【无标题】关于DBC文件的格式解析(DBC文件系列其二)
  15. ‘A’与”A”的区别
  16. [iOS]-KVO+KVC
  17. 关于DOS命令的骚操作
  18. Lua 5.4.4函数、模块注册
  19. luogu p1967 货车运输
  20. 2017年山东省CIO智库周年庆暨信息化与工业化融合发展峰会成功召开!

热门文章

  1. java数青蛙_『字节跳动LeetCode联合周赛』--周赛185(JavaScript) | OFEII
  2. 苹果折叠屏iPhone不会在明年推出 最快2025年出货
  3. 终于要来了!华为P50将提供两个版本:国内仅有鸿蒙
  4. TME上市两周年|为2020甜蜜发糖,收获2021的希望
  5. 博纳影业IPO即将过会 阿里、腾讯均为股东
  6. iPhone 12 Pro长这样:重回iPhone 5外观 心动了
  7. 华为正式宣布全场景AI计算框架MindSpore开源 降低AI开发门槛
  8. 哔哩哔哩2019年Q4及全年财报:全年营收67.8亿元,同比增长64%
  9. 真安卓机皇!华为P30 Pro包揽《智能硬件质量报告》多项大奖
  10. 中国银联深夜道歉 称将进一步优化赔偿机制