一.系统命令

#查看docker版本

docker version

#查看docker的系统信息,包含镜像容器的数量

docker info

#查看docker的所有命令

docker --help

#查看该docker命令的帮助信息

docker 命令 --help

二.镜像命令:

1 .镜像是什么?

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件

(1): UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是Dokcer镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统加载起来,这样最终的文件系统会包含所有的底层文件和目录

(2): Docker镜像加载原理

docker的镜像实际上是由一层一层的文件系统构成,这种层级的文件系统UnionFS。

主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的linux/unix系统是一样的,包含boot加载器内核。当boot加载完之后整个内核就都在内存中了,此时内存的使用权已经由bootfs交给内核了,此时系统也会卸载bootfs

平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M。

对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就行,因为底层直接用host和kernel,自己只需要提供rootfs就行。由此可见对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以共用bootfs。

(3): 分层的镜像

以pull为例,在下载的过程中我么可以看到docker的镜像好像是在一层一层的下载

(4): 为什么Docker镜像要采用这种分层的结构

最大一个好处就是——共享资源

比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也需要加载一份base镜像,就可以为所有服务器服务了。而且镜像的每一层都可以被共享。

(5): 特点

  • docker镜像都是只读的

    • 当容器启动时,一个新的可写层被加载到镜像的顶部。

  • 这一层通常被称作“容器层”,“容器层”之下都叫“镜像层”

所有的docker镜像都源自于基础镜像层,当我们进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。举一个简单的例子,假如基于Ubuntu Linux16.04创建一个新的镜像,这就是新镜像的第一层;如果在新镜像中添加Python包,就会在基础镜像层上创建第二个镜像层;如果继续添加一个安全补丁,就会添加第三个镜像层。如下图:

2.查看本机镜像:

#查看本机所有镜像

docker images [可选命令]

从下图我们可以看到镜像的信息,每个标签的含义如下:

标签 含义
REPOSITORY 来自于哪个仓库,比如 ubuntu
TAG 镜像的标签,TAG 信息用来标记来自同一个仓库的不同镜像,例如 ubuntu 仓库中有多个镜像,通过 TAG 信息来区分发行版本,例如 10.04、12.04、12.10、13.04、14.04 等。
IMAGE ID 镜像的唯一id,如果镜像的id相同,说明它们实际上是同一镜像。
CREATED 镜像的创建时间
SIZE 镜像的大小

命令可选项讲解:

参数 描述
-a, —all 显示所有镜像 all可以简写成-a,也就是说 -a ,—all都能显示所有镜像
-f, —filter 根据所提供的条件过滤输出
-q 只显示镜像的id

可选参数用法:

#显示所有镜像

docker images -a

#显示所有镜像,但是只展示镜像id

docker images -aq

3.搜索镜像:

docker search

搜索结果如下:每个标签的含义如下:

NAME #名称

DESCRIPTION #描述

STARS #相当于GitHub的STARS,表示受欢迎程度

OFFICIAL #是否为官方的

AUTOMATED #自动构建,表示该镜像由Docker Hub自动构建流程创建的

可选项:

-f, --filter filter 根据所提供的条件过滤输出

#例如:搜索仓库中镜像中mysql STARS大于1000的

docker search mysql --filter=STARS=1000

4.下载镜像:

docker pull 镜像名[:tag]

#运行效果:

[root@iZwz94ro78u8c5qdlixltzZ /]# docker pull mysql

Using default tag: latest #如果不写tag,默认为latest

Trying to pull repository docker.io/library/mysql ...

latest: Pulling from docker.io/library/mysql

8559a31e96f4: Pull complete #分层下载,docker镜像的核心

d51ce1c2e575: Pull complete #分层下载,docker镜像的核心

c2344adc4858: Pull complete

fcf3ceff18fc: Pull complete

16da0c38dc5b: Pull complete

b905d1797e97: Pull complete

4b50d1c6b05c: Pull complete

c75914a65ca2: Pull complete

1ae8042bdd09: Pull complete

453ac13c00a3: Pull complete

9e680cd72f08: Pull complete

a6b5dc864b6c: Pull complete

Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6 #签名

Status: Downloaded newer image for docker.io/mysql:latest #状态

我们可以看到第二句:
Using default tag: latest 不加参数,默认为下载最新版本

指定镜像版本下载:

docker pull mysql:5.7

运行效果:

[root@iZwz94ro78u8c5qdlixltzZ /]# docker pull mysql:5.7

Trying to pull repository docker.io/library/mysql ...

5.7: Pulling from docker.io/library/mysql

8559a31e96f4: Already exists #共用文件,无需下载,节省资源,得益于docker联合文件系统

d51ce1c2e575: Already exists #共用文件,无需下载

c2344adc4858: Already exists #共用文件,无需下载

fcf3ceff18fc: Already exists #共用文件,无需下载

16da0c38dc5b: Already exists #共用文件,无需下载

b905d1797e97: Already exists #共用文件,无需下载

4b50d1c6b05c: Already exists #共用文件,无需下载

d85174a87144: Pull complete

a4ad33703fa8: Pull complete

f7a5433ce20d: Pull complete

