docker常用命令

1.docker基本命令

  • 查看版本:docker version
  • 查看详细信息:docker info
  • 获取帮助:docker --help

2.镜像命令

2.1 查看镜像

docker images

$ docker images
REPOSITORY                          TAG       IMAGE ID       CREATED         SIZE
mysql                               5.7.37    42f82e150ec2   20 months ago   448MB

说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

`docker images --help``

$ docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs

REPOSITORY[:TAG]说明:
同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:latest镜像
Options说明:

  • -a:列出本地所有镜像(含中间映像层)
  • -q:只显示镜像ID
  • --digests:显示镜像的摘要信息
  • --no-trunc:显示完整的镜像信息-
$ docker images -a
REPOSITORY                          TAG       IMAGE ID       CREATED         SIZE
mysql                               5.7.37    42f82e150ec2   20 months ago   448MB

$ docker images -q
0886915a6dee

$ docker images --digests
REPOSITORY     TAG          DIGEST              IMAGE ID       CREATED          SIZE
mysql         5.7.37    sha256:66480693e   42f82e150ec2   20 months ago     448MB

$ docker images --no-trunc
REPOSITORY     TAG        IMAGE ID          CREATED         SIZE
mysql         5.7.37  sha256:42f82e150ec  20 months ago     448MB

2.2 镜像搜索

docker search 都是从https://hub.docker.com/进行搜索,如果配置了镜像加速器,拉取时候才从镜像加速网址下拉取 docker search tomcat

image-20231007213446572.png

和官网上对应


image-20231007213506291.png

docker search --help

$ docker search --help

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output

Options说明

  • --no-trunc:显示完整的镜像描述
  • -f:过滤信息
  • --limit:查询返回的最大数量,默认25

docker search --no-trunc tomcat

image-20231007214148774.png

过滤stars > 50的
老版本:docker search -s 50 tomcat (新版本已弃用)
新版本:docker search -f stars=50 tomcat (注意不包含50)
格式写错例如:docker search -f st 30 tomcat 会报错误信息:
invalid argument "st" for "-f, --filter" flag: bad format of filter (expected name=value)

2.3 下载镜像

docker pull NAME[:TAG| 不指定tag默认latest,镜像是分层的

$ docker pull tomcat
$ docker pull redis:6.2.4

2.4 删除镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]

$ docker rmi hello-world

加上-f表示强制删除

  • 删除单个镜像:docker rmi -f 镜像ID或镜像名
  • 删除多个镜像:docker rmi -f 镜像1_ID/镜像名1[:TAG] 镜像2_ID/镜像名2[:TAG]
  • 删除所有镜像:docker rmi -f $(docker images -qa)

3.容器命令

3.1 run流程

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

image-20231007215012627.png

OPTIONS说明

  • --name="容器新名字“:为容器指定一个名称(中间=可有可无)

  • -d:后台运行容器,并返回容器ID,也即启动守护式容器

  • -i:以交互模式运行容器,通常与-t同时使用

  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用 (如果运行centos,进入伪centos终端)

  • -P:(大写)随机端口映射

  • -p:(小写)指定端口映射,有以下四种格式:

    ip:hostPort:containerPort
    ip::containerPort
    hostPort:containerPort 主要使用这种
    containerPort
    

3.2 启动交互式容器

docker run -it 镜像ID/镜像名称

上图执行命令类似:docker run -it centos /bin/base 默认添加/bin/base表示:使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令
为容器指定名称

$ docker run -it --name myCentos centos # --name和新名称之间有无=都可以

3.3 启动守护式容器

docker run -d 镜像ID/镜像名称

使用镜像centos:latest以后台模式启动一个容器

$ docker run -d centos

问题:然后docker ps -a 进行查看, 会发现容器已经退出

很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些 一直挂起的命令 (比如运行top,tail),就是会自动退出的。

这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如 service nginx start
但是这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了,所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
实现后台运行
当执行一个不停止的进程时候,如:docker run -d centos /bin/sh -c "while true;do echo hello;sleep 2;done"就不会自动退出

3.4 查看正在运行的容器

docker ps [OPTIONS]

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

列表说明

  • CONTAINER ID:容器ID
  • IMAGE:镜像
  • COMMAND:执行命令,
  • CREATED:创建日期
  • STATUS:容器状态,Up正在运行,Exited已退出
  • PORTS:端口
  • NAMES:启动容器指定的名字,没指定随机生成一个

OPTIONS说明

  • -a:列出当前所有正在运行的容器+历史上运行过的
  • -l:显示最近(上一次)创建的容器
  • -n:显示最近n个创建的容器
  • -s:显示文件大小
  • -q:静默模式,只显示容器编号
  • --no-trunc:不截断输出

3.5 退出容器

exit:容器停止退出
ctrl+P+Q:容器不停止退出

3.6 进入容器

执行以下命令需要容器正在运行
docker attach 容器id或容器名称 直接进入容器启动命令的终端,不会启动新的进程
docker exec -it 容器id或容器名称 命令bashShell 在容器中打开新的终端,并且可以启动新的进程

$ docker exec -it 5d0ecb033cac /bin/bash  # 进入容器内部
$ docker exec -it 5d0ecb033cac ls -l # 不进入容器内部,直接在外部输出信息

注意:当docker容器在 “-d”守护态运行的时候,比如通过supervisord控制两个程序非守护态运行:ssh -D tomcat那么这个时候,用户就无法直接进入到容器中去,docker attach 容器id 就会一直卡着。
因为此时容器运行的进程是ssh,而不是/bin/bash 也没有虚拟终端(-it)参数,所以是进入不到的,通过exec进去

3.7 启动、重启、停止容器

docker start 【容器id或容器名称】 --启动
docker stop 【容器id或容器名称】 --停止
docker restart 【容器id或容器名称】--重启
docker kill 【容器id或容器名称】 --强制停止
docker update 【容器id或容器名称】 --restart=always --应用开机自启

3.8 删除容器

docker rm [-f] 【容器id或容器名称】 --删除(-f 强制删除)容器
docker rm -f $(docker ps -a -q)或者docker ps -a -q | xargs docker rm --删除所有容器

3.9 查看容器日志

docker logs [OPTIONS] 容器id或容器名

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
  • -t:是加入时间戳
  • -f:跟随最新的日志打印
  • --tail(或-n) 数字:显示最后多少条

3.10 查看容器内运行的进程

docker top 容器id或容器名称

3.11 查看容器内部细节

inspect: 检查; 查看; 审视; 视察
docker inspect 容器id或容器名称

3.12 容器和主机间拷贝文件

docker cp 容器ID或名称:容器内路径 目的主机路径 从容器拷贝文件到主机
docker cp 主机路径 容器ID或名称:容器内路径 从主机拷贝文件到容器

docker cp xxxx:/usr/local/a.txt /root

3.13 容器启动端口映射

-it前端启动打印tomcat启动的信息,-d 后端启动不打印tomcat启动的信息

  • -p 主机端口:docker容器端口

    $ docker run -it -p 8090:8080 tomcat #本机8090映射tomcat8080端口
    
  • -P 随机分配端口

3.14 挂载数据卷

docker run -it/-d -v 宿主机目录:/容器内目录[:ro] 镜像名或镜像ID

-v (volume:[ˈvɑːljuːm] 体积; 容积; 容量; 量; 额; 音量; 响度)有创建文件功能,没有文件就创建文件

ro 只读,read-only,容器只能进行读操作,主机可以进行读写操作,数据共享
rw读写,默认

# 单个目录挂载
docker run -it -v /myDataVolume:/containerDataVolume centos
# 多个目录挂载
docker run -it -v /myDataVolume1:/containerDataVolume1  -v /myDataVolume2:/containerDataVolume2 centos

完整启动命令

# nginx启动
$ docker run \
-d --restart=always -p 81:80 \
-v /data/html:/usr/share/nginx/html:ro  \
-v /data/conf/nginx.conf:/etc/nginx/nginx.conf \
--name=mynginx \
nginx 

# --restart=always: 开机自启
# 修改页面只能去 主机的 /data/html,容器内ro(只读)

# redis启动
$ docker run \
-v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d --name myredis \
-p 6379:6379 \
redis:latest  redis-server /etc/redis/redis.conf

4.提交发布

4.1 容器提交成新的映像

docker commit -m="提交的描述信息" -a="作者" 容器id或名称 要创建的目标镜像名:[标签名](等号可有可无)

$ docker commit -a zy -m "del docs from tomcat" dazzling_darwin tomcat1.0

4.2 镜像传输

离线安装

# 将镜像保存成压缩包,-o output 输出文件目录
$ docker save -o abc.tar guignginx:v1.0

# 别的机器加载这个镜像
$ docker load -i abc.tar

4.3 推送远程仓库

$ docker tag local-image:tagname new-repo:tagname
$ docker push new-repo:tagname

4.3.1 发布到阿里云

阿里云开放平台:https://promotion.aliyun.com/ntms/act/kubernetes.html
在阿里云创建仓库镜像

  • 创建命名空间
  • 创建仓库名称

将镜像推送到阿里云

# 1. 登录阿里云Docker Registry
$ sudo docker login --username=xxx registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/custom_docker_test/custom_docker:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/custom_docker_test/custom_docker:[镜像版本号]

# 请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数
image-20231007221240999.png

4.3.2 发布到docker hub

# 把旧镜像的名字,改成仓库要求的新版名字
docker tag nginx:v1.0 xxxx/nginx:v1.0

# 登录到docker hub
docker login       

docker logout(推送完成镜像后退出)
# 推送
docker push xxxx/nginx:v1.0

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

推荐阅读更多精彩内容