docker 常用命令

0 背景

在开发过程中,经常涉及到 docker 的相关操作,本文对常用的指令进行汇总

1 镜像相关

1.1 查看镜像列表

sudo docker images

1.2 镜像搜索

比如搜索 ubuntu 基础镜像

sudo docker search ubuntu

可输出官方的镜像名称,以及 star 数量,选择一个需要的镜像下拉即可


image.png

1.3 下拉镜像

sudo docker pull 镜像名
sudo docker pull 镜像名:Tag

1.4 删除镜像

sudo docker rmi -f 镜像名/镜像ID

1.5 保存镜像

将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像

docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字

1.6 加载镜像

任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像

docker load -i 镜像保存文件位置

12 容器相关

2.1 容器列表

sudo docker ps
sudo docker ps -a # 查看所有容器 -----包含正在运行 和已停止的

2.2 创建容器

docker run -it -d --name 要取的别名 -p 宿主机端口:容器端口 -v 宿主机文件存储位置:容器内文件位置 镜像名:Tag /bin/bash 

参数含义:

-it 表示 与容器进行交互式启动
-d 表示可后台运行容器 (守护式运行)  
--name 给要运行的容器 起的名字  
/bin/bash  交互路径
-p 将容器的端口映射到宿主机上,通过宿主机访问内部端口
-v 将容器内的指定文件夹挂载到宿主机对应位置

2.3 运行一个容器

# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行)  --name 给要运行的容器 起的名字  /bin/bash  交互路径
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash 

例如我们要启动一个redis 把它的别名取为redis001 并交互式运行 需要的命令 —我这里指定版本号为5.0.5

1. 拉取redis 镜像

docker pull redis:5.0.5

2.命令启动

docker run -it -d --name redis001 redis:5.0.5 /bin/bash

3.容器端口与服务器端口映射

命令:

-p 宿主机端口:容器端口
1
还是使用前方的 redis 镜像 尝试 将6379端口 映射到服务器的8888 如果成功了的话 那么咱们访问服务器的8888端口就会访问到咱们的 docker 中 的容器 redis002

-p 8888:6379 解析 将容器内部的 6379端口与docker 宿主机(docker装在哪台服务器 哪台服务器就是宿主机)8888 端口进行映射 那通过外部访问宿主机8888端口 即可访问到 docker 容器 6379 端口了

docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash

netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息

netstat -untlp
image.png

netstat -untlp

2.3 停止容器

sudo docker stop 容器名/容器ID

2.4 删除容器

删除一个容器

docker rm -f 容器名/容器ID

删除多个容器 空格隔开要删除的容器名或容器ID

docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID

删除全部容器

docker rm -f $(docker ps -aq)

kill

docker kill 容器ID/容器名

2.5 进入容器

进入正在运行中的容器

sudo docker attach 容器ID/容器名
docker exec -it 容器名/容器ID /bin/bash   推荐使用
#进入 前面的 redis001容器   
docker exec -it redis001 /bin/bash

2.6从容器内 退出到自己服务器中 需注意 两个退出命令的区别

直接退出  未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭  
exit
 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q

2.7容器文件拷贝 —无论容器是否开启 都可以进行拷贝

#docker cp 容器ID/名称:文件路径  要拷贝到外部的路径   |     要拷贝到外部的路径  容器ID/名称:文件路径
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径  容器外路径
#从外部 拷贝文件到容器内
docker  cp 容器外路径 容器ID/名称: 容器内路径

2.8查看容器日志

docker logs -f --tail=要查看末尾多少行 默认all 容器ID
image.png

2.9运维

我们在运维的时候,通常给一些软件喜欢设置开机自启动,例如 mysql、redis,这样测试环境服务器重启时可节省不少运维时间成本,那么我们如果是docker容器 是否也可以设置开机自启动容器呢?

启动容器时,使用docker run命令时 添加参数--restart=always 便表示,该容器随docker服务启动而自动启动
docker run -itd --name redis002 -p 8888:6379 --restart=always redis:5.0.5 /bin/bash

3.0运维数据挂载

什么是数据挂载?

简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复
具体请参考:docker 文件分层与数据卷挂载
方法一:
命令:

-v 宿主机文件存储位置:容器内文件位置
1
如此操作,就将 容器内指定文件挂载到了宿主机对应位置,-v命令可以多次使用,即一个容器可以同时挂载多个文件

-v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
1
示例:

# 运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 --name redis505 --restart=always  -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf  redis:5.0.5 --requirepass "password"

此方法完了你很无语?那还不是得删容器?是呀!没错!那么为什么你有数据恢复需求而没有想到数据持久化,数据恢复备份,数据卷挂载?自己DEMO的吃亏,是为了平时开发少扣脑壳多摸鱼!
方法二:不想删容器,又想让这个容器设置开机自启动,那么我们修改其启动配置即可!
命令:

docker  update --restart=always 容器Id 或者 容器名
或
docker container update --restart=always 容器Id 或者 容器名

如上,虽然不删容器就设置了自启动需求满足了,但是,危不危险,这个容器有没有需要数据恢复的情况?自己考量吧!!

3.1更换容器名

docker rename 容器ID/容器名 新容器名

3.2docker 运维命令

可能有时候发布会遇到如下错误:

docker: write /var/lib/docker/tmp/GetImageBlob325372670: no space left on device

这个错误是docker在写入的时候报错无机器无空间

查看docker工作目录

sudo docker info | grep "Docker Root Dir"

查看docker磁盘占用总体情况

du -hs /var/lib/docker/ 

查看Docker的磁盘使用具体情况

docker system df

查找大文件

find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr

查找指定docker使用目录下大于指定大小文件

find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr |grep '/var/lib/docker/overlay2/*'

挂载

docker run -di --name tomcat9 -v /data/tomcat/webapps:/usr/local/tomcat/webapps --privileged=true -p 8083:8083 tomcat:9

构建镜像 Dockerfile

FROM openjdk:8
ADD docker-service3-1.0-SNAPSHOT.jar /app.jar
EXPOSE 8085
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t docker-service3 .
#创建 docker-service3 镜像
. 是上下文路径,那么什么是上下文路径呢?
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容