Docker的入门命令

 

这里写图片描述

Dokcer 经常使用命令工做原理java

  • Image Layer(镜像层)node


镜像能够当作是由多个镜像层叠加起来的一个文件系统,镜像层也能够简单理解为一个基本的镜像,而每一个镜像层之间经过指针的形式进行叠加。redis

镜像层的主要组成部分包括镜像层 ID、镜像层指针 「指向父层」、元数据「 Layer Metadata,包含了 Docker 构建和运行的信息和父层的层次信息」。docker

只读层和读写层「Top Layer」的组成部分基本一致,同时读写层能够转换成只读层「 经过docker commit 操做实现」。shell

  • Image(镜像,只读层的集合)
     json

镜像是一堆只读层的统一视角,除了最底层没有指向外,每一层都指向它的父层。统一文件系统( Union File System)技术可以将不一样的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在。在用户的角度看来,只存在一个文件系统。镜像每一层都是不可写的,都是只读层ubuntu

                       Container(容器,一层读写层+多层只读层)c#

容器和镜像的区别在于容器的最上面一层是读写层「Top Layer」,在这里并无区分容器是否在运行。bash

运行状态的容器「Running Container」是由一个可读写的文件系统「静态容器」+ 隔离的进程空间和其中的进程构成的。网络

隔离的进程空间中的进程能够对该读写层进行增删改,运行状态容器的进程操做都做用在该读写层上。每一个容器只能有一个进程隔离空间。

Docker 经常使用命令说明

标识说明

  • Image(统一只读文件系统)

 

       静态容器 (未运行的容器,统一可读写文件系统)

动态容器(运行中的容器,进程空间(包括进程)+ 统一可读写文件系统)

命令说明

Docker 生命周期相关命令

  • docker create < image-id >

该命令即为在只读文件系统上添加一层可读写层「Top Layer」,并生成可读写文件系统。该命令状态下容器为静态容器,并无运行。

  • docker start | restart < container-id >

该命令即为在可读写文件系统添加一个进程空间和运行的进程,并生成一个动态容器。

docker stop 即为 docker start 的逆过程。

  • docker run < image-id >

docker run = docker create + docker start

docker run 流程相似以下:

             docker stop < container-id >

该指令向运行中的容器发一个 SIGTERM 信号,而后中止全部的进程。即为 docker start 的逆过程。

  • docker kill < container-id >

该指令向容器发送一个不友好的 SIGKILL 信号,至关于快速强制关闭容器。与 docker stop 的区别是 docker stop 是先发 SIGTERM 信号来清理进程,而后再发 SIGKILL 信号退出,整个进程是正常关闭的。

  • docker pause < container-id >

该指令用做暂停容器中的全部进程,使用 cgroup 的 freezer 顺序暂停容器里的全部进程。

docker unpause 为其逆过程即恢复全部进程,比较少使用。

  • docker commit < container-id >

该指令用做把容器的可读写层转化成只读层,即从容器状态「可读写文件系统」变为镜像状态「只读文件系统」,可理解为固化。

  • docker build

docker build = docker run 「运行容器 + 进程修改数据」+ docker commit「固化数据」,整个过程不断循环直至生成所需镜像。

  1. 循环一次便会造成一个新的层(新镜像 = 原镜像层 + 已固化的可读写层)

  2. docker build 过程通常经过 dockerfile 文件来实现。

Docker 查询类命令

Docker 可查询的对象有:image、container、image/container 中的数据、系统信息(包括容器数、镜像数及其它)。

  • docker images

该指令用做列出镜像的顶层镜像(以顶层镜像 ID 来表示整个完整镜像),每一个顶层镜像下面隐藏多个镜像层。

  • docker images -a

该指令用做列出镜像的全部镜像层。镜像层的排序以每一个顶层镜像 ID 为首,依次列出每一个镜像下的全部镜像层。

  • docker history < image-id >

该指令列出该镜像 ID 下的全部历史镜像。

  • docker ps

该指令用做列出全部运行中的容器。

  • docker ps -a

该指令用做列出全部容器,包括静态容器和动态容器。

  • docker inspect < container-id > or < image-id >

该指令用做提取出容器或镜像中最顶层的元数据。

  • docker info
     

