草庐IT

02-Docker相关命令

OnlyOnYourself-lzw 2023-03-28 原文

二、Docker相关命令

2.1、Docker 服务相关命令

systemctl命令是系统服务管理器指令

2.1.1、启动docker服务

  • 命令
    • systemctl start docker

2.1.2、停止docker服务

  • 命令
    • systemctl stop docker

2.1.3、重启docker服务

  • 命令
    • systemctl restart docker

2.1.4、查看docker服务状态

  • 命令
    • systemctl status docker

2.1.5、设置开机启动docker服务

  • 命令
    • systemctl enable docker
  • 同样的,也可以设置开机不启动docker服务
    • systemctl disable docker

2.1.6、查看docker概要信息

  • 命令
    • docker info

2.1.7、查看docker帮助文档

  • 命令
    • docker --help

2.2、Docker 镜像相关命令

2.2.0、镜像介绍

  • Docker镜像是由文件系统叠加而成(是一种文件的存储形式),是docker中的核心概念,可以认为镜像就是对某些软件运行的环境以及软件安装包。tomcat镜像文件=tomcat的运行环境+tomcat的软件安装包
  • 用户可以从docker仓库中下载基础镜像到本地,比如开发人员可以从docker仓库下载一个只包含centos7系统的基础镜像,把基础镜像运行成为一个容器(容器相当于操作系统),然后在这个容器中安装jdk、mysql、Tomcat、部署war包,最后将容器打成一个新的镜像
  • 开发人员将这个新的镜像提交给测试人员进行测试,测试人员只需要在测试环境下运行这个镜像成一个容器就可以了,这样就可以保证开发环境和测试环境完全一致

2.2.1、查看镜像

  • 命令

    • docker images

    • PS:这些镜像是我提前拉取的;新安装的docker应该是一个空列表,只有表头

  • 参数说明

    • REPOSITORY: 镜像名称
    • TAG: 镜像标签 ,镜像版本号 (默认是可以省略的,也就是latest)
    • IMAGE ID: 镜像ID
    • CREATED: 镜像的创建日期(不是获取该镜像的日期)
    • SIZE: 镜像大小
  • 注意事项

    • tag版本号如果是latest为最新版,安装的时候不需要带版本号,如果不是latest这种的版本,安装的时候必须带上版本号

2.2.2、搜索镜像

  • 如果需要从网络中查找需要的镜像,可以通过如下命令搜索
    • docker search 镜像名称
    • NAME: 镜像名称
    • DESCRIPTION: 镜像描述
    • STARS: 用户评价,反应一个镜像的受欢迎程度
    • OFFICIAL: 是否官方
    • AUTOMATED: 自动构建,表示该镜像由Docker Hub自动构建流程创建的
  • 当然也可以去官网直接搜索,然后按照它的命令直接复制拉取

2.2.3、拉取镜像

  • 拉取镜像就是从Docker仓库下载镜像到本地,镜像名称格式为名称:版本号,如果版本号不指定则是最新的版本,命令如下
    • docker pull 镜像名称[:版本号]
  • 这里以拉取centos7为例
    • docker pull centos:7
  • 拉取centos最新版本
    • docker pull centos:latest
  • 这里就不演示了,按照命令拉取即可

2.2.4、删除镜像

  • 按照镜像id删除镜像,或者镜像名称:版本号

    • docker rmi 镜像ID | 镜像的名称:版本号
  • 删除所有镜像(谨慎操作)

    • docker rmi `docker images -q`
      
  • 这里也不演示了

2.3、Docker 容器相关命令

2.3.1、查看容器

  • 查看正在运行的容器
    • docker ps
  • 查看所有容器
    • docker ps -a
  • 查看最后一次运行的容器
    • docker ps -l
  • 因为现在还没创建容器,所有这里不会有显示

2.3.2、创建与运行容器

  • 基于已有的镜像来创建容器,创建与运行使用如下命令

    • docker run
  • 参数说明

    • 参数 意义
      -i 表示运行容器
      -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端/bin/bash
      --name 为创建的容器命名(名称必须唯一)
      -v 表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上
      -d 在run后面加上-d参数, 则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,并指定终端,创建后就会自动进去容器)
      -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

创建交互式容器

  • 交互式方式创建并运行容器,启动完成后,会直接进入当前容器。使用exit命令退出容器。以此种方式创建并启动容器,如果退出容器,则容器会变成停止状态
    • ①、先拉取一个镜像;这一步不是每次启动容器都要做的,如果没有该镜像再拉取
      • docker pull centos:7
    • ②、创建并启动名称为 mycentos 的交互式容器
      • docker run -it --name=mycentos centos:7 /bin/bash
      • -it:创建容器并进入容器指定命令行
      • --name:指定容器名称(唯一)
      • centos:7:指定镜像文件(可以是镜像名称或者镜像ID)
      • /bin/bash:进入容器命令行的指令

创建式守护式容器

  • 对于一个需要长期运行的容器来说,退出之后也不会关闭容器,我们可以创建一个守护式容器,命令如下(容器名称不能重复),创建守护容器并不会马上进入到容器里面
    • ①、创建并启动守护式容器
      • docker run -di --name=mycentos2 centos:7
    • ②、进入容器(exit退出的时候,容器不会停止
      • docker exex -it mycentos2 /bin/bash
  • PS:守护式容器是一直运行的,退出只是退出终端,它还是在后台运行

2.3.3、停止或启动容器

  • 停止正在运行的容器
    • docker stop 容器名称 | 容器ID
  • 启动已运行过的容器
    • docker start 容器名称 | 容器ID

2.3.4、重启容器

  • 重启正在运行的容器
    • docker restart 容器名称 | 容器ID

2.3.5、查看容器信息(包括ip)

  • 查看容器信息的原因
  • 我们可以通过以下命令查看容器运行的各种数据
    • 在Linux宿主机下查看 mycentos2 的ip
    • docker inspect 容器名称 | 容器ID
    • docker inspect mycentos2

容器之间在一个局域网内,linux宿主机器可以与容器进行通信;但是外部的服务器是不能与容器直接通信的,如果需要则需要通过宿主机器端口的代理

2.3.6、删除容器

删除一个容器的前提是容器必须是关闭状态

  • 删除指定的容器

    • docker rm 容器名称 | 容器ID
    • docker rm mycentos2
  • 删除所有容器

    • docker rm `docker ps -a -q`
      

2.4、Docker 容器文件拷贝

2.4.1、向内拷贝

  • 将Linux宿主机中的文件拷贝到容器内可以使用命令

    • docker cp 需要拷贝的文件或目录 容器名称:容器目录

    • 具体操作如下所示

    • # 1、创建一个文件cpTest.txt
      touch cpTest.txt
      
      # 2、复制该该文件到 mycentos 容器的 / 目录下
      # 格式:docker cp 源文件  容器名称:路径
      docker cp cpTest.txt mycentos2:/
      
      # 3、进入 mycentos 容器
      docker exec -it mycentos /bin/bash
      
      # 4、查看容器 ~ 目录下的文件是否存在cpTest.txt
      ls -l
      

2.4.2、向外拷贝

  • 将文件从容器内拷贝出来到Linu宿主机可以使用如下命令

    • # docker cp 容器名称:容器目录 需要拷贝的文件或目录
      
      # 1、进入容器后创建文件cpTest2.txt
      
      # 2、退出容器
      
      # 3、在Linux宿主机执行复制,将容器 mycentos 的/cpTest2.txt文件复制到宿主机的/root目录下
      
      # 格式:docker cp 容器名称:文件路径  linux系统的路径
      docker cp mycentos:/cpTest2.txt /root
      

PS:停止状态的容器也是可以进行文件拷贝的,向内向外都可以

2.5、Docker 容器目录挂载

  • 可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器

  • 创建容器时添加-v参数,后边为宿主机目录:容器目录,例如

    • docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7
    • PS:如果要进行目录挂载必须要在创建容器的时候完成目录挂载,已经存在的容器不能挂载
  • 执行如下命令

    • # 创建linux宿主机器要挂载的目录 (不创建也可以,虚拟机会自动创建)
      mkdir /root/test 
      
      # 创建并启动容器mycentos2
      # 并挂载 linux中的/roor/test目录到容器的/usr/local/test
      # 也就是在 linux中的/root/test中操作相当于对容器相应目录操作 
      docker run -di -v /root/test:/usr/local/test --name=mycentos2 centos:7
      
      # 在linux宿主机下创建文件 
      touch /root/test.java
      
      # 进入容器 
      docker exec -it mycentos2 /bin/bash
      
      ls /usr/local/test
      
      

PS:: 如果你共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

有关02-Docker相关命令的更多相关文章

  1. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  2. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  3. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  4. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  5. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  6. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  7. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

  8. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  9. ruby - 在 Ruby 的 if 语句中检查 bash 命令 - 2

    如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最

  10. ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序 - 2

    我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我

随机推荐