Docker是什么及常用命令

简介

Docker的意思是码头工人,码头工人在码头从船上装卸海运的货物,你可以把你的所有货物打包起来,装到同一个标准规格的集装箱里,这样不仅可以跟别人的集装箱隔离开、互不影响,而且便于装卸。

再看Docker的logo,一头船一样的鲸鱼,背上背着一些小方块,这些小方块就是一个个集装箱,是不是很有意思?这也是Docker的基本思想。我们可以把我们需要的一些应用打包到一个“集装箱”里,只需要管理这个“集装箱”即可,应用的部署和卸载都变的容易。

接下来了解一些Docker的基本概念:

  • Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
  • Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者都可以使用这个镜像;
  • 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;
  • 运行中的这个镜像称为容器,容器启动是非常快速的;
  • Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker和虚拟机

Container stack example                Virtual machine stack example

  • 容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个离散进程,不占用任何其他可执行文件更多的内存,从而使其轻巧。
  • 相比之下,虚拟机(VM)运行具有“虚拟机管理程序”对主机资源进行虚拟访问的成熟的“ guest”操作系统。通常,VM会产生大量开销,超出了应用程序逻辑所消耗的开销。
  • 简单来说,容器仅包含我们的应用程序以及一些命令和依赖库,而虚拟机则必须包含一个操作系统。

核心概念

docker主机(Host)安装了Docker程序的机器(Docker直接安装在操作系统之上) 
docker客户端(Client)

连接docker主机进行操作

docker仓库(Registry)

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

docker镜像(lmages)Docker 镜像是用于创建 Docker 容器的模板,放在docker仓库中。镜像由许多层叠加组成,第一层是基础镜像。
docker容器(Container)镜像启动后的实例称为容器;容器是独立运行的一个或一组应用。容器是在镜像层之上加了一个可写层。
数据卷(Volume)

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。

数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。

Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

Docker安装和卸载

Docker安装和卸载

Docker镜像加速

Docker镜像仓库地址-镜像加速

常用命令

镜像仓库

docker login

登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub 

例:docker login -u 用户名 -p 密码

docker logout登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker pull

从镜像仓库中拉取或者更新指定镜像

例:docker pull nginx:tag

tag 版本号,可以任意写,如果不写,默认是latest,后面的tag也是一样的意思

docker search

从镜像仓库查找镜像

例:docker search nginx:tag

docker push将本地镜像上传到镜像仓库
例:docker push mynginx:tag
本地镜像管理
docker images列出本地所有镜像
docker tag

标记本地镜像,将其归入某一仓库

例:docker tag ubuntu:15.10 bukale/ubuntu:v3   将镜像ubuntu:15.10标记为 bukale/ubuntu:v3 镜像

docker rmi

删除本地镜像

例:docker rmi [镜像id或镜像名称]

docker build

使用 Dockerfile 创建镜像

例:docker build -t bukale/mynginx:v1 . 

-t 创建的镜像的名称

最后面参数是Dockerfile文件目录,代表当前目录,也可以写该文件绝对路径

docker history

查看指定镜像创建历史

例:docker history bukale/im

docker save

将指定镜像保存成 tar 归档文件

例:docker save -o ./Desktop/mynginx.tar nginx

-o 指定保存的文件

docker load

导入使用docker save命令导出的镜像

例:docker load -i ./Desktop/mynginx.tar

--input , -i  指定导入的文件,代替 STDIN

--quiet , -q  精简输出信息。

docker import

从归档文件中创建镜像

例:docker import  mynginx.tar bukale/mynginx:v1    从镜像归档文件mynginx.tar创建镜像,命名为bukale/mynginx:v1  

容器rootfs命令

docker commit

从容器创建一个新的镜像

例:docker commit -m="updated nginx" -a="bukale" edcfc87a3295 bukale/nginx

-m 描述信息;-a 作者信息;edcfc87a3295是容器id,bukale/nginx是创建后的镜像名

docker cp

用于容器与主机之间的数据拷贝

例:

1、将主机/www/kaka目录拷贝到容器edcfc87a3295的/www目录下。
      docker cp /www/kaka edcfc87a3295:/www/
2、将主机/www/kaka目录拷贝到容器edcfc87a3295中,目录重命名为www。
      docker cp /www/kaka edcfc87a3295:/www
3、将容器edcfc87a3295的/www目录拷贝到主机的/tmp目录中。
      docker cp edcfc87a3295:/www /tmp/

docker diff

检查容器里文件结构的更改

例:docker diff mynginx

容器操作
docker ps

列出所有运行中的容器,加-a,则是列出所有容器

docker inspect获取容器/镜像的元数据
docker top

查看容器中运行的进程信息,支持 ps 命令参数

例:docter top mynginx

docker attach连接到正在运行中的容器
docker events从服务器获取实时事件
docker logs

获取指定容器的日志

例:docker logs --tail 10 mynginx   列出最新10条容器mynginx的日志

docker wait阻塞运行直到容器停止,然后打印出它的退出代码
docker export

将指定容器保存成 tar 归档文件

例:docker export -o ./Desktop/mynginx.tar nginx

docker port

列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口

例:docker port mynginx

容器生命周期管理

docker run

创建一个容器

例:

docker run -it -v /host/path/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /host/path/nginx/html:/usr/share/nginx/html -v /root/Desktop/dockerTest/nginx/logs:/var/log/nginx -p 80:80 --name myNginx nginx /bin/bash

-i 以交互模式运行;

-t 分配一个伪输入终端;

-d 后台运行;

-v 挂载宿主机目录或文件到容器的目录或文件;

-p 端口映射,宿主机端口:容器端口;

-P 容器内部端口随机映射到主机端口;

-m 设置容器使用内存最大值;

--name 为容器指定名称;

-h 指定容器hostname;

--dns 指定容器使用的dns服务器,默认和宿主机一致;

/bin/bash 使用-it参数时,在容器内执行/bin/bash命令;

--network 指定网络

docker start

启动容器

例:docker start mynginx

docker restart重新启动容器
docker stop停止容器
docker kill杀掉一个运行中的容器
docker rm

删除一个或多个容器,需先停止容器的运行

例:docker rm mynginx

-f 通过 SIGKILL 信号强制删除一个运行中的容器

-l 移除容器间的网络连接,而非容器本身

-v 删除与容器关联的卷

docker pause

暂停容器中所有进程

例:docker pause mynginx

docker unpause

恢复容器中所有进程

例:docker unpause mynginx

docker create

创建一个新的容器,但不启动它,用法与docker run一样,但docker run是创建并启动

docker exec

在运行的容器中执行命令

例:docker exec -it mynginx /bin/bash

-i 以交互模式运行;

-t 分配一个伪输入终端;

/bin/bash 使用-it参数时,在容器内执行/bin/bash命令;

要退出,先按CTRL+P,然后按CTRL+Q,这样不会中断容器的运行;

数据卷操作
docker volume

docker volume ls 列出所有数据卷

docker volume create nginx_vol 创建数据卷nginx_vol

docker volume rm nginx_vol 删除数据卷

docker volume inspect nginx-vol 查看指定数据卷详情

网络
docker network create

创建一个网络,官网地址

例:docker network create -d bridge test-net

-d:参数指定 Docker 网络类型,有 bridge、overlay。

其中 overlay 网络类型用于 Swarm mode。

其它
docker info显示docker信息
docker version显示docker版本

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值