该指令用做显示 Docker 系统信息,包括镜像和容器数。

Docker 操做类命令

  • docker rm < container-id >

该指令用做移除容器,默认只能对静态容器(非运行状态的)进行移除。若是要移除运行中的容器,须要使用 -f(force) 参数,即:docker rm -f <container-id>

  • docker rmi < image-id >

该指令做用与 docker rm 相似,用做移除镜像。

  • docker exec < running-container-id >

该指令用于在运行状态的容器中执行一个新的进程。

  • docker export < container-id >

该指令用做持久化一个容器,会建立一个 tar 格式的文件。该文件移除了元数据和没必要要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容。

若是你要持久化一个镜像,可使用 docker save 指令。它与 docker export 的区别在于其保留了全部元数据和历史层。

经过 docker export 导出的容器再 docker import 到 Docker 中后,在 docker images –tree 命令只能看到一个镜像。而经过 docker save 保存后的镜像则不一样,它可以看到这个镜像构建过程当中的全部历史层。

docker export 和 docker save 二者更多的区别可参考「Docker 的 save 和 export 命令的区别」一文。

 

经常使用的命令:

   1. docker pull: 从仓库中拖镜像

 

  2. docker run:运行容器,若是当前要运行的容器对应镜像不存在,会自动拉取。例如:docker run hello-world

  3.docker stop:中止容器运行


  4.docker start:开始容器运行


  5.docker commit:提交容器到镜像


  6.docker images  : 查看已经下载的镜像

      案例: docker images jboss/base-jdk:8

  7.docker ps:查看当前启动的容器

        $ docker ps -a :       # 列出全部的容器

        $ docker ps -l  :列出最近一次启动的容器

        $ docker -l 列出最后一次运行的容器

  8. docker build : 建立镜像

  9. docker load : 加载镜像

 

  10. docker ps : 查看当前正在运行容器

  11. docker search ubuntu : 搜索镜像文件

 

      12 .docker container ls:默认只列出正在运行的容器,-a 选项会列出包括中止的全部容器。

列出的结果是按列显示的。每一列的值分别为:

  1. Container ID :一开始的几个字符对应你的容器的惟一 ID

  2. Image :你运行容器的镜像名

  3. Command :容器启动后运行的命令

  4. Created :建立时间

  5. Status :容器当前状态

  6. Ports :与宿主端口相链接的端口信息

  7. Names :容器名(若是你没有命名你的容器,那么会随机建立)

 

      13.docker image ls:列出镜像信息,-a 选项会列出 intermediate 镜像(就是其它镜像依赖的层)。

      14.docker volume ls:列出数据卷。

      15.docker network ls:列出 network。

 

     16.docker system prune                 #命令来删除那些已中止的容器,  ,这个命令默认不会删除那些未被任何容器引用的数据卷

     17.docker system prune --all --force --volumns              #会删除数据卷  ,确认的过程没有--all 参数后会删除全部未被引用的镜像而不只仅是 dangling 镜像。

 

    18.docker container prune     # 删除全部退出状态的容器

    19。docker volume prune     # 删除未被使用的数据卷

    20。docker image prune      # 删除 dangling 或全部未被使用的镜像

 

    21.docker container stop  +容器名           #能够中止一个或多个容器

    22.docker container ls -a -q              #直接列出全部的容器(包括已经中止的)!

-a 显示全部的容器,-q 只显示数字形式的容器 ID。

 

    23.docker container rm $(docker container ls -a -q)   #删除容器

    24.docker image rm $(docker image ls -a -q)           #删除镜像

    25.docker volume rm $(docker volume ls -q)           # 删除数据卷

    26.docker network rm $(docker network ls -q)               #删除 network

    27.docker exec 容器id /etc/init.d/sshd restart                 #启动2222端口

 

 

    28.

 
  1. 1.85kB

  • 镜像拷贝,同时重命名,利用 tag命令

1. # 好比,想建立拷贝一个镜像`hello-wrold`,同时命名为`lqdev.cn/hello-world:1`
二、docker tag hello-world lqdev.cn/hello-world:1

此时查看镜像列表,就会发现多了一个镜像了:

[root@xx ~]# docker images

