原创声明:作者:Arnold.zhao  博客园地址:https://www.cnblogs.com/zh94

Docker常用命令速查手册

搜索仓库镜像

docker search nginx

获取镜像

docker pull nginx

列出镜像

docker images

查看镜像、容器、数据卷所占用的空间。

docker system df

查看Docker容器的相关信息

docker info

删除镜像(or 标签)

docker image rm ID

启动镜像

docker run -d -p 8088:80 --name nginx-sip nginx (--rm -it 参数)

停止容器

docker stop nginx-sip

将stop后的容器直接启动

docker start nginx-sip

重新启动一个容器

docker restart nginx-sip

删除一个已经停止了的容器

docker rm nginx-sip

删除所有已经停止运行的容器

docker container prune

查看容器列表

docker ps -a

查看镜像或容器的信息

docker inspect nginx(nginx-sip)

进入当前容器的文件系统

docker exec -it nginx-sip sh

容器与镜像的导入导出

导出本地某个容器为tar包   (目前容器打包为镜像后,不能直接启动,通过 docker inspect查看发现当前镜像不存在CMD相关配置,暂保留)

docker export nginx-sip > /home/psrt/docker/nginx-sip-export.tar

将所归档的容器文件导入为当前docker镜像

docker import nginx-sip-export.tar nginx_arnold:v1

docker import/docker export;将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker 

save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。

https://www.cnblogs.com/linjiqin/p/8618635.html

导出本地镜像为tar包

docker save -o 文件名.tar 镜像名称

docker save 镜像名称>/opt/文件名.tar

将对应的打包镜像加载到对应的Docker镜像中

docker load < 文件名.tar

docker load/docker save;将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。

查看容器,镜像的改动记录Diff & history

通过diff查看当前 容器 存储层的具体改动记录

docker diff nginx-sip

查看 镜像内的历史记录

(是针对镜像使用的命令,于docker diff区分开,docker diff是针对容器进行使用的)

docker history nginx:v1224

查看镜像或容器的信息

docker inspect nginx(nginx-sip)

查看镜像、容器、数据卷所占用的空间。

docker system df

Docker commit

将当前nginx-sip容器存储层保存为名称为nginx:v1224的镜像,其中包含了容器内的所有改动,其中镜像内包含了原有容器的所有文件变化(可以配合docker save再将镜像归档为tar的包)

docker commit --author 'arnold_zhao@xiaoi.com' --message '修改了网页和新增了arnold文件夹' nginx-sip nginx:v1224

慎用docker commit ,因为会把镜像搞的很臃肿,且黑箱,;但有需求的话,还是要用滴;毕竟需求最大

数据卷的操作

原创声明:作者:Arnold.zhao  博客园地址:https://www.cnblogs.com/zh94

创建一个数据卷

docker volume create my-vol

查看当前所有的数据卷

docker volume ls

查看对应数据卷的具体信息

docker volume inspect my-vol

删除指定数据卷

docker volume rm my-vol

清理无主的数据卷

docker volume prune

建议:

所有的容器挂载等相关操作,都基于数据卷的方式进行挂载,这样将会易于容器的后续管理;否则随着后续容器的越来越多,每一个容器都随意挂载宿主机的文件目录,将会导致后续的Docker容器管理越来越混乱;

Mount挂载

docker volume create kbase-sip-volume

采用数据卷的方式进行挂载:

docker run -d -p 8088:8088  --mount type=volume,src=kbase-sip-volume,target=/log/kbase-psrt/ --name kbase-psrt  kbase-psrt

关于目录挂载相关的信息,详情可查看如下文章:

(通过如下文章可以知悉 -v,volume的挂载方式,尽管如此,此处仍然建议使用者优先使用 mount做目录挂载)

docker_practice & 使用绑定挂载(bind mount) & 数据卷 & 数据持久化volume和bind mounts两种方式

批量删除

停止所有容器

docker stop $(docker ps -s -q )

删除所有容器

docker rm $(docker ps -a -s -q )

删除所有镜像

docker image rm $(docker images -q )

核心:

主要是通过:-q 参数表示只显示对应的ID,也可以通过 -f 参数(过滤器),筛选出更多的条件数据;如:

docker image ls -f since=mongo:3.2 (表示获取mongo:3.2以后的镜像信息)

docker image ls -f label=com.example.version=0.1(获取指定标签的镜像数据)

通过使用filter过滤器以及配合-q后所产生的指定范围的ID列表的方式,来配合另外一个docker命令作为参数,以此来删除所对应的 批量容器或镜像等信息;除了上述常用的删除操作外,还可以使用 --format 来自定义模板展示,详情可查看该链接:

docker_practice

Docker logs

获取docker容器的日志路径:

docker  inspect  --format '{{.LogPath}}'   CONTAINER_ID

查看当前Docker的全局守护进程的默认日志驱动程序(默认为:json-file,)

docker info --format '{{.LoggingDriver}}'

容器启动时设置对应的日志启动类型(此处设置驱动为json-file,且设置json日志文件最大为10M,超出10M则自动生成新的文件,max-file=3表示最多生成3个日志文件,超出则删除)

