欢迎光临
我们一直在努力

Docker常用命令速查手册

1.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

2.容器与镜像的导入导出

 

导出本地某个容器为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命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。

 

导出本地镜像为tar包

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

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

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

docker load < 文件名.tar

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

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

 

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

docker diff nginx-sip

查看 镜像内的历史记录

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

docker history nginx:v1224

查看镜像或容器的信息

docker inspect nginx(nginx-sip)

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

docker system df

4.Docker commit

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

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

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

 

5.数据卷的操作

创建一个数据卷

docker volume create my-vol

查看当前所有的数据卷

docker volume ls

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

docker volume inspect my-vol

删除指定数据卷

docker volume rm my-vol

清理无主的数据卷

docker volume prune

建议:

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

6.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两种方式

 

7.批量删除

停止所有容器

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

8.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守护进程的日志配置

9.Dockfile

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的端口

 

10|0基于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的私有仓库的功能很多,所以再向下继续深挖就有点过于运维了【~~ /捂脸笑】

 

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

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

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

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

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

未经允许不得转载:798VPS » Docker常用命令速查手册

相关推荐

  • 暂无文章