基于Dockerfile建立一个新的镜像,利用 build命令(对于Dockerfile,在下一章节会详细进行说明的,这里就不过多介绍了。)

# 使用当前目录下的Dockerfile,同时镜像命名(`-t`,指tag)为:lqdev.cn/first:1
docker build -t lqdev.cn/first:1

删除镜像,利用 rmi命令(这里须要注意,当镜像有容器在使用时,是没法删除的,须要先删除容器再来删除镜像。)

 docker rmi jboss/base-jdk:8
 或者根据images_id删除
 docker rmi b123d943e165

运行容器,利用 run命令。

docker run hello-world

运行命令是最经常使用的命令了,这里其经常使用选项进行列举说明下

 

后台运行 redis实例,同时指定其宿主端口为 16379

docker run -p 16379:6379 -d redis:3.2
  • 容器列表,使用 ps命令,能够列举出当前运行的容器,须要全部容器时,加入 -a选项便可。

docker ps -a
  • 中止容器,利用 stop命令。

 
  1. # docker stop 容器id

  2. docker stop 3ba5b7475423

  • 启动已中止容器,利用 start命令。

# docker start 容器id
  1.   docker start 3ba5b7475423

  • 重启容器,利用 restart命令。

 # docker restart 容器id
  1.  docker restart 3ba5b7475423

  • 强制中止容器,利用 kill命令。

 # docker kill 容器id
  1.  docker kill 3ba5b7475423

  • 删除容器,利用 rm命令(只能删除已经中止的容器,若须要删除正在运行的容器,可加入 -f参数选项)

# docker rm 容器ID
  1. docker rm 3ba5b7475423

  • 进入容器,在一些场景下,好比想查看 redis的客户端 redis-cli时,这个时候就须要进入容器了。进入容器有不少中,这里就 exec进行讲解下,其余的好比 attach不熟悉,你们可自行搜索下。

# docker exec -it 容器ID 参数
  1.  docker exec -it 3ba5b7475423 redis-cli  

  2.  参数说明:

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

  4.    -i:即便没有附加也保持STDIN 打开

  5.    -t:分配一个伪终端

此时就能够看见已经进入到客户端了,进行相应操做了。

[root@xxx ~]# docker exec -it 3ba5b7475423 redis-cli
  1. 127.0.0.1:6379> keys *

  2. (empty list or set)

  3. 127.0.0.1:6379> set name okong

  4. OK

  5. 127.0.0.1:6379> keys *

  6. 1) "name"

  7. 127.0.0.1:6379> get name

  8. "okong"

  9. 127.0.0.1:6379>

  • 容器中建立一个镜像。在制做一些私有镜像时,经常是依赖于一个基础镜像后,而后进入容器中进行相关系统环境的配置,或者相应的优化。但若容器一删除,以前的修改都会没有了。故在这些场景下,可直接从修改后的容器中建立一个本身的私有镜像,这样里面的一些环境和相关优化项仍是保留的。这个主要会在构建私有镜像章节时具体展开。

# docker commit [options] 容器id name:tag
 
docker commit 3ba5b7475423 lqdev.cn/redis:1参数说明:
-a:提交的镜像做者-c:使用Dockerfile指令来建立镜像
-m:提交时的说明文字-p:在commit时,将容器暂停

 

# docker cp 容器名:要拷贝的文件在容器里面的路径  要拷贝到宿主机的相应路径
# docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
docker cp 3ba5b7475423:/opt/a.json /opt
docker cp /opt/a.json 3ba5b7475423:/opt
  1. # docker cp 容器名:要拷贝的文件在容器里面的路径  要拷贝到宿主机的相应路径

  2. # docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

  3. docker cp 3ba5b7475423:/opt/a.json /opt

  4. docker cp /opt/a.json 3ba5b7475423:/opt

 

  • 存入和载出镜像

1.存出镜像

[root@izuf64g8sd65ovaejq5rn0z ~]# docker save -o busybox.tar busybox

2.载入镜像

[root@izuf64g8sd65ovaejq5rn0z ~]# docker load --input busybox.tar
Loaded image: docker.io/busybox:latest
  • 上传镜像
docker  push NAME[:TAG]

 

  • 中止container