docker run -d  -p 80:80  --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 --name nginx nginx

容器日志的几种查看方式:

查看指定时间后的日志,只显示最后100行:

docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

查看最近30分钟的日志:

docker logs --since 30m CONTAINER_ID

查看某时间段日志:

docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

可参考文章链接:

Docker日志官网文档 & 容器日志的几种查看方式 &容器启动时指定驱动及文件配置

不在容器启动时候进行日志驱动的配置,而是直接配置当前整个Docker服务的驱动配置,可参考如下链接:

注意:很多文章写法不明不白有些曲解人意,docker 的容器日志也是日志,docker的整个守护进程的服务日志也是日志,所以 在查看下述文章链接或查找相关资料的时候,一定要自我区分什么是Docker容器的日志配置,什么是针对整个Docker引擎的日志配置,不要搞的不明不白即可;

Docker日志位置 & 日志配置 & Docker日志设置 & Docker守护进程的日志配置

Dockfile

原创声明:作者:Arnold.zhao  博客园地址:https://www.cnblogs.com/zh94

RUN 指令是用来执行命令行命令的,由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一,构建镜像时会被运行使用

RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

 

镜像构建

docker build -t nginx:v3 .

 

COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置:

COPY dev/application-dev.properties /app/kbase-psrt/

CMD 命令是在容器被启动后执行,定义CMD容器启动时的命令操作

CMD ["nginx", "-g", "daemon off;"]

entrypoint   替换CMD指令,(用于docker启动时的传参,docker启动时所输入的命令都会替换原有构建文件中的CMD命令,所以此处entrypoint可以接受cmd命令的方式,就是所输入的参数替换了CMD,然后又执行entrypoint时得到对应的参数信息)

ENV设置环境变量 无论是后续构建的指令使用 还是运行时的容器应用都可以使用该环境变量,$VERSION

ENV VERSION=1.0 DEBUG=on \

NAME="Happy Feet"

ARG也是定义环境变量参数,不同的是,ARG定义的变量,在容器运行时是不会存在这些变量

ARG VERSION=1.0

Volume 定义匿名卷(目的:容器内存储层尽量不发生写操作,将所对应的动态保存数据的目录,挂载到对应的宿主机目录上去,或直接挂载到匿名目录中 ,保持了容器存储层的无态变化)

EXPOSE <端口1> [<端口2>...]   暴露对应的端口;   运行时使用随机端口映射时 docker run  -p ,会自动随机映射一个EXPOSE的端口

上下文路径的解释(推荐)

基于Docker的私有仓库的搭建

Docker仓库的访问操作默认是必须为Https的方式进行,所以首先需要先搭建一个Https的代理环境,用于后续的Docker的操作:

本人此处是使用的腾讯云域名厂商所签发的https证书,然后再通过Nginx https反向代理的方式用来访问Docker的仓库地址;

关于腾讯云的SSL证书申请步骤如下所示(各大云厂商实际都具备颁发SSL证书的能力,此处以腾讯云举例了,毕竟楼主目前使用的是腾讯云):

只要有购买该厂商的域名,都可以申请免费的SSL证书

申请完以后在对应的证书列表中,可以查看对应的已颁发证书

Https证书的安装步骤详情,本人此处选择的是通过Nginx进行证书的安装

创建对应的数据卷,并启动registry docker仓库镜像

docker volume create my-docker-register

docker run -d  -p : --mount type=volume,src=my-docker-register,target=/var/lib/registry --name docker-registry registry

启动完对应的 registry仓库后,直接配置对应的Nginx反向代理到对应的 5000的端口上,当前本人的Nginx配置如下(可以参考腾讯云所给的配置建议):

server {

     #SSL 访问端口号为 

     listen ;

     #填写绑定证书的域名

     server_name docker.register.zhivx.com;

     #启用 SSL 功能

     ssl on;

     #证书文件名称

     ssl_certificate /opt/app/nginx/conf/docker-https/1_docker.register.zhivx.com_bundle.crt;

     #私钥文件名称

     ssl_certificate_key /opt/app/nginx/conf/docker-https/2_docker.register.zhivx.com.key;

     ssl_session_timeout 5m;

     #请按照以下协议配置

     ssl_protocols TLSv1 TLSv1. TLSv1.;

     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。

     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

     ssl_prefer_server_ciphers on;

     location / {

            proxy_pass_header Server;

            proxy_set_header Host $http_host;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Scheme $scheme;

            #万能的Nginx,此处需注意需反向代理后的registry的访问方式为http

            proxy_pass http://registry;

     }

     #location / {

     #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。

     #   root /opt/app/nginx/html;

     #   index  index.html index.htm;

     #}

 }

upstream registry {

        server 127.0.0.1:;

    }

当前Windows的机器作为Docker的Client端, Pull相关数据

docker tag kbase-psrt:latest docker.register.zhivx.com/kbase-psrt

docker push docker.register.zhivx.com/kbase-psrt 

