美文网首页
Docker 命令

Docker 命令

作者: Manchangdx | 来源:发表于2018-09-13 16:25 被阅读0次

镜像文件 Image
提供应用程序运行所需环境的只读模板,相当于虚拟机系统的 iso 文件
容器 Container
镜像上层的可写层,是一个简单且完整的系统
相当于 VMware 中的虚拟机
镜像仓库 Repository
用来集中存放镜像文件的地方,有自己的专门地址,类似网址
相当于 GitHub 仓库,需要托管在某个 Registry
登记处 Registry
登记处有多个,它是存放镜像仓库的地方,相当于 GitHub 网站

一、容器

1.1、info 选项查看系统信息:

docker info 
或者
docker system info

1.2、--help 查看帮助:

docker --help

1.3、version 查看 docker 版本:

docker version

1.4、ls 查看正在运行的容器列表:

docker container ls

1.5、ls -a 查看正在运行的、曾经运行过的、已经创建的容器列表:

docker container ls -a
# -q 只显示容器 ID ;-s 显示文件大小

1.6、run 运行容器(运行完就自动退出):

docker run [参数] <镜像> [命令]
或者 
docker container run [参数] <镜像> [命令]

1.7、run -it 运行容器且保持其运行,需要执行一个保持运行的命令:

docker container run -it <镜像> <命令>

1.8、create 创建容器:
参数说明:

  • --name 指定一个容器名称,未指定时,会随机产生一个名字
  • --hostname 设置容器的主机名
  • --mac-address 设置 MAC 地址
  • --ulimit 设置 Ulimit 选项

举个例子:

docker container create --name shiyanlou --hostname shiyanlou 
--mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -it ubuntu /bin/bash

1.9、start 运行容器;restart 重启容器:

docker container start <容器名>
docker container restart <容器名>

1.10、创建并运行容器:
这个命令把上面俩命令合起来了,即把命令 8 中 create 改为 run

docker container run --name shiyanlou --hostname shiyanlou 
--mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -it ubuntu /bin/bash

1.11、attach 连接到容器(即进入容器):
上面运行容器的命令,是在后台启动容器,执行 docker container ls 可见
此命令可在终端进入容器:

docker container attach <容器名>
  • 断开连接(即离开容器)须按键 Ctrl + pCtrl + q ,这不会导致容器停止运行
  • 使用 exit 命令会导致容器停止运行

1.12、stop 停止后台运行的容器:

docker container stop <容器名>

1.13、logs 查看容器运行日志:

docker container logs <容器名>

1.14、top 查看容器正在运行时的进程信息:

docker container top <容器名>

1.15、diff 查看容器相对于镜像文件做了哪些修改:

docker container diff <容器名>

1.16、exec 可在容器外控制容器:
容器处于后台运行状态,执行此命令可控制容器:

docker container exec <容器名> <命令>

1.17、rm 删除容器:

  • 注意:正在运行的容器无法被删除
docker container rm <容器名>
# 暂停所有运行中的容器
docker container ls -q | xargs docker container stop

# 删除所有的容器
docker container ls -aq | xargs docker container rm

二、镜像

Docker 镜像是分层存储的
每一个镜像都由多层组成,每一层就是一个只读文件系统
镜像之间会共享一些相同的层,从而减少众多镜像占用的存储空间

当我们启动一个容器的时候,Docker 会加载只读镜像层并在其上添加一个读写层
如果运行中的容器修改了现有的一个已经存在的文件
那该文件将会从读写层下面的只读层复制到读写层
该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏
当删除 Docker 容器,并通过该镜像重新启动时,之前的更改将会丢失

在 Docker 中
只读层及在顶部的读写层的组合被称为 Union File System(联合文件系统)
对于实验环境中的 Docker 来说,其使用的存储驱动是 aufs

2.1、ls 查看镜像信息:

docker image ls          # 查看全部镜像
docker image ls <镜像名>  # 查看指定镜像
  • REPOSITORY 镜像仓库名
  • TAG 标签 / 版本号
  • IMAGE ID 镜像 ID
  • CREATED 创建时间
  • SIZE 大小

2.2、inspect 查看镜像的详细信息:

docker image inspect <镜像名>

2.3、pull 拉取镜像:

  • <哈哈> 的格式为 镜像名:镜像版本,不写镜像版本则默认为 latest
docker image pull <哈哈>

举个例子:

shiyanlou:~/ $ docker image pull ubuntu:14.04 
14.04: Pulling from library/ubuntu
72c01b436656: Pull complete 
65584f5f70ee: Pull complete 
dc9874b52952: Pull complete 
86656bbaa6fd: Pull complete 
7fe6916ab382: Pull complete 
Digest: sha256:cb96ec8eb632c873d5130053cf5e2548234e5275d8115a39394289d96c9963a6
Status: Downloaded newer image for ubuntu:14.04

2.4、commit 将容器的修改保存为新的镜像版本,注意这是一个容器命令:

docker container commit <容器名> <哈哈>

2.5、build 创建镜像:
上面的容器命令可以创建一个新的镜像版本,这种做法不被推荐
我们还可以从一个 Dockerfile 中读取指令来构建镜像
注意 Dockerfile 的文件名就叫 Dockerfile ,不能改
Dockerfile 是一个包含用户构建镜像所需命令的文本文件,文件中使用 # 注释
在创建好该文件后,我们可以使用如下命令来构建镜像:

