Docker 精通之常用命令

Docker 精通系列

  • Docker 精通之入门
  • Docker 精通之微服务
  • Docker 精通之常用命令
  • Docker 精通之 Dockerfile

配置文件路径

/etc/sysconfig/docker 

docker镜像及容器目录

主目录:/var/lib/docker

容器存放目录:/var/lib/docker/containers/

镜像存放目录:/var/lib/docker/image

帮助信息

docker --help

docker command --help    # 比如 docker image --help

docker info                        # 显示docker的安装信息,及运行状态

docker version                  # 版本版本信息

docker container 相关

$ docker container ls           

列出本机正在运行的容器

$ docker container ls --all   

列出本机所有容器,包括终止运行的容器

$ docker container kill [containID]     

终止容器

$ docker container rm [containerID]  

删除终止运行的容器,参数如下:

  • -v:删除容器挂载的数据卷,默认情况下删除容器不会删除数据卷,要删除一个数据卷,必须在删除最后一个挂载该数据卷的容器时使用 -v 参数
  • -f:如果容器正在运行,则强行终止并删除

$ docker [container] run -p 8000:3000 koa-demo 

运行容器,详细参数如下:

  • -p 8000:3000     # 容器的 3000 端口映射到本机的 8000 端口。
  • -d                       # 容器启动后,在后台运行
  • -it                       # 容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。-t分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开
  • koa-demo:0.0.1 # image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
  • /bin/bash            # 容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
  • --name flp          # 容器的名字flp
  • --rm                    # 容器终止运行后自动删除容器文件。
  • --volume "$PWD/":/var/www/html  # 将当前目录($PWD)映射到容器的/var/www/html(Apache 对外访问的默认目录)。因此,当前目录的任何修改,都会反映到容器里面,进而被外部访问到,可指定多个;
  • --volume /var/www/html                # 在容器内部创建一个共享数据卷,数据卷只有在未被任何容器使用时才能被删除
  • --volume-from 容器ID                    # 挂载容器ID中的共享数据卷,实现在容器内部共享数据卷
  • -v   # 同--volume
  • :ro  # 只读,"$PWD/":/var/www/html:ro
  • --env MYSQL_ROOT_PASSWORD=123456 # 向容器进程传入一个环境变量MYSQL_ROOT_PASSWORD,该变量会被用作 MySQL 的根密码。
  • --env MYSQL_DATABASE=wordpress           # 向容器进程传入一个环境变量MYSQL_DATABASE,容器里面的 MySQL 会根据该变量创建一个同名数据库(本例是WordPress)
  • --link wordpressdb:mysql     # 表示 WordPress 容器要连到wordpressdb容器,冒号表示该容器的别名是mysql
  • -p 127.0.0.2:8080:80           # 将容器的 80 端口映射到127.0.0.2的8080端口
  • -P                                         # 随机映射一个端口
  • --cpuset-cpus=0-3               # 设定容器可以使用哪些主机上的cpu核心,0-3:表示0核~3核,4个核心,1,2:表示1核和2核
  • --memory=104857600         # 可以使用主机内存的上限,单位是B,这里表示100M 1024B * 1024B * 100

使用docker run命令来启动容器,docker在后台运行的标准操作包括

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

$ docker container start [containerID]

前面的docker container run命令是新建容器,每运行一次,就会新建一个容器。如果希望重复使用容器,就要使用docker container start命令,它用来启动已经生成、已经停止运行的容器文件。

$ bash container stop [containerID]

前面的docker container kill命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号。而docker container stop命令也是用来终止容器运行,相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号。这两个信号的差别是,应用程序收到 SIGTERM 信号以后,可以自行进行收尾清理工作,但也可以不理会这个信号。如果收到 SIGKILL 信号,就会强行立即终止,那些正在进行中的操作会全部丢失。

$ docker container logs [containerID] 

命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出。

  • -f:实时输出

$ docker container exec -it [containerID] /bin/bash 

用于进入一个正在运行的 docker 容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了。也可以把 /bin/bash 换成命令,作用是在容器里执行命令,并输出结果

