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

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

Placeholder Description
.ID Image ID
.Repository Image repository
.Tag Image tag
.Digest Image digest
.CreatedSince Elapsed time since the image was created
.CreatedAt Time when the image was created
.Size Image disk size

$ docker images -q

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

Docker 精通之常用命令相关推荐

  1. Docker客户端常用命令整理

    之前在 https://blog.csdn.net/fengbingchun/article/details/109584460 中介绍过在Windows10家庭版和Ubuntu16.04上安装Doc ...

  2. Docker初学3:Docker的常用命令

    Docker的常用命令 帮助命令 帮助命令可以在我们遇到不懂的命令时帮助我们去了解它们怎么使用. docker version # 显示 Docker 版本信息. docker info # 显示 D ...

  3. Docker镜像常用命令

    Docker镜像常用命令 查看镜像列表 docker images $ docker images >>> REPOSITORY TAG IMAGE ID CREATED SIZE ...

  4. 久等了!Docker容器常用命令

    点击蓝色"程序员的时光 "关注我 ,标注"星标",及时阅读最新技术文章 写在前面: 小伙伴儿们,大家好!上一篇我们讲到Docker的常用命令--详细齐全!Doc ...

  5. Docker的RUN流程和Docker原理、Docker的常用命令、其他命令

    Docker的RUN流程和Docker原理 Run流程 底层原理 Docker是怎么工作的 Docker为什么比VM快 Docker的常用命令 帮助命令 镜像命令 查看镜像 搜索镜像 下载镜像 指定版 ...

  6. docker的常用命令(三)

    docker的常用命令 帮助命令 docker version # 显示docker版本信息 docker info # 显示docker的系统,包含镜像和容器的数量 docker 命令 --help ...

  7. Docker学习(三)-----Docker镜像常用命令

    六.Docker镜像 镜像是Docker的三大组件之一 Docker运行容器前需要本地存在对应的镜像,如果本地不存,Docker会从镜像仓库下载 6.1Docker获取镜像 6.1.1查找镜像 我们可 ...

  8. Docker Review - docker 容器 常用命令

    文章目录 容器相关的命令 下载一个centos的基础镜像 新建容器并启动 docker run 操作说明 启动并进入容器 查看当前有哪些容器正在运行 docker ps 启动容器 停止容器 重启容器 ...

  9. docker 开发常用命令总结

    Docker 常用命令总结,镜像下载,到docker容器创建,常用docker命令的 增删查 1.镜像下载,从hub.docker.com中下载最新版本的postgres docker pull po ...

最新文章

  1. LB负载均衡集群 - NAT
  2. Oracle数据库 invalid character问题解决
  3. iis7.5 php伪静态,Windows Server 2008 下WordPress IIS7.5伪静态规则设置(最新)
  4. php中的递归算法,PHP递归算法(四)
  5. 内核并发控制---读写自旋锁 (来自网易)
  6. java接口参数类型为枚举_Spring MVC处理参数中的枚举类型通用实现方法
  7. HTML标签悬浮到最下方,HTML – 如何在兄弟姐妹的悬停上显示元素?
  8. 去掉windows10“更新并关机”
  9. js距离米转换为千米_泰禾中央广场+恒大未来城双盘大兴,8.4米层高“空中别墅”来袭...
  10. jquery完善的处理机制
  11. imu 里程计融合_MSCKF那些事(十一)算法改进4:融合直接观测
  12. windows11恢复ie浏览器的方法教程
  13. eclipse安装翻译插件(通用)
  14. python不是5的倍数_查找所有低于1000的数字之和,这是Python中3或5的倍数
  15. 「职称」2022年度中高级职称线下申报材料组卷要求(下)
  16. 非负数正则表达式 js jquery demo
  17. 褚时健 | 我这辈子最问心无愧的就是:没有庸庸碌碌地过完一生
  18. ANSYS FLUENT 超临界流体物性分段线性插值数据批量导入
  19. rem与px之间的换算
  20. TM1621数码管驱动

热门文章

  1. Mysql中DATE_SUB 使用方法结合查询一天内,一周内,一月内的信息实例讲解
  2. Ubuntu下Navicat 配置
  3. H3C 以太网集线器
  4. 《算法竞赛进阶指南》0.4二分
  5. js--------1.时间
  6. Choose unique values for the 'webAppRootKey' context-param in your web.xml files! 错误的解决
  7. java transient简单介绍
  8. StringIO类的用途
  9. Mysql数据导入导出
  10. 新手学html 第一节:html简介