docker  stop  <CONTAINER_ID>
  • 从新启动container
docker start <CONTAINER_ID>
  • 显示存在的容器
docker ps -l/-a
-l:显示最后启动的容器
-a:同时显示中止的容器,默认只显示启动状态
  • 链接到启动的容器
docker attach <CONTAINER_ID>
  • 输出容器日志
docker logs <CONTAINER_ID>
  • 复制容器内的文件到宿主机目录上
docker cp <CONTAINER_ID>:path hostpath

 

# 在docker中运行ubuntu镜像

$ docker run <相关参数> <镜像 ID> <初始命令>

# 守护模式启动

$ docker run -it ubuntu:14.04

 

# 交互模式启动

$ docker run -it ubuntu:14.04 /bin/bash

# 指定端口号启动

$ docker run -p 80:80 birdben/ubuntu:v1

 

# 指定配置启动

$ sudo docker run -d -p 10.211.55.4:9999:22 birdben/ubuntu:v1 '/usr/sbin/sshd' -D

 

# start 启动容器

$ docker start 117843ade696117843ade696

# stop 中止正在运行的容器

$ docker stop 117843ade696117843ade696  

 

# restart 重启容器

$ docker restart 117843ade696117843ade696

# rm 删除容器 $ docker rm 117843ade696117843ade696

 

# rmi 删除镜像

$ docker rmi ed9c93747fe1Deleted

# 登陆Docker Hub中心

$ docker login

 

# 发布上传image(push)

$ docker push birdben/ubuntu:v1

 

 

注意:若是如下命令,不行,就在前面添加sudo ,在执行一次。

更新yum

yum update

 

安装docker

yum install docker

 

启动docker

 service docker start

或者

systemctl start docker.service

 

开机启动

chkconfig docker on

或者

systemctl enable docker.service

 

验证查看

docker info

docker version

 

docker镜像检索

docker search 镜像名

检索redis

docker search redis

 

镜像下载

docker pull 镜像名

下载redis

docker pull redis

 

镜像列表

docker images

 

依次为镜像名 - 软件版本 - 惟一标识 - 建立时间 - 大小 

 

删除镜像

docker rmi image-id

 

删除全部镜像

docker rmi $(docker images -q)

 

运行镜像(端口映射)

后台运行:

docker run -d -p 6379:6379 --name port-redis reds

前台运行:

docker run -rm -p 6379:6379 --name port-redis reds

 

中止容器

docker stop port-redis

 

启动容器

docker start port-redis

 

容器列表

运行中:

docker ps

运行和中止:

docker ps -a

 

删除容器

docker rm port-redis

docker rm $(docker ps -a -q)

 

容器日志

docker logs port-redis

 

登陆日志

docker exec -it port-redis bash

 

高速安装Docker。

curl -sSL https://get.daocloud.io/docker | sh

 

经常使用命令

总结一下经常使用命令:

其中<>阔起来的参数为必选,[]阔起来为可选

docker version                   查看docker的版本号,包括客户端、服务端、依赖的Go等
docker info                    查看系统(docker)层面信息,包括管理的images, containers数等
docker search <image>        在docker index中搜索image

docker pull <image>      从docker registry server 中下拉image
docker push <image|repository>            #推送一个image或repository到registry
docker push <image|repository>:TAG         #同上,指定tag

docker inspect <image|container>          查看image或container的底层信息
docker images TODO filter out the intermediate image layers (intermediate image layers 是什么)
docker images -a         #列出全部的images

docker ps          #默认显示正在运行中的container
docker ps -l       #显示最后一次建立的container,包括未运行的

docker ps -a         #显示全部的container,包括未运行的
docker logs <container>       #查看container的日志,也就是执行命令的一些输出


docker rm <container...>          #删除一个或多个container
docker rm `docker ps -a -q`       # 删除全部的container


docker ps -a -q | xargs docker rm     #同上, 删除全部的container
docker rmi <image...>                   #删除一个或多个image
docker start/stop/restart <container>       #开启/中止/重启container


docker start -i <container>         #启动一个container并进入交互模式
docker attach <container>          #attach一个运行中的container


docker run <image> <command>          #使用image建立container并执行相应命令,而后中止
docker run -i -t <image> /bin/bash     #使用image建立container并进入交互模式, login shell是/bin/bash