$ docker container cp [containID]:[/path/to/file] [/path/to/file]

# docker container cp命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。也可以将两个参数换下位置,就是将本机文件拷贝到docker

$ docker attach 容器ID   

连接到启动的容器

docker 命令

  • docker search -s 100 centos   #搜索镜像centos,-s :搜索星标至少为100的镜像
  • docker inspect 镜像ID             #查看镜像内边信息
  • docker restart 容器ID              #重启镜像
  • docker pull image_name         #下载镜像
  • docker ps       #列出当前所有正在运行的container  
    •  -a   #列出所有的container  
    •  -l    #列出最近一次启动的container    
  • docker rm 容器ID #删除container
    • -f:如果容器正在运行,则强行终止并删除
    • -v:删除容器挂载的数据卷,默认情况下删除容器不会删除数据卷,要删除一个数据卷,必须在删除最后一个挂载该数据卷的容器时使用 -v 参数
  • docker rm `docker ps -a -q` #删除所有容器
  • docker kill `docker ps -q`
  • docker rmi `docker images -q -a`
  • docker wait 容器ID #阻塞对容器的其他调用方法,直到容器停止后退出
  • docker top 容器ID  #查看容器中运行的进程
  • docker diff 容器ID  #查看容器中的变化
  • docker inspect 容器ID #查看容器详细信息(输出为Json)
    • -f:查找特定信息,如docker inspect -f '{{ .NetworkSettings.IPAddress }}'
  • docker port 容器ID 5000 #查看容器的5000端口对应本地机器的IP和端口号

容器,镜像导入导出

docker export 容器ID > container.tar           #导出容器migrate.tar,相当于快照
docker import container.tar - test/ubuntu      #导入镜像,镜像名字为test/ubuntu,load不可以指定名字
cat container.tar| docker import - test/ubuntu #导入镜像,镜像名字为test/ubuntu,load不可以指定名字docker save -o image.tar 镜像ID  #将一个镜像导出为文件,会保存镜像的所有记录
docker load --input image.tar    #导入image.tar到本地镜像,import可以指定名字
docker load < image.tar          #导入image.tar到本地镜像,import可以指定名字

将 container 持久化为一个 image

$ docker commit 容器ID 新镜像名 

  • -a, --author=""      # 作者 
  • -m, --message="" # 注释
  • -p                          # 在commit是,暂停容器执行

发布 image 到仓库

发布 image 需要有对应的tag 