3dcd2a278b4a: Pull complete

Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854

Status: Downloaded newer image for docker.io/mysql:5.7

该版本需要在docker仓库中存在,点击传送仓库地址:

查看下载的镜像:mysql镜像下载成功~

5.删除镜像:

docker rmi [id或者名称]

#rm linux中的删除命令 i代表为镜像

#rmi 删除镜像

例如根据名字删除镜像:

docker rmi 镜像名

根据id删除:

#删除指定id的容器

docker rmi imageID

#删除指定id的多个容器:

docker rmi imageID imageID imageID

6.通过$()表达式删除镜像:

#删除全部的容器

docker rmi $(docker images -aq)

#命令详解

#docker rmi 删除镜像

#$(docker images -aq) 查询所有镜像id a查询所有 q查询镜像id

#可以使用$()来查询,当做参数传递,然后递归删除所有.

已经全部删除:

三.容器命令:

我们有了镜像才能创建容器,接下来我们下载一个CentOS镜像来创建一个容器:
下载镜像:

docker pull centos

效果如下:

1.新建容器并启动:

docker run [可选参数] 镜像名

#常用可选参数讲解:

--name="name" 给运行的容器起个名字,用来区分容器

-d 后台运行,相当于nohup

-it 使用交互方式,可以进入容器,以便查看内容

-p 指定容器运行的端口

-p 四种使用方式:

1. -p 主机端口:容器端口 主机端口映射到容器端口 ▲常用

2. -p 容器端口 不做映射处理

3. 直接写容器端口

4. -p ip:主机端口:容器端口

-P 大写p,随机指定端口

接下来让我们使用命令试一下:

docker run -it centos /bin/bash

#命令解释:

docker run 启动

-it 进入容器,并以交互方式运行

centos 镜像名

/bin/bash 进入bash shell以实现交互

2.后台启动容器:

docker run -d 镜像名

我们会发现一个问题,应用在后台启动之后,我们通过docker ps查看正在运行的容器,发现没有正在运行的,也就是说,容器停止了.但是我们不是以后台的形式启动了一个吗?
原因:
1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,那么容器会被认为空闲,就会自行退出
2、容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出
这种情况一般会发生在容器中没有服务的情况,如果容器中一直运行着tomcat,那么就不会出现这种情况了.

3.退出容器:

exit #停止容器,并且退出

Ctrl + P + Q 快捷键 退出容器但不停止容器

4. 查看正在运行的容器:

#不加参数,显示当前正在运行的容器

docker ps [可选参数]

可选参数详解:

参数 作用
-a 显示当前正在运行和曾经运行过的容器
-n int 显示最近创建的容器,int 为显示个数.
-q 只显示的id

5.删除容器:

#删除指定的容器 不能删除正在运行的容器

docker rm 容器id

#删除所有容器

docker rm -f $(docker ps -aq) #可以使用$()来查询,当做参数传递,然后递归删除所有.

#通过管道命令删除所有容器,此处不做演示

docker ps -a -q | xargs docker rm

6.启动,重启,停止容器:

命令 作用
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止当前正在运行的容器
docker kill 容器id 强制停止当前容器

扩展:

docker ps -aq // 查看所有容器ID

docker stop $(docker ps -aq) // stop停止所有容器

docker rm $(docker ps -aq) // remove删除所有容器

docker stop $(docker ps -q) & docker rm $(docker ps -aq) //一次性停止删除容器

7.查看容器日志:

#语法:

docker logs [OPTIONS] CONTAINER

Options:

--details 显示更多的信息

-f, --follow 跟踪实时日志

--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)

--tail string 从日志末尾显示多少行日志, 默认是all

-t, --timestamps 显示时间戳

--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

#例子:

#实时加时间戳显示名字为centos的最近一百条日志

docker logs -f -t --tail 100 centos

#拆分解析:

docker logs 显示日志

-f 显示实时日志

-t 显示时间戳

--tail 100 显示一百条日志

8.查看容器中的进程:

#语法

docker top CONTAINER

9.获取容器/镜像的元数据:

#语法:

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

OPTIONS说明:

-f :指定返回值的模板文件。

-s :显示总的文件大小。

--type :为指定类型返回JSON。

10.进入正在运行的容器:

①: 第一种:

#语法

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS说明:

-d :分离模式: 在后台运行

-i :即使没有附加也保持STDIN 打开

-t :分配一个终端

#例子:

docker exec -it 1e685cda7bf4 /bin/bash

效果如下:

②: 第二种:

#语法:

docker attach [OPTIONS] CONTAINER

连接到正在运行中的容器,本机的输入直接输到容器中,容器的输出会直接显示在本机的屏幕上,但需要容器处于运行状态.

两者区别:

docker exec 进入容器之后,开启一个新的终端,

docker attach 进入容器正在执行的终端.

11.拷贝文件:

①: 从容器中拷贝内容到主机:

语法:

#即使容器不处于运行状态也能从中拷贝文件,但容器必须存在,不能被移除.

docker cp 容器id:容器内路径 目的地主机路径

②: 从主机中中拷贝内容到容器:

docker cp 主机目录 容器id:容器目录

12.commit提交镜像

