Docker常用命令详解及速查
Docker原理图示
参考:https://cloud.tencent.com/developer/article/2393736
下载/上传镜像
Docker pull
要从Docker仓库中拉取现有的镜像,可以使用以下命令:
`docker pull [OPTIONS] NAME[:TAG|@DIGEST]`
• docker pull:拉取镜像的命令。
• [OPTIONS]:可选参数,用于配置拉取过程,如认证信息等。
• NAME[:TAG|@DIGEST]:要拉取的镜像名称、标签或摘要。
*Docker构建
要构建自己的Docker镜像,可以使用以下命令:
docker build [OPTIONS] PATH | URL | -
• docker build:构建镜像的命令。
• [OPTIONS]:可选参数,用于配置构建过程,如镜像标签、构建上下文路径等。
• PATH | URL | -:Dockerfile所在的路径、URL或者使用标准输入作为Dockerfile。
*Docker push
要将本地的镜像推送到Docker仓库,可以使用以下命令:
docker push [OPTIONS] NAME[:TAG]
• docker push:推送镜像的命令。
• [OPTIONS]:可选参数,用于配置推送过程,如认证信息等。
• NAME[:TAG]:要推送的镜像名称和标签。
建立容器
*Docker运行和参数配置
要在Docker中运行容器,可以使用以下命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
• docker run:运行容器的命令。
• [OPTIONS]:可选参数,用于配置容器的各种选项,如端口映射、容器名称等。
• IMAGE:要运行的镜像名称或ID。
• [COMMAND] [ARG...]:可选的命令和参数,用于在容器内执行特定的命令。
具体应用:
docker run [可选参数] image(镜像名):版本号(默认是最新版本,想要指定版本需要加上版本号!)
可选参数:
--name="name" 容器名字,通过一个镜像可以创建多个容器实例,命名可以区分不同的容器
-d 以后台的方式运行 (使用-d命令常见的坑:比如我们想启动以下Nginx服务,只让他在后台运行,但是没有前台的服务可以交互,那么系统就会默认把这个服务关掉!不提供服务!)
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
有四种方式
-p ip:主机端口:容器端口
-p 主机端口:容器内部端口(常用,主机端口映射某个容器内部的端口号,访问主机的端口,即可访问容器)
-p 容器端口
容器端口
-P(大写) 随机指定端口
--rm 容器关闭后就被删除掉,一般用于测试!
如果是已经在运行的容器,可以用下面的命令进入:
docker exec #进入容器后开启一个新的终端,可以在里面做一些操作(常用!)
docker attach #进入容器正在执行的终端,不会开启新的进程!
退出容器,退出到主机
(1)退出并停止容器,使用命令:exit
(2)退出但是不停止,Ctrl + P + Q
查看容器
- Docker images
要列出本地所有的镜像,可以使用以下命令:
docker images [OPTIONS] [REPOSITORY[:TAG]]
• docker images:列出镜像的命令。
• [OPTIONS]:可选参数,用于配置输出结果的格式等。
• [REPOSITORY[:TAG]]:可选的镜像名称和标签,用于过滤输出结果。
*Docker ps
要列出正在运行的容器,可以使用以下命令:
`docker ps [OPTIONS]`
• docker ps:列出容器的命令。
• [OPTIONS]:可选参数,用于配置输出结果的格式和过滤条件。
操作容器
*Docker start
要启动已停止的容器,可以使用以下命令:
`docker start [OPTIONS] CONTAINER [CONTAINER...]`
• docker start:启动容器的命令。
• [OPTIONS]:可选参数,用于配置启动过程,如守护模式等。
• CONTAINER [CONTAINER...]:要启动的容器名称或ID。
*Docker restart
要重启正在运行的容器,可以使用以下命令:
`docker restart [OPTIONS] CONTAINER [CONTAINER...]`
• docker restart:重启容器的命令。
• [OPTIONS]:可选参数,用于配置重启过程,如超时时间等。
• CONTAINER [CONTAINER...]:要重启的容器名称或ID。
*Docker exec
要在运行中的容器内执行命令,可以使用以下命令:
`docker exec [OPTIONS] CONTAINER COMMAND [ARG...]`
• docker exec:在容器内执行命令的命令。
• [OPTIONS]:可选参数,用于配置执行过程,如进入交互模式等。
• CONTAINER:要执行命令的容器名称或ID。
• COMMAND [ARG...]:要在容器内执行的命令及其参数。
*Docker logs
要查看容器的日志输出,可以使用以下命令:
`docker logs [OPTIONS] CONTAINER`
• docker logs:查看容器日志的命令。
• [OPTIONS]:可选参数,用于配置输出结果,如时间戳等。
• CONTAINER:要查看日志的容器名称或ID。
*Docker inspect
要获取容器或镜像的详细信息,可以使用以下命令:
`docker inspect [OPTIONS] NAME|ID [NAME|ID...]`
• docker inspect:获取详细信息的命令。
• [OPTIONS]:可选参数,用于配置输出结果的格式等。
• NAME|ID [NAME|ID...]:要获取信息的容器或镜像的名称或ID。
*docker history 镜像ID
docker history 镜像ID
通过这个命令,我们可以查看到某个镜像暴露的端口号,以及追溯他们的构建过程,便于我们学习!
*Docker kill
要强制终止正在运行的容器,可以使用以下命令:
`docker kill [OPTIONS] CONTAINER [CONTAINER...]`
• docker kill:终止容器的命令。
• [OPTIONS]:可选参数,用于配置终止过程,如信号等。
• CONTAINER [CONTAINER...]:要终止的容器名称或ID。
*Docker rm/docker rmi
要删除已停止的容器或镜像,可以使用以下命令:
`docker rm [OPTIONS] CONTAINER [CONTAINER...] docker rmi [OPTIONS] IMAGE [IMAGE...]`
• docker rm:删除容器的命令。
• docker rmi:删除镜像的命令。
• [OPTIONS]:可选参数,用于配置删除过程,如强制删除等。
• CONTAINER [CONTAINER...]:要删除的容器名称或ID。
• IMAGE [IMAGE...]:要删除的镜像名称或ID。
*docker cp
从容器中手动拷贝文件到主机
由于容器和宿主机是互相隔离的,容器中的文件和主机是不共享的,但是我们可以通过拷贝来实现文件的共用!
docker cp 容器ID:容器内文件路径 目的主机路径
命令总结:
docker images #查看镜像
#从服务器拉取镜像拉取镜像
docker pull 镜像名 #拉取最新版本的镜像
docker pull 镜像名:tag #拉取镜像,指定版本
#推送镜像到服务
docker push 镜像名
docker push 镜像名:tag
docker save -o 保存的目标文件名称 镜像名 #保存镜像为一个压缩包
docker load -i 文件名 #加载压缩包为镜像
#从Docker Hub查找/搜索镜像
docker search [options] TERM
docker search -f STARS=9000 mysql #搜索stars收藏数不小于10以上的mysql镜像
#删除镜像。当前镜像没有被任何容器使用 才可以删除
docker rmi 镜像名/镜像ID #删除镜像
docker rmi -f 镜像名/镜像ID #强制删除
docker rmi -f 镜像名 镜像名 镜像名 #删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f $(docker images -aq) #删除全部镜像,-a 意思为显示全部, -q 意思为只显示ID
docker image rm 镜像名称/镜像ID #强制删除镜像
#给镜像打标签【有时候根据业务需求 需要对一个镜像进行分类或版本迭代操作,此时就需要给镜像打上标签】
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker ps #显示正在运行的容器
docker ps -a #-a,--all 显示全部容器,包括已停止的(默认只显示运行中的容器)
#容器怎么来? docker run 创建并运行一个容器,处于运行状态。
#--name 给要运行的容器起的名字; -p 将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口; -d 表示可后台运行容器 (守护式运行)。具体样例见下
docker run --name containerName -p 80:80 -d nginx
docker pause 容器名/容器ID #让一个运行的容器暂停
docker unpause name #让一个容器从暂停状态恢复运行
docker stop name #停止一个运行的容器(杀死进程、回收内存,仅剩文件系统)
docker start name #让一个停止的容器再次运行
docker restart name #重启容器
#docker stop与docker kill的区别:都可以终止运行中的docker容器。类似于linux中的kill和kill -9这两个命令,docker stop与kill相似,docker kill与kill -9类似
docker kill 容器名 #杀掉一个运行中的容器
docker rename 容器名 新容器名 #更换容器名
#删除容器
docker rm 容器名/容器ID #删除容器
docker rm -f CONTAINER #强制删除
docker rm -f 容器名 容器名 容器名 #删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f $(docker ps -aq) #删除全部容器
docker logs 容器名 #查看容器运行日志
docker logs -f 容器名 #持续跟踪日志
docker logs -f --tail=20 容器名 #查看末尾多少行
#进入容器执行命令,两种方式 docker exec 和 docker attach,推荐docker exec
#方式一 docker exec。
docker exec -it 容器名/容器ID bash
#方式二 docker attach,推荐使用docker exec
docker attach 容器名/容器ID
#从容器退到自己服务器中(不能用ctrl+C)
exit #直接退出。未添加-d(持久化运行容器)时,执行此参数 容器会被关闭
ctrl+p+q #优雅退出。无论是否添加-d参数,执行此命令容器都不会被关闭
#设置容器开机自启动
#法一 创建容器、使用docker run命令时,添加参数--restart=always,表示该容器随docker服务启动而自动启动
docker run --name mysqlLatest -p 3307:3306 --restart=always -d mysql
#若容器已启动,希望设置开机自启动
docker update 容器名/容器ID --restart=always
详解: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d, --detach=false 指定容器运行于前台还是后台,默认为false
-i, --interactive=false 打开STDIN,用于控制台交互
-t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
-u, --user="" 指定容器的用户
-a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="" 指定容器的工作目录
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] 指定环境变量,容器中可以使用该环境变量
-m, --memory="" 指定容器的内存上限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主机名
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[] 添加主机设备给容器,相当于设备直通
--dns=[] 指定容器的dns服务器
--dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="" 覆盖image的入口点
--env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
--expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
--link=[] 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--net="bridge" 容器网络设置:
bridge 使用docker daemon指定的网桥
host //容器使用主机的网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart="no" 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
--rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
参考:https://blog.csdn.net/weixin_49329814/article/details/108547290
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本