# 1、首先是登录docker hub 
[root@docker-test1 ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (wangshibo): you_name
Password:
Login Succeeded[root@docker-test1 ~]# docker push wangshibo/myubuntu:v1
The push refers to a repository [docker.io/wangshibo/myubuntu]
An image does not exist locally with the tag: docker.io/wangshibo/myubuntu# 2、这里需要将ubuntu:v1镜像改名,在名称前加上自己的docker hub的Docker ID,即wangshibo
[root@docker-test1 ~]# docker tag 6ce4aedd12cd wangshibo/myubuntu:v1
[root@docker-test1 ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
myubuntu             v1                  6ce4aedd12cd        6 minutes ago       84.1 MB
wangshibo/myubuntu   v1                  6ce4aedd12cd        6 minutes ago       84.1 MB# 3、再次进行推送(注意:下面的v1的tag标签可以不打,默认是latest)。推送操作时间稍微会有一点长,耐心等待~
[root@docker-test1 ~]# docker push myubuntu:v1           
The push refers to a repository [docker.io/myubuntu]
b5948ba9486d: Pushed
8d7ea83e3c62: Mounted from library/ubuntu
...
a30b835850bf: Mounted from library/ubuntu
v1: digest: sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d size: 1564# 4、最后登录自己的Docker Hub,即https://hub.docker.com/,登录后,在Repositories里面就可以看到自己在上面推送的镜像myubuntu:v1了,这是个对外的镜像,可以在网络上下载。在Docker hub上可以看到这个镜像的下载命令(注意下载时跟上tag标签,如果是latest的默认tag可以不跟)
也可以直接在Docker hub上删除这个镜像(Repositories-镜像-Settings-delete)# 5、在本机删除这个镜像
[root@docker-test1 ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
myubuntu             v1                  6ce4aedd12cd        15 minutes ago      84.1 MB
wangshibo/myubuntu   v1                  6ce4aedd12cd        15 minutes ago      84.1 MB# 注意上面有两个6ce4aedd12cd的镜像ID,此时直接使用这个镜像ID是删除不掉的
[root@docker-test1 ~]# docker rmi 6ce4aedd12cd
Error response from daemon: conflict: unable to delete 6ce4aedd12cd (must be forced) - image is referenced in multiple repositories# 应该先删除docker tag改名前的镜像,使用镜像名称删除。(一般在docker tag镜像改名后,最好删除改名前的镜像)
[root@docker-test1 ~]# docker rmi myubuntu:v1
Untagged: myubuntu:v1
Untagged: wangshibo/myubuntu@sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d[root@docker-test1 ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
wangshibo/myubuntu   v1                  6ce4aedd12cd        15 minutes ago      84.1 MB# 这个时候就可以删除镜像ID删除了
[root@docker-test1 ~]# docker rmi 6ce4aedd12cd
Untagged: wangshibo/myubuntu:v1
Deleted: sha256:6ce4aedd12cda693d0bbb857cc443a56f9f569106e09ec61aa53563d0932ea4d
Deleted: sha256:0ddeb6a16badd042914c2e72b9ef0331550c1cdcc4bdc6650a90cd9f57f1501b
[root@docker-test1 ~]# docker images         
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    16.04               7aa3602ab41e        5 weeks ago         115 MB

docker image 相关

$ docker image ls -a //  docker image ls --all

列出本机的所有 image 文件。

$ docker image rm [imageName]

删除 image 文件

$ docker image tag [imageName] [username]/[repository]:[tag]

打标签。$ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1     # koa-demos:0.0.1 是 image 的 name,。ruanyf/koa-demos(新的名字):0.0.1(tag)

$ docker image build -t [username]/[repository]:[tag] . 

也可以不标注用户名,重新构建一下 image 文件。

$ docker image push [username]/[repository]:[tag]

发布 image 文件。

$ docker image pull library/hello-world

将 image 文件从仓库抓取到本地。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字。由于 Docker 官方提供的 image 文件,都放在library组里面,所以它的是默认组,可以省略。因此,上面的命令可以写成这样。$ docker image pull hello-world

$ docker image build -t koa-demo:0.0.1 .

创建image 文件,会用到dockerfile文件,参考 Docker 精通之 Dockerfile

  •     .       #注意最后有一个 "."代表本地路径
  •     -t     #指定image名字
  •     :     #冒号后面可以添加标签

docker images 相关

$ docker images -a

展示本地的所有镜像,默认隐藏中间的镜像

$ docker images --digests

展示镜像的摘要

$ docker images -f xxxx

查看对应的过滤条件,这个过滤标签的格式是 “key=value”,如果有多个条件,则使用这种 --filter "key1=value" --filter "key2=value"。比如:过滤没有打标签的镜像docker images -f "dangling=true",当前支持的过滤配置的key为:

  • dangling:显示标记为空的镜像,值只有true和false
  • label:这个是根据标签进行过滤,其中lable的值,是docker在编译的时候配置的或者在Dockerfile中配置的
  • before:这个是根据时间来进行过滤,其中before的value表示某个镜像构建时间之前的镜像列表
  • since:跟before正好相反,表示的是在某个镜像构建之后构建的镜像
  • reference:这个是添加正则进行匹配

$ docker rmi $(docker images -f "dangling=true" -q)

表示清理当前repo:tag为<none>的镜像。在对应的镜像repo:tag构建新的镜像的时候,旧的镜像就会从repo:tag中移走,进而成为<none>,这个时候,我们就可以对这些进行清理

$ docker images --format

这个是进行对展示的进行格式化话展示

PlaceholderDescription
.IDImage ID
.RepositoryImage repository
.TagImage tag
.DigestImage digest
.CreatedSinceElapsed time since the image was created
.CreatedAtTime when the image was created
.SizeImage disk size

$ docker images -q

这个其实跟 docker images --format "{{.ID}}" 效果是一样的,是只展示ID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

世界500强面试题(经典)

本书中的问题&#xff0c;是软件业人士在面试时常问的&#xff0c;其中大多数出自微软公司&#xff0c;也有一些来自世界500强公司中的其 他公司。其实道理是相通的&#xff0c;认真领会&#xff0c;加以变通&#xff0c;当你读完全书时&#xff0c;你会发现你已经找到了一块进…

php 获取字符串中的url,php使用正则表达式获取字符串中的URL

今天写一个问答系统上线之后发现有很多人发链接了,由于业务部门要我们过滤掉网站地址了,下面我给大家分享一个提取字符串url地址函数,代码如下:$str 本文实例讲述了php匹配字符串里所有URL地址的方法。http://www.manongjc.com 分享给大家供大家参考;preg_match_all("/htt…

如何提高安卓代码的质量和语法

本文讲的是如何提高安卓代码的质量和语法&#xff0c;在这篇文章中&#xff0c;我会介绍几种不同的方式&#xff0c;让你通过自动化工具提高你的Android代码质量&#xff0c;包括 Checkstyle&#xff0c; Findbugs&#xff0c;PMD&#xff0c; 当然&#xff0c;还有我们最熟悉的…

洛谷 U3357 C2-走楼梯

https://www.luogu.org/problem/show?pidU3357 题目背景 在你成功地解决了上一个问题之后&#xff0c;方方方不禁有些气恼&#xff0c;于是他在楼梯上跳来跳去&#xff0c;想要你求出他跳的方案数。.. 题目描述 方方方站在一个n阶楼梯下面&#xff0c;他每次可以往上跳一步或两…

Liunx 系统调优

Sysctl命令用来配置与显示在/proc/sys目录中的内核参数&#xff0e;如果想使参数长期保存&#xff0c;可以通过编辑/etc/sysctl.conf文件来实现。 命令格式&#xff1a;sysctl [-n] [-e]-w # 临时改变某个指定参数的值&#xff0c;如sysctl -w net.ipv4.ip_forward1-a # 显示…

php多文件上传存储到表,PHP 实现一种多文件上传的方法

搜索热词之前在实现表单中file类型input选择多图片的时候找到一种方式 也许不是最好的但亲测可行且支持ie7以上以及chrome浏览器在表单中使用正常多文件选择multiple属性PHP;">然后使用AjaxFileUpload或其他方式提交将对应命名的file文件 $file[‘image] 转化为 json打…

CentOS7设置自定义开机启动,添加自定义系统服务

Centos 系统服务脚本目录&#xff1a; /usr/lib/systemd/ 有系统&#xff08;system&#xff09;和用户&#xff08;user&#xff09;之分&#xff0c;如需要开机没有登陆情况下就能运行的程序&#xff0c;存在系统服务&#xff08;system&#xff09;里&#xff0c;即&#xf…

成功应聘Intel的真实经历

编者按&#xff1a;INTEL&#xff08;英特尔&#xff09;公司创建于1968年&#xff0c;是全球最大的芯片制造商&#xff0c;Intel研究中心更是汇聚了全球无数的精英&#xff0c;一批年轻人抱着梦想走入了这里&#xff0c;过去我们谈到了太多关于Intel技术与市场方面&#xff0c…

Kotlin学习记录1

参考我的博客&#xff1a;http://www.isedwardtang.com/2017/09/02/kotlin-primer-1/转载于:https://www.cnblogs.com/EdwardTang/p/7476787.html

Keepalived配置文件详解

keepalivedkeepalived是集群管理中保证集群高可用的一个服务软件&#xff0c;其功能类似于heartbeat&#xff0c;用来防止单点故障。keepalived工作原理keepalived是以VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;即虚拟路由冗余协议&#xff09;协议为实现…

php高等数学,中国大学《高等数学(四)》期末答案高校邦《PHP语言程序设计》见面课答案...

参考答案如下Conversation 2Pretco-A12.9-10.mp3:9、中国 A) Some shoes are missing. B) Itsdelivery is delayed.C) The order is cancelled. D) Some packages are damaged.10、中国 A) Giving an additional discount. B) Renewing the contract.C) Sending the goods by a…