docker run -i -t -p <host_port:contain_port>      #将container的端口映射到宿主机的端口
docker commit <container> [repo:tag]               #将一个container固化为一个新的image,后面的repo:tag可选

 
docker build <path>             # 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
docker build -t repo[:tag]      #同上,能够指定repo和可选的tag


docker build - < <dockerfile>     #使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
docker port <container> <container port>      #查看本地哪一个端口映射到container的指定端口,其实用docker ps 也能够看到
使用images新建一个container并登陆

 

 

仓库相关操做

docker pull     #从远程仓库拉取镜像到本地
docker push     #推送本地镜像到远程仓库
docker search   #在仓库搜索镜像
docker login    #登陆到官方仓库Docker Hub
docker logout   #退出登陆

 

镜像相关操做

一、docker build    #从Dockerfile构建镜像
二、docker pull     #同上
三、docker push     #同上
四、docker history  #显示镜像的历史信息
五、docker images   #列出镜像
六、docker rmi      #删除镜像
七、docker tag      #给镜像打上tag标签
八、docker run      #建立容器并启动容器
九、docker create   #建立容器
十、docker commit   #将修改后的容器生成镜像
十一、docker load     #从压缩包中加载镜像
十二、docker import   #
1三、docker save     #将镜像保存到压缩文件

 

容器相关操做

docker attach   #依附到一个正在运行的容器中
docker exec     #进到正在运行的容器中执行命令
docker cp       #在容器和本地系统间复制文件
docker update   #将一个容器内全部的进程从暂停状态中恢复
docker ps       #列出主机中的容器
docker port     #查找一个nat到私有网口的公共口
docker top      #查看一个容器中正在运行的进程信息
docker logs     #查看日志文件
docker diff     #检查容器内文件系统的修改
docker status   #输出容器的资源使用统计信息
docker wait     #阻塞直到容器终止
docker start    #启动已建立的容器
docker pause    #暂停运行中的容器
docker unpause  #使暂停的容器恢复运行
docker stop     #中止容器运行
docker rename   #容器更名
docker restart  #容器重启
docker kill     #关闭运行中的容器
docker rm       #删除容器
docker export   #导出容器内容为tar包
docker run      #同上
docker create   #同上
docker commit   #同上

 

其余基本命令

docker events   #从服务端获取实时的事件
docker info     #查看系统相关信息
docker inspect  #显示Docker对象的具体配置信息,包括容器,镜像,网络等
docker version  #输出Docker的版本信息

 

管理命令

docker container    #容器管理
docker image        #镜像管理
docker network      #网络管理
docker node         #节点管理
docker plugin       #插件管理
docker secret       #
docker service      #服务管理
docker stack        #
docker swarm        #集群管理
docker system       #
docker volume       #卷管理

管理命令不能直接直接使用,后面还要加上命令,好比镜像管理

$ docker image --help

Usage:  docker image COMMAND

Manage images

Options:
      --help   Print usage

Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Run 'docker image COMMAND --help' for more information on a command.

  

能够看到跟基本命令对镜像的操做相似,也包括build,pull,push等,比较经常使用的管理命令包括了

- image
- container
- network
- volume

 

 

login # 登陆docke仓库

logout #退出登陆.

logs #查看容器日志

network # 管理docker网络:-链接;建立;断开;删除

 

 

当利用 docker run 来建立容器时,Docker 在后台运行的标准操做包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像建立并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

 

 

参考连接:

Docker入门及经常使用命令(ubuntu):https://blog.csdn.net/he90227/article/details/53007768

 

Docker入门实战(一)【内含有如何建立容器】:https://blog.csdn.net/u010425776/article/details/52260418

Docker 资料集合:

https://blog.csdn.net/qq_21816375/article/details/78238061

 

docker更全面介绍:https://blog.csdn.net/hcljava/article/details/78588623?locationNum=6&fps=1

 

Docker入门实战-SSH链接docker容器:https://blog.csdn.net/qq626387/article/details/50506636

 

在Centos 7搭建Docker环境(ssh死活连不上):https://blog.csdn.net/qq_39871625/article/details/78029431

相关文章
相关标签/搜索