Docker 常用命令大全
目录
一、Docker
(一)Docker基础命令
(二)docker镜像命令
(三)docker容器命令
(四)docker运维命令
一、Docker
容器是一种虚拟化技术,容器是镜像实例化对象,就像Java编译后Class构造出的一个个实例对象,本文除了生硬命令大全,还会穿插一些个人对docker的理解。
什么是 Docker? - 知乎
(一)Docker基础命令
1.docker程序操作
(1)启动docker
systemctl start docker
(2)停止docker
systemctl stop docker
(3)重启docker
systemctl restart docker
(4)随服务启动而自启
systemctl enable docker
(5)查看运行状态
systemctl status docker
(6)查看docker版本号信息
docker info
docker version
2.docker帮助命令
使用场景:忘记docker命令参数有哪些
docker --help
docker pull --help
docker push --help
(二)docker镜像命令
1.查看镜像
使用场景:查看当前服务器中docker 镜像列表
docker images
2.搜索镜像
使用场景:查找可安装的镜像和版本
docker search 镜像名docker search chrome
镜像名、描述、关注star数量、是否官方
搜索+筛选条件
例如:筛选stars数量在大于50的镜像
docker search --filter=STARS=50 chrome
3.拉取镜像
使用场景:从docker hub或公司内部镜像hub,下载镜像到本地
docker pull 镜像名称:tag
备注:没有tag默认拉取最新,等同于 docker pull mysql:latest
4.运行镜像
使用场景:拉取一个mysql镜像,运行镜像容器
docker pull mysqldocker run -it -d --name testmysql -p 8081:8080 mysql:latest
参数说明
参数 | 说明 |
-it | 与容器进行交互式启动 |
-d | 可后台运行容器 |
--name | 给运行的容器自定义命名 |
-p | 端口映射 -p 宿主机端口:容器内端口 |
--restart=always | 自启动容器 |
5.容器操作
(1)停止容器
docker stop 容器ID 或 容器名称
(2)启动容器
docker start 容器ID 或 容器名称
(3)重启容器
docker restart 容器ID 或 容器名称
(4)删除容器
docker rm -f 容器ID 或 容器名称
删除容器前,需要先停止容器,运行中的容器无法删除。
6.删除镜像
docker rmi -f 镜像ID/镜像名称
删除多个镜像
docker rmi -f 镜像ID/镜像名称 镜像ID/镜像名称 镜像ID/镜像名称
强制删除镜像
docker image rm 镜像ID/镜像名称
7.保存镜像
使用场景:想将本地镜像保存为tar压缩文件,方便用于镜像转移至其他机子上,并 加载这个保存的镜像。
docker save 镜像ID/镜像名称 -o 镜像保存位置路径
例如:保存mysql镜像到当前路径位置,文件名为:mysql-20230314.tar
docker save mysql -o ./mysql-20230314.tar
8.加载镜像
使用场景:保存的镜像文件,进行加载恢复(解压tar文件)
docker load -i ./mysql-20230314.tar
我们把解压的镜像 run下
docker run mysql-20230314
9.镜像标签 tag
使用场景:有时候,我们需要对一个已有的镜像进行分类或者版本迭代,相对已有的镜像进行打标签标注版本。
docker tag 源镜像名:原tag 新镜像名:新tag
例如:将mysql最新版,打tag为测试环境1.0.0
docker tag mysql:latest mysql:test-1.0.0
(三)docker容器命令
1.查看正在运行的容器
使用场景:
docker ps
2.查看所有容器(含已停止的容器)
docker ps -a
3.运行一个容器
docker run -it -d --name 容器名称 -p 宿主机端口号:容器端口号 镜像名:tag /bin/bash
例如: 拉取mysql镜像,并启动一个mysql 把它取别名为mysql-test 并交互式运行
docker pull mysql:7.5.0docker run -it -d --name mysql-test -p 8081:8080 mysql:7.5.0 /bin/bash
备注:宿主机 端口有时候可能被占用,需要查看端口占用 情况。
linux
netstat -untlp
mac
lsof -i tcp:8080
杀进程
kill -9 进程号
每个容器都是独立安全应用,并相互隔离,容器与宿主机端口建立绑定关系(容器端口映射),那么访问宿主机的该端口,就可以访问到对应容器。
4.端口映射
使用场景:拉取镜像,运行容器,设置容器端口和宿主机端口映射关系。
例如:
启动mysql镜像,容器命名为mysql-test 映射宿主机端口8081和容器端口8080,当 我们访问8081相当于访问到容器mysql-test
docker run -it -d --name mysql-test -p 8081:8080 mysql:latest /bin/bash
容器端口如果被其他容器占用,如何修改?
方式一:进入容器内,修改配置文件
docker exec -it 容器ID/容器名词词 /bin/bash
方式二:进入容器内
docker attach 容器ID/容器名称 /bin/bash
进入容器内部后退出容器内部
exit
(1)启动容器
docker start 容器ID/容器名称
(2)停止容器
docker stop 容器ID/容器名称
(3)重启容器
docker restart 容器ID/容器名称
(4)杀掉容器
docker kill 容器ID/容器名称
5.容器文件拷贝
使用场景:
容器内部拷出文件
docker cp 容器ID:容器内部路径 容器外部路径
容器外部拷入文件
docker cp 容器外部路径 容器ID:容器内部路径
6.查看容器日志
使用场景:
docker logs -f --tail=日志数量 容器ID/容器名称
docker logs -f --tail=10 ef4ccceb9b6b
docker logs --tail=10 ef4ccceb9b6b
7.容器数据挂载
使用场景:以防容器销毁删除,造成数据丢失,将容器内数据挂载到宿主机对应位置
-v 宿主机文件存放位置:容器内文件位置
如此操作,就将容器内指定文件 挂载 宿主机对应位置,-v可多次使用,即一个容器可同时挂载多个文件到宿主机上。
12.更换容器名称
使用场景:容器已启动,不想删除重启容器情况下进行容器重命名。
docker rename 容器ID 新容器名称
13.修改容器配置
使用场景:不想删除容器,又想让容器配置变更。
例如:
修改参数,设置开机启动。
docker update --restart=always 容器ID或容器名称
docker container update --restart=always 容器ID或容器名称
14.提交一个镜像
使用场景:在已有镜像基础上,做了一些修改,希望保存封装成一个新的镜像。
docker commit -m=”提交信息“ -a=”作者信息“ 容器ID/容器名称 提交后的新镜像名称:tag
15.dockerfile
(1)环境变量
在dockerfile中定义系统环境变量名和值,在项目代码中通过获取环境变量函数,来接收参数变量(获取系统环境变量名的值)
FROM python:3.7.4
MAINTAINER jack
ENV webhook_url=https://oapi.dingtalk.com/robot/send?access_token=xxx
ENV secret_token=xxx
ENV check_interval=60
ENV db_username=root
ENV db_password=abc123456
ENV db_host=127.0.0.1
ENV db_port=3306
ENV db_name=tonghuashun
COPY . /tonghuashun
workdir /tonghuashun
run pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
cmd ["python","main.py"]
run和cmd区别:
触发时机不同
RUN 在构建镜像时 即docker build
CMD 在运行容器时(打完镜像后运行容器时)即docker run
- 在Python项目代码中获取环境变量
import os
EN_DB_USERNAME=os.getenv("db_username")
EN_DB_PASSWORD=os.getenv("db_password")
EN_DB_HOST=os.getenv("db_host")
EN_DB_PORT=os.getenv("db_port")
EN_DB_NAME=os.getenv("db_name")
- 在NodeJS项目代码中,获取环境变量
process.env.NODE_ENV //获取对应环境变量的值
- 在Golang项目代码中,获取环境变量
package main
import ( "fmt" "os")
func main() { name := os.Getenv("NAME") fmt.Println("name is:", name)}
(2)docker run时传入环境变量参数
docker run -p 9000:9000 -e environment=dev -e cluster=0 -d me/app
(3)其他
FROM nginx:1.20.0
COPY nginx.conf /etc/nginx/nginx.conf
COPY dist/ /usr/share/nginx/html/
COPY replace.sh /
RUN chmod 777 /replace.sh
CMD ["/replace.sh"]
COPY 当前dockerfile目录 的文件名 nginx.conf、文件夹dist、文件replace.sh 复制到容器指定目录中。
RUN 在docker build时运行 (打镜像时)
CMD 在docker run时运行(运行容器时)
16.docker-compose
docker-compose.yml 文件分为三个主要部分:services、networks、volumes
- services:主要用来定义各个容器
- networks:定义需要使用到的network
- volumes:定义services使用到的volume 本地数据卷
参数说明
参数 | 说明 |
version | 版本 |
build | 使用当前目录下的Dockerfile进行构 |
image | 指定运行容器使用的镜像 |
container_name | 默认运行出来的容器名称 |
command | 覆盖容器启动后默认执行的命令Dockerfile定义的CMD 注意:当Dockerfile定义了entrypoint的时候,docker-comose.yml定义的command会被覆盖 |
enrtypoint | 执行命令行,可以覆盖Dockerfile中定义的entrypoint命令 |
links | 链接到其它服务中的容器。 使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS) 格式都可以 例如: version: '3' services: order-service links: - user-service - pay-service - redis |
external_links | 链接到 docker-compose.yml 外部的容器,参数格式跟 links 类似。 |
prot | 暴露容器端口信息 |
expose | 指定内部端口,但不映射到宿主机,只被连接的服务访问。 |
enviroment | 定义的变量会覆盖.env文件中定义的重名环境变量。 |
ports | 将容器的端口80映射到宿主机的端口8080 |
volumes | 设置容器的数据卷路径 |
networks | 容器使用的网络设置。 |
depends_on |
基于云镜像
基于本地dockerfile
version: '3'
services:web:build:context: ./dockerfile: mydockerfile
完整示例:
version: '3.8'
networks:test_network:external: true
services:myapidemo:image: 1312958948/myapidemo:1.1container_name: myapidemobuild: .restart: alwaysports:- "9020:5000"volumes:- /root/apilogs/logs:/app/logsnetworks:- test_networknginxapi:image: nginxcontainer_name: nginxapirestart: alwaysports:- "80:80"- "443:443"volumes:- /root/nginx/www:/usr/share/nginx/html - /root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf - /root/nginx/logs:/var/log/nginx - /root/nginx/certs:/etc/nginx/certs networks:- test_networkmysql:image: mysql:8.0container_name: mysqlrestart: alwaysports:- "3306:3306" volumes: - /var/lib/docker/volumes/mysqldata/_data:/var/lib/mysql39environment:MYSQL_ROOT_PASSWORD: Aa123456 MYSQL_DATABASE: MyTestTZ: Asia/Shanghainetworks:- test_network redistest:image: rediscontainer_name: redistestrestart: alwaysports:- "6379:6379"command: redis-server --requirepass 123456 networks:- test_network
(四)docker运维命令
1.查看docker工作目录
sudo docker info | grep ”Docker Root Dir“
2.查看docker磁盘占用总体情况
du -hs /var/lib/docker
3.查查看docker磁盘使用具体情况
docker system df
4.删除无用容器和镜像
(1)删除异常停止的容器
docker rm `docker ps -a | grep. Exited | awk '{print $1}'`
5.查找大文件
find / -type f -size +100M -print0 | xargs -0 du -h |sort -nr
6.查找指定docker使用目录下大于指定大小文件
例如:
这边查查查找到事‘/var/lib/docker/overlay2/*’开头且文件大小大于100MB的文件
find / -type f -size +100M -print0 | xargs -0 du -h |sort -nr | grep ‘/var/lib/docker/overlay2/*’
相关文章:
Docker 常用命令大全
目录 一、Docker (一)Docker基础命令 (二)docker镜像命令 (三)docker容器命令 (四)docker运维命令 一、Docker 容器是一种虚拟化技术,容器是镜像实例…...
React项目规范:目录结构、根目录别名、CSS重置、路由、redux、二次封装axios
React项目(一)一、创建项目二、目录结构三、craco配置别名并安装less1.craco安装2.配置别名3.安装less四、CSS样式重置五、配置路由六、配置Redux1.创建大仓库2.创建小仓库(1)方式1:RTK(2)方式2…...
SystemVerilog 教程第一章:简介
SystemVerilog 教程像 Verilog 和 VHDL 之类的硬件描述语言 (HDL) 主要用于描述硬件行为,以便将其转换为由组合门电路和时序元件组成的数字块。为了验证 HDL 中的硬件描述正确无误,就需要具有更多功能特性的面向对象的编程语言 (OOP) 来支持复杂的测试过…...
【Java|基础篇】逻辑控制-顺序结构、分支结构和循环结构
文章目录顺序结构分支结构if单分支语句if else双分支语句if else if else多分支语句switch语句循环语句for循环while循环do while循环continuebreak总结顺序结构 顺序结构是指代码按照从上往下的顺序依次执行 分支结构 选择语句是条件成立时,才会执行的语句.共有三种.分为是if…...
【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)
项目地址:Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步:数据抽取 第二步:探索分析 第三步:数据的预处…...
Kmeans聚类算法-python
import random import pandas as pd import numpy as np import matplotlib.pyplot as plt # 计算欧拉距离 def calcDis(dataSet, centroids, k): clalist[] for data in dataSet: diff np.tile(data, (k, 1)) - centroids #相减 (np.tile(a,(2,1))就是把…...
Linux|奇怪的知识|locate命令---文件管理小工具
前言: Linux的命令是非常多的,有一些冷门的命令,虽然很少用,但可能会有意想不到的功能,例如,本文将要介绍的locate命令。 (平常很少会想到使用此命令,find命令使用的更多,偶然想起…...
Cadence Allegro 导出Function Pin Report报告详解
⏪《上一篇》 🏡《上级目录》 ⏩《下一篇》 目录 1,概述2,Function Pin Reportt作用3,Function Pin Report示例4,Function Pin Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频 1,概述...
蓝桥杯2018年第九题-缩位求和
题目:在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。比如:248 * 15 3720把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得2 4 8 14 > 1 4 5;1 5 65…...
基于Yolv5s的口罩检测
1.Yolov5算法原理和网络结构 YOLOv5按照网络深度和网络宽度的大小,可以分为YO-LOv5s、YOLOv5m、YOLOv5l、YOLOv5x。本文使用YOLOv5s,它的网络结构最为小巧,同时图像推理速度最快达0.007s。YO-LOv5的网络结构主要由四部分组成,分别…...
Linux基本命令
Linux基本命令Linux的目录结构Linux命令入门目录切换相关命令(cd/pwd)相对路径、绝对路径和特殊路径符创建目录命令(mkdir)文件操作命令part1 (touch、cat、more)文件操作命令part2 (cp、mv、rm)查找命令 (which、find…...
云原生场景下的安全左移
本博客地址:https://security.blog.csdn.net/article/details/129430859 一、安全左移概述 安全左移需要考虑开发安全、软件供应链安全、镜像仓库、配置核查这四个部分。 首先是开发安全,安全团队需要关注代码漏洞,比如使用代码检查工具进…...
mysql面试经典问题
文章目录 1. 能说下myisam 和 innodb的区别吗?2. 说下mysql的索引有哪些吧,聚簇和非聚簇索引又是什么?3. 那你知道什么是覆盖索引和回表吗?4. 锁的类型有哪些呢5. 你能说下事务的基本特性和隔离级别吗?6. 那ACID靠什么保证的呢?7. 那你说说什么是幻读,什么是MVCC?幻读什…...
微信小程序|基于小程序+C#制作一个考试答题小程序
基于小程序+C#制作一个考试答题小程序打破传统线下考试答题的边界线问题,使考试不用再局限与某个统一的场所,只要有设备,哪里都能考试。 一、小程序...
【1605. 给定行和列的和求可行矩阵】
来源:力扣(LeetCode) 描述: 给你两个非负整数数组 rowSum 和 colSum ,其中 rowSum[i] 是二维矩阵中第 i 行元素的和, colSum[j] 是第 j 列元素的和。换言之你不知道矩阵里的每个元素,但是你知…...
Linux命令之nano命令
一、nano命令简介 nano是一个小型、免费、友好的编辑器,旨在取代非免费Pine包中的默认编辑器Pico。nano不仅复制了Pico的外观,还实现了Pico中一些缺失(或默认禁用)的功能,例如“搜索和替换”和“转到行号和列号”。nan…...
IT项目管理(作业1)
一.单选题(共12题,100.0分) 1.以下哪项是项目的一个实例?( ) A、改进现有的业务流程或程序B、为公司运营提供信息技术支持C、批量生产一种新近开发出来的家用电冰箱D、管理一个公司 我的答案:A 2.下列哪项不能成为项目结束的理由?( ) A…...
蓝桥杯嵌入式(G4系列):串口收发
前言: 在整个蓝桥杯考试中涉及串口的次数还是较多,这里写下这篇博客,记录一下自己的学习过程。 STM32Cubemx配置: 首先,我们点击左侧的Connectivity选择USART1进行如下配置。 使能串口中断 在左侧的管脚配置上也要做出…...
「兔了个兔」玉兔踏青,纯CSS实现瑞兔日历(附源码)
💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…...
第17章 关于局部波动率的一些总结
这学期会时不时更新一下伊曼纽尔德曼(Emanuel Derman) 教授与迈克尔B.米勒(Michael B. Miller)的《The Volatility Smile》这本书,本意是协助导师课程需要,发在这里有意的朋友们可以学习一下,思…...
反转链表合并两个有序链表链表分割链表的回文结构相交链表
反转链表来源:杭哥206. 反转链表 - 力扣(LeetCode)typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListNode* head) {if (headNULL){return NULL;}ListNode* prevhead;ListNode* curhead->next;ListNode* furNUL…...
联想触摸板只能单击,二指三指失效
问题背景 这问题是我笔记本两三年前重装win10系统后出现的,当时有鼠标懒得弄。今天发现没鼠标后,触摸板连二指滑动都没有太麻烦了,所以决定弄一下。 联想笔记本,win10系统重装后出现的问题。 1.鲁大师,联想电脑管家 …...
mysql 删除表卡死,或是截断(truncate)卡死解决办法
利用工具进行truncate表的时候,一直运行,运行了十几分钟也没有成功。中止之后再运行也是一样。但是删除表的数据以及查询表数据都是可以的。猜测是锁死了。 使用 show processlist; 发现Waiting for table metadata lock 问题; mysql> s…...
ORACLE P6 EPPM 架构及套件介绍(源自Oracle Help)
引言 借助官方帮助的内容, 我水一篇文章,翻译了下文 P6EPPM架构 P6各套件 P6:大多数用户几乎完全依赖在标准网络浏览器中运行的 P6 网络应用程序。简称为 P6,它是管理项目的主要界面。P6 移动版:允许团队成员提供任…...
Android开发面试:数据结构与算法知识答案精解
目录 数据结构与算法 线性表 数组 链表 栈 队列 树 二叉树 红黑树 哈夫曼树 排序算法 冒泡排序 选择排序 插入排序 希尔排序 堆排序 快速排序 归并排序 查找算法 线性查找 二分查找 插值查找 斐波拉契查找 树表查找 分块查找 哈希查找 动态规划算法…...
京东前端手写面试题集锦
实现call方法 call做了什么: 将函数设为对象的属性执行和删除这个函数指定this到函数并传入给定参数执行函数如果不传入参数,默认指向为 window // 模拟 call bar.mycall(null); //实现一个call方法: // 原理:利用 context.xxx self obj.…...
【JDK动态代理】及【CGLib动态代理】:Java的两种动态代理方式
Java的两种动态代理方式动态代理是什么?JDK动态代理CGLib动态代理CGLib 底层原理CGLib 实现步骤两者区别Spring AOP原理--动态代理动态代理是什么? 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的…...
《程序员面试金典(第6版)》面试题 04.05. 合法二叉搜索树
题目描述 实现一个函数,检查一棵二叉树是否为二叉搜索树。 示例 1: 输入: 2/ \1 3输出: true 示例 2: 输入: 5/ \1 4/ \3 6输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。 解题思路与代码 使用…...
Nginx 反向代理技术梳理
Nginx 反向代理技术梳理 使用反向代理脑图 域名 A 可以解析找到 CDN 缓存 用户点击 APP 即通过 URL 发送 HTTPS 请求域名会进入阿里云的 DNS 服务器,解析域名会做第一级负载均衡通过 CDN 解析出域名,通过阿里云配置转发到 CDN 缓存服务器 CDN 有数据则直…...
华为OD机试 - 整数编码(Java) | 机试题+算法思路+考点+代码解析 【2023】
整数编码 题目 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 1、编码时7位一组,每个字节的低7位用于存储待编码数字的补码。 2、字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节,置0表示当前字节为最后一个字…...
怎么自己做网站凑钱/关于seo如何优化
自动化部署流程1.获取代码(直接拉取)2.编译(可选)3.配置文件4.打包5.SCP到目标服务器6.将目标服务器移除集群7.解压8.放置到webroot9.SCP差异文件10.重启(可选)11.测试12.加入集群上线回滚流程#正常回滚1.列出回滚版本2.目标服务移除集群3.执行回滚4.重启和测试5.加入集群#紧急…...
网站营销队伍/培训机构在哪个平台找
前言 现在Java程序员面试都是因为没有丰富的工作经验和自己过硬的技术,所有都不知道一般互联网应该会问什么技术问题,加上自己可能去面试的时候没有准备的太充分,一面试刚跟面试官扯几个面试题就不知道自己在哪里了,被怼的体无完…...
企业的网站开发费用如何入账/网络营销策划的流程
interactivePopGestureRecognizer是iOS7推出的解决VeiwController滑动后退的新功能,虽然很实用,但是坑也很多啊,用过的同学肯定知道问题在哪里,所以具体问题我就不描述了,这里只给出如何完美解决interactivePopGestureRecognizer卡住的问题. 当然我们要自定义UINavigationContr…...
网站如何做se/今日十大头条新闻
类加载所有类加载器,都是ClassLoader的子类。类加载器永远以.class运行的目录为准。读取classpath根目录下的文件有以下几种方式:1 在Java项目中可以通过以下方式获取classspath下的文件:public void abc(){//每一种读取方法,使用某个类获取A…...
怎么样自己做企业网站/2020国内十大小说网站排名
Item M15:了解异常处理的系统开销 转载请注明出处<http://blog.csdn.net/qianqin_2014/article/details/51329961>为了在运行时处理异常,程序要记录大量的信息:无论执行到什么地方,程序都必须能够识别出如果在此处抛出异常的话…...
哪种语言的网站 做seo更好/百度百科入口
指针的偏移值是多少取决于指针的类型: int a 10; char c A;int *p; char *p2;p &a; p2 &c;//p (自身运算)之后再加1 printf("a的地址的打印:%p\n",p); //p (自身加1运算)之后再下一步 …...