深入剖析ThreadLocal实现原理以及内存泄漏问题

关于ThreadLocalMap<ThreadLocal, Object>弱引用问题&#xff1a; 当线程没有结束&#xff0c;但是ThreadLocal已经被回收&#xff0c;则可能导致线程中存在ThreadLocalMap<null, Object>的键值对&#xff0c;造成内存泄露。&#xff08;ThreadLocal被回收&#xf…

解读《普通大学应届毕业生如何成功应聘微软》

《普通大学应届毕业生如何成功应聘微软》这篇文章很有实践性&#xff0c;我所要提的&#xff0c;是最后一道面试&#xff0c;也就是唐骏本人对作者的面试&#xff0c;这一轮看似平常的面试大有门道。仔细想想&#xff0c;为什么这些问题由唐骏本人来问&#xff0c;他为什么要这…

grep 命令的 12 个实例

2019独角兽企业重金招聘Python工程师标准>>> 你是否遇到过需要在文件中查找一个特定的字符串或者样式&#xff0c;但是不知道从哪儿开始&#xff1f;那么,就请grep来帮你吧。 grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具。无论何种原因&#xff0c;…

php 怎么从memcache缓存数据中统计某一字段总数,php和memcache统计在线人数的方法...

$mc new Memcache ();// 连接memcache$mc->connect("127.0.0.1", 11211);// 获取 在线用户 IP 和 在线时间数据$online_members $mc->get(online_members);// 如果为空&#xff0c;初始化数据if (!$online_members) {$online_members array();}// 获取用户i…

