Docker经常使用命令速查手册(华贵铂金版)

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

Docker经常使用命令速查手册

 

搜索仓库镜像nginx

docker search nginxgit

获取镜像github

docker pull nginxweb

列出镜像docker

docker imagesjson

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

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命令,容器文件会丢失全部元数据和历史记录,仅保存容器当时的状态,至关于虚拟机快照。

http://www.javashuo.com/article/p-cxpctiim-dk.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 5000:5000 --mount type=volume,src=my-docker-register,target=/var/lib/registry --name docker-registry registry

 

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

server {

     #SSL 访问端口号为 443

     listen 443;

     #填写绑定证书的域名

     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.1 TLSv1.2;

     #请按照如下套件配置,配置加密套件,写法遵循 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:5000;

    }

 

当前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的私有仓库的功能不少,因此再向下继续深挖就有点过于运维了【~~ /捂脸笑】

 

因此此处列举一些可能存在的问题点,后续若有兴趣能够再继续深刻

一、register的使用过程当中,因为是使用的Nginx作的反向代理,因此对于过大的镜像文件pull 或push时超时的问题处理(修改nginx超时时间理论上能够解决,暂未验证)

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

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

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

 可参考的外部文章连接:

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

 

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

 

Docker Compose

 

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

相关文章
相关标签/搜索