以上,基本上你的Docker私有仓库就已经配置成功了:

但是,Docker的私有仓库的功能很多,所以再向下继续深挖就有点过于运维了【~~ /捂脸笑】

所以此处列举一些可能存在的问题点,后续如有兴趣可以再继续深入

1、register的使用过程中,由于是使用的Nginx做的反向代理,所以对于过大的镜像文件pull 或push时超时的问题处理(修改nginx超时时间理论上可以解决,暂未验证)

2、register仓库的安全性(针对各团队成员分配唯一的账号密码及权限配置)

3、register仓库的可视化管理工具(github上有一些,此处推荐一下docker-registry-web,不过感觉目前的可视化工具都还不够完善,坑有点多。。所以还不敢深入,感兴趣有时间的同学可以尝试下)

4、仓库一直在深度使用的过程中磁盘占用较大等数据迁移,以及正常团队使用过程中网络异常是否会导致仓库中存在脏数据等现象?部分push一半的镜像如果中间停止了push,通过查看仓库的映射目录,会发现的确还是存在已经上传一半的数据的,那么这些数据的处理方式是什么?手动的在服务器脚本清理,或者是在可视化界面中进行清理?目前看到的现象是 https:/** /v2/_catalog 时针对脏数据等镜像信息是不能显示出来的;

可参考的外部文章链接:

openssl自行签发域名证书 & 阿里域名厂商的所提供的站点证书进行配置

原创声明:作者:Arnold.zhao  博客园地址:https://www.cnblogs.com/zh94

Docker Compose

原本是想整理下自己印象笔记中的一些关于Docker的随笔,顺带汇总下相关的常用Docker命令,方便后续回顾时使用,但没想到一整理还花费了挺长时间!尼玛。。后续会持续的更新维护.........后续再升级,就是,璀璨钻石版?超凡大师版?end 最强王者

Docker常用命令速查手册(华贵铂金版)的更多相关文章

  1. Docker 常用命令速查手册

    记录一下docker的日常使用命令,本文主要针对linux + mac操作系统而言,window是否适用不太确定,谨慎使用 1. docker进程 docker进程启动.停止.重启,常见的三种case ...

  2. Ubuntu常用命令速查手册-珍藏版-完整版

    sudo apt-get install 软件名 安装软件命令 sudo nautilus 打开文件(有root权限) su root 切换到“root” ls 列出当前目录文件(不包括隐含文件) l ...

  3. Linux系统常用命令速查手册

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 系统信息 arch      #显示机器的处理器架构(1 ...

  4. Git常用命令速查手册

    Git组成 1.初始化仓库 git init 2.将文件添加到仓库 git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文 ...

  5. Git 常用命令速查手册

    来源:https://www.jianshu.com/p/5ee9897b6b65 1.初始化仓库 git init 2.将文件添加到仓库 git add 文件名 # 将工作区的某个文件添加到暂存区 ...

  6. Docker常用命令速查

    docker pull ${CONTAINER NAME} #拉取镜像 docker images #查看本地所有镜像 docker ps #查看所有正在运行的容器,加-q返回id docker ps ...

  7. [Git]Git常用命令速查手册

    看的别人的文章,来源:https://mp.weixin.qq.com/s/SGRcE9EPOu4Tph65tzPzQw

  8. Linux常用命令速查备忘

    Linux常用命令速查备忘   PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...

  9. Git 常用命令速查表(图文+表格)【转】

    转自:http://www.jb51.net/article/55442.htm 一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git comm ...

随机推荐

  1. Java练习 SDUT-3328_JAVA判断合法标识符

    JAVA判断合法标识符 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入若干行字符串,判断每行字符串是否可以作为JA ...

  2. asp.net抓取网页html源代码失败 只因UserAgent作怪

    asp.net抓取网页html源代码,我想对于任何一个asp.net程序员来说都不再陌生,这是一个非常简单容易就能实现的功能.下面便是一个通用的asp.net获得网页源代码的程序. 首先引用 usin ...

  3. Streamy障碍一:大批量条目

  4. hdu 5723 Abandoned country(2016多校第一场) (最小生成树+期望)

    Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  5. Project Euler Problem 21-Amicable numbers

    先说最暴力的算法,直接对一万内的每个数字暴力分解因子(对每个数字的时间复杂度是O(sqrt(n)的),然后,用个数组记录下来因子和,然后寻找 亲密数. 好一点:要先打个素数表,然后对每个数字,分解素因 ...

  6. 认识一下ES6的Reflect和Proxy

    Reflect Reflect要替代Object的很多方法, 将Object对象一些明显属于言内部的方法放到了Reflect对象上,有13个方法 Reflect.apply(target, thisA ...

  7. H3C ARP

  8. H3C 面向连接和无连接的服务

  9. http端口

    HTTPS全称是Hyper Text Transfer Protocol over Secure Socket Layer, 即http的安全版. https使用的端口是443,而http的端口是80 ...

  10. Python--day67--Django的路由系统

    原文:https://www.cnblogs.com/liwenzhou/articles/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL ...