当前位置: 首页 > news >正文

Docker学习笔记 - 常用命令

目录

  1. 基本概念
  2. 常用命令
  3. 使用docker compose启动脚本
  4. 创建自己的image

Docker命令文档

1. 下载一个image

从hub.docker.com下载一个image。

docker pull [image name]

下载时指定image的tag。

docker pull [image name]:<tag>

举例,下载postgre的tag为alpine3.19的image

docker pull postgre:alpine3.19

2. 载入一个Image

启动一个新的container并载入指定的image。

docker run -d [image name]
2.1 映射端口

启动redis镜像,把实际服务器上的port 6000绑定到docker container 的 6379 port。

docker run -p 5432:5432-d postgre
2.2 指定redis的镜像tag

下面命令指定运行tag为alpine3.19,tag可以简单的理解为类似版本号的东西。

docker run -p 5432:5432 -d postgre:alpine3.19
2.3 指定volume来达到数据的持续性

即container被停止时,里面被修改过的数据不会丢失。

docker run -p 6000:6379 -d postgre:alpine3.19 \
-v postgre_data:/var/lib/postgresql/data

指定volume的三种方式:

  • Host Volume :指定在host上的存储位置和在image里的目录的对应关系,称为主机卷
    -v [path in host]:[path in image]
  • Anonymous Volume :指定在image里需要被映射的目录,但不指定在host上的存储位置,使用docker的默认设置,称为匿名卷
    -v [path in image]
  • Name Volume:指定在image里需要被映射的目录,使用docker的默认存储位置, 但给该存储的数据命名,称为命名卷,推荐使用。
    -v [volume name]:[path in image]
2.4 使用环境变量
docker run -p 6000:6379 -d postgre:alpine3.19 \
-v postgre_data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=password
-e POSTGRES_USER=admin

使用-e来指定环境变量的值,每个环境变量都要用-e来标识。每个image的环境变量定义都不同,因此需要到hub.docker.com上查询该image的文档。

2.5 指定使用的虚拟网络名字

如下命令,将启动的image连接到虚拟网络postgre-network。

docker run -p 6000:6379 -d postgre:alpine3.19 \
-v postgre_data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=password
-e POSTGRES_USER=admin
--net postgre-network 
2.6 指定container名字
docker run -p 6000:6379 -d postgre:alpine3.19 \
-v postgre_data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=password
-e POSTGRES_USER=admin
--net postgre-network 
--name postgre_db 

3. 重启一个container

重启一个docker container.

docker start [container name]

举例,启动名为my_container的容器。

docker start my_container

4. 暂停一个container

暂停一个docker container.

docker stop [container name]

举例,停止名为my_container的容器。

docker stop my_container

5. 列出现有container

以下命令效果都一样

docker ps
docker container ls
docker container ps

默认情况下,该命令只列出目前运行中的container,要列出停止的container,可以使用以下参数。

docker ps -a

如果要显示出container的大小,可以使用以下参数。

docker ps -s

6. 在运行中的Container中执行命令行

docker exec [container name]

举例,查看在叫mycontainer的容器中,工作目录下的文件

docker exec mycontainer ls

在叫mycontainer的容器中,在/tmp目录下生产一个名为execWorks的文件。

docker exec -d mycontainer touch /tmp/execWorks

7. 实时显示Container的资源使用情况

docker stats

这个命令默认只显示当前运行中的container的资源使用情况,要查看所有container的情况,可以使用以下参数

docker stats -a

8. 移除指定Container

docker rm [container name]

在移除container之前,首先要停止container的运行。如果要移除运行中的container,请使用以下参数。

docker rm -f mycontainer.

移除container同时,也要移除相关联的volumes,使用以下参数。

docker rm -v mycontainer

要释放所有的已停止的container,可以使用以下命令:

 docker container prune

9. 查看现存的image, image的属性

docker images

执行这条命令后,系统就会列出所有现存的images,如下图。
在这里插入图片描述
由上图可见,每个image有repository, tag, image id三个属性。repository 属性在图形界面里又被称为name。
这里,要讲一下image的 image id和name/repository的区别。
image name/repository 是你在创建image是给他起的名字。不同的image是允许使用同样的image name的。比如,你可以重复生成叫做MyImage的image, 但是只有最后生成的那个才会获得latest的tag。你也可以通过给他们打上不同的tag以示区别。

image id 是你在创建image时系统自动为它生成的id,每个image id都是独一无二的,标识唯一的一个image。

9. 移除image

移除image时可以使用image id也可以使用image name。

docker image rm [image name] or [image id]
docker rmi [image name] or [image id]

举例,移除名字叫myimage的最新生成的image。

docker rmi myimage:latest

要注意的是,一个image可以被tag两个不同的name,着这种情况下,需要解除image和name和tag的绑定,才可以移除image。

举例,Image ID为5164fcc90073的image同时被tag了两个不同的名字,image1:latest和image2:latest, 当我们执行以下命令,仅解除了这个image和image1:latest.

docker rmi image1:latest

此时,这个image仅于image2:latest绑定,执行以下命令,会解绑该image和image2:latest并删除这个image。

docker rmi image2:latest

持续更新中

相关文章:

  • Leetcode_27移除元素_26删除有序数组中的重复项_80删除有序数组中的重复项 II_169多数元素
  • c++常考基础知识(2)
  • 1-Flume中agent的source
  • 记录一次流相关故障
  • Vue开发日志:自定义组件:通用开发流程
  • 鸿蒙一次开发,多端部署(十三)功能开发的一多能力介绍
  • 说说webpack中常见的Loader?解决了什么问题?
  • 锂电池寿命预测 | Matlab基于ALO-SVR蚁狮优化支持向量回归的锂离子电池剩余寿命预测
  • 腾讯春招后端一面(八股篇)
  • 路由器里如何设置端口映射?
  • Java练手游戏--俄罗斯方块
  • GEE高阶案例——Landsat/Sentinel/MODIS影像进行缨帽变换一行代码实现
  • 【小程序开发】位置 API 集合(二)
  • M4A与MP3:两种音频格式的比较
  • IP地址、子网掩码、网关
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • AngularJS指令开发(1)——参数详解
  • hadoop集群管理系统搭建规划说明
  • JS+CSS实现数字滚动
  • Js基础知识(一) - 变量
  • js面向对象
  • node.js
  • React-redux的原理以及使用
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • 解析 Webpack中import、require、按需加载的执行过程
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端性能优化--懒加载和预加载
  • 悄悄地说一个bug
  • 日剧·日综资源集合(建议收藏)
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 通信类
  • 硬币翻转问题,区间操作
  • 优化 Vue 项目编译文件大小
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 自动记录MySQL慢查询快照脚本
  • FaaS 的简单实践
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • !$boo在php中什么意思,php前戏
  • #数学建模# 线性规划问题的Matlab求解
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (二)WCF的Binding模型
  • (分布式缓存)Redis哨兵
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十一)手动添加用户和文件的特殊权限
  • (四)linux文件内容查看
  • (四)汇编语言——简单程序
  • (转)程序员疫苗:代码注入
  • **PHP二维数组遍历时同时赋值
  • .net mvc 获取url中controller和action
  • .net MVC中使用angularJs刷新页面数据列表
  • .net wcf memory gates checking failed
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例