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
和官网上对应

image-20231007213506291

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

过滤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

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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值