# -t 参数指定新的镜像
docker image built -t <哈哈> <Dockerfile 的路径>

2.6、rm 删除镜像:

  • 注意:删除镜像须指定版本,不指定的话会默认删除 latest 版本
docker image rm <哈哈>

三、卷 (volume)

由上文可知,我们打开一个容器,对其进行修改后,不能保存修改
第二部分用了容器的 commit 方法将修改后的容器保存为一个新的镜像
难道每次修改都要保存一个新的镜像?显然这并不是一个好办法
另外还有个问题,如何实现容器与宿主系统、各个容器之间的数据传输 / 迁移?

为了解决上述问题,Docker 提出了 volume 概念
volume 被认为是容器目录系统的目录或文件,完全由 Docker 控制
它可以绕过默认的联合文件系统,以正常的文件或目录的形式存在于宿主系统上

3.1、ls 查看卷列表:
所有卷都以目录的形式存储在 /var/lib/docker/volume 目录下

docker volume ls

3.2、create 创建卷:

docker volume create   # 不写卷名,会随机生成一个 16 进制字符串作为卷名,叫做匿名卷
docker volume create <卷名>

3.3、-v--mount 选项可以实现用卷启动容器:

  • -v / --volume 此选项的参数由三段组成,用 : 隔开

    • 格式为 卷名:容器目录:配置项
  • --mount 此选项的参数由多个键值对组成,用 , 隔开

    • type 指定类型,可以指定为 bind、volume、tmpfs,用卷自然选 volume
    • source 可以使用缩写 src
      当类型为 volume 时,指定卷名称,省略该字段会新建一个卷
      当类型为 bind 时,指定路径
    • destination 容器目录,挂载到容器中的路径,可以使用缩写 dst 或 target
    • readonly 读写配置项,可以使用缩写 ro

举个例子:

# run -it 运行容器且保持其处于运行状态
# --name 后接容器名
# --rm 自动清理容器内的文件系统,具体怎么个清理法,暂不清楚
docker container run -it --name cool -v one:/one --rm ubuntu bash

docker container run -it --name cool 
--mount type=volume,src=one,target=/ok --rm ubuntu bash

这个容器目录,上面命令中的 /one/ok
就是用来在容器之间、容器和宿主系统之间传数据的
如果该目录不存在,会自动创建

如果将 -v 的卷名改成宿主系统的绝对目录,或将 --mount 的 type 改为 bind
就可以将宿主系统的目录挂载到容器,使得容器可以对宿主系统进行修改

docker container run -it --name cool 
-v /home/shiyanlou:/home/shiyanlou --rm ubuntu bash

docker container run -it --name cool 
--mount type=bind,src=/home/shiyanlou,target=/home/shiyanlou --rm ubuntu bash

四、网络

安装 Docker 后,会自动创建 3 个网络:bridgehostnone
默认情况下,我们创建的容器都会连接到 bridge 网络

4.1、ls 查看全部网络:

docker network ls

4.2、inspect 查看网络详情:

docker network inspect <网络名>

4.3、--network 指定容器连接的网络(这是容器命令的选项):
默认运行容器会连接 bridge 网络,即 --network bridge 可以不写
举例:

# -d 启动守护进程,即该容器会在后台运行
docker container run -itd --name shiyanlou002 --network bridge ubuntu /bin/bash

4.4、iptables 命令实现端口映射:
在同一 Docker 网络的容器之间的网络是通过内网连通的
如果需要从主机外部访问容器内的服务,则需要配置端口映射
也就是将容器内的端口映射为主机的端口,然后通过主机 IP + 端口来访问
端口映射通过 iptables 来实现

  • 查看 nat 表的转发规则:

相关文章

  • 记录一次Docker的学习

    Docker学习 Docker概述 Docker安装 Docker命令镜像命令容器命令操作命令... Docker...

  • Docker

    Docker学习目标 Docker概述 Docker安装 Docker命令镜像命令容器命令操作命令... Dock...

  • Docker命令

    Docker命令总结: 帮助命令: docker version docker info docker --hel...

  • Docker常用命令

    Docker常用命令 Docker帮助命令 docker version:查看docker版本 docker in...

  • Docker 之 HAProxy + Django + Redi

    Docker 简介 Docker子命令分类 Docker 命令结构 Docker Architecture Ins...

  • dokcer命令帮助手册

    基础命令 docker version docker help docker info 镜像命令 docker i...

  • Docker 常用命令

    Docker 常用命令 镜像命令 docker images docker search docker pull ...

  • Docker的安装及基础命令

    一、概述 1.1. 学习路径 Docker概述 Docker安装 Docker命令镜像命令容器命令操作命令... ...

  • docker 命令

    一、Docker的基础命令 二、docker网络管理相关的命令: docker run 命令参数 三、docker...

  • 3.Docker 的常用命令

    概况 如何获得docker命令的帮助 docker 的常用命令 Docker命令使用帮助 Docker Clien...

网友评论

      本文标题:Docker 命令

      本文链接:https://www.haomeiwen.com/subject/mrzwgftx.html