ubuntu之ufw防火墙

UFW是Ubuntu下的一个主机端的iptables类防火墙配置工具(底层调用iptables来处理)。这个工具的目的是提供给用户一个可以轻松驾驭的界面&#xff0c;就像包集成和动态检测开放的端口一样。虽然功能较简单&#xff0c;但对桌面型应用来说比较实用&#xff0c;基本常用功能都有&am…

background-size在IE8不兼容问题

background-size在IE8及以下浏览器不兼容&#xff1b;要解决的话要用滤镜&#xff1a; filter: progid: DXImageTransform.Microsoft.AlphaImageLoader( src, sizingMethodscale); 注意&#xff1a;此处src的路径必须是绝对路径&#xff0c;相对路径不可以&#xff01; 当写完…

程序员 大牛 面试

水 滴 石 穿 -- 找工作记 -- yurking&#xff08;yurkinggmail.com&#xff09; 一日一钱&#xff0c;千日千钱&#xff0c;绳锯木断&#xff0c;水滴石穿! 这个东西写出来有一段时间了&#xff0c;但是一直没发&#xff0c;想着等有时间了再好好的看一看&#xff0c;改一…

Linux : shell基础(慕课网Linux达人养成计划课程笔记)

Shell概述 shell是Linux中的命令行解释器&#xff0c;为用户提供了一个向Linux内核发送请求一边运行程序的界面系统级程序&#xff0c;用户可以用shell来启动、挂起、停止甚至编写一些程序。shell还是一个功能相当强大的编程语言&#xff0c;易编写&#xff0c;易调试&#xff…

基于matlab的大米,大米颗数计算MATLAB软件

应用背景大米是人类的主食之一&#xff0c;是稻谷经清理、砻谷、碾米、成品整理等工序后制成的成品。人们购买米大多采用直接称量的方法&#xff0c;市面上也有许多仪器采用光电传感器等方式用于生产加工时米粒的计数。然而这样的方法都比较依赖于设备&#xff0c;不方便人们日…