此处以tomcat举例:
首先我们下载一个tomcat镜像,

docker pull toncat

启动tomcat

docker run -d -p 8080:8080 tomcat

测试访问:

发现tomcat中什么都没有,404错误.

但是,我们知道,tomcat Windows版本或者linux版本,是有默认页面的,如下:
其实,docker中tomcat镜像也存在默认页面,我们打开镜像查看目录:
会发现一个名为:webapps.dist的文件夹,此处便是tomcat 的欢迎页在里面.我们将这里所有的文件都拷贝到webapps中,重新访问:

发现欢迎页可以打开了,那我们怎么将我们修改过的tomcat制作一个镜像呢?

#容器成为一个新的镜像

docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[tag]

查询是否成功:

docker images

以后我们想保存容器的状态,可以通过commit来提交,保存为一个新的镜像

四.综合使用:

#1.搜索镜像

docker search Image

#2.下载镜像

docker pull Image

#3.启动容器

docker run

#4.命名容器

--name string

#5.映射端口

-p 主机端口:容器端口

附:docker命令思维导图:

docker build命令详解_Docker镜像与容器常用命令图文详解相关推荐

  1. docker环境安装,镜像和容器常用命令

    docker学习笔记 1 docker环境安装 1.1 安装yum-utils yum install -y yum-utils device-mapper-persistent-data lvm2 ...

  2. Docker镜像和容器常用命令

    一..Docker帮助命令 1.显示docker的版本信息 docker version 2.显示docker的系统信息,包括镜像和容器的数量 docker info 3.docker帮助命令 doc ...

  3. docker配置阿里云镜像加速、镜像和容器常用命令、docker镜像原理

    6. Docker 配置阿里镜像加速服务 6.1 docker 运行流程 6.2 docker配置阿里云镜像加速 查看自己的镜像加速地址(链接直达):https://cr.console.aliyun ...

  4. docker镜像、容器 常用命令,容器端口映射

    文章目录 前言 一.docker基础命令 二.docker镜像命令 1.docker images:列出本地主机的镜像 2. docker search :查看镜像 3.docker pull:拉取镜 ...

  5. docker from指令的含义_Docker 镜像常用命令

    获取镜像 从 Docker 镜像仓库获取镜像的命令是 docker pull.其命令格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] ...

  6. Docker安装及镜像配置(常用命令介绍)

    一.安装Docker 官网 https://docs.docker.com/engine/install/centos/ # 1.卸载旧的版本 yum remove docker \docker-cl ...

  7. 1、镜像、容器相关命令、Dockerfile

    镜像.容器相关命令.Dockerfile 1.docker的镜像和容器 2.docker命令小结 3.Dockerfile创建image 3.1.指令说明 3.2.Dockerfile定制image流 ...

  8. docker之容器常用命令及基本操作

    docker之容器常用命令及基本操作 文章目录 docker之容器常用命令及基本操作 一.查看容器 `docker ps`常用选项 二.查看容器日志 `docker logs`命令选项 三.运行容器 ...

  9. docker 容器常用命令及基本操作

    docker之容器常用命令及基本操作 一.查看容器 ps:该子命令能查看当前正在运行的容器 示例: [root@localhost ~ ]# docker ps CONTAINER ID IMAGE ...

最新文章

  1. ETC核心技术团队CTO空降上海,引领高校区块链技术风潮
  2. 011_logback中的SMTPAppender
  3. BZOJ2209: [Jsoi2011]括号序列
  4. 功率谱和频谱的区别、联系
  5. java ee me se_java EE ME SE有什么关系
  6. 谷歌这波操作,预警了什么信号??
  7. 点焊机器人焊接超时_「技术帖」FSW点焊技术在车身铝薄板焊接中的应用
  8. Netty HashedWheelTimer 定时任务调用
  9. 计蒜客——双重回文数
  10. 为什么Spark比MapReduce快
  11. 经典机器学习系列(十三)【结构化学习】
  12. 为什么说图形数据库是大数据时代的利器?
  13. vcenter接管_人工智能接管广告创意
  14. LDA算法原理及LDA与PCA的比较
  15. Hello designer|PPT笔记
  16. unity3d手游破解(一)
  17. 澳洲航空Qantas成立100周年,悉尼海港大桥举办灯光庆典
  18. Excel函数与公式
  19. Win7 开启自带WIFI进行手机抓包
  20. 报名 | 2019世界人工智能大会-腾讯论坛:8月,在上海等你!

热门文章

  1. python浏览器怎么设置_怎么设置jupyter的默认浏览器
  2. java通道 硬件通道 如何联系_Java NIO5:通道和文件通道
  3. 如何选择正确的控制系统?PLC和DCS各有不同
  4. IPD与项目管理、CMM的关系
  5. weblogic对JSP预编译、weblogic读取JSP编译后的class文件、ant中weblogic.jspc预编译JSP
  6. gitlab工作流程简介
  7. Mysql物化视图应用
  8. LaTeX tikz初探——利用emoji画GPS卫星2D分布图(2)
  9. 华为机试HJ32:密码截取
  10. android tablelayout 点击,Android Design之TableLayout选项卡