docker 基础命令(系统级)
启动docker
systemctl start docker
service docker start
关闭docker
systemctl stop docker
service docker stop
重启docker
systemctl restart docker
service docker restart
docker设置自启动
systemctl enable docker
查看docker 运行状态 ------如果是在运行中 输入命令后 会看到绿色的active
systemctl status docker
查看docker 版本号信息
docker version
docker info
docker 帮助命令 -------忘记了某些命令便可使用此进行查看与回顾
docker --help
比如 咱忘记了 拉取命令 不知道可以带哪些参数 咱可以这样使用
docker pull --help
配置文件 /etc/docker/daemon.json
{ # 修改镜像源
"registry-mirrors":["https://7rq4plav.mirror.aliyuncs.com"],
# 仓库地址
"insecure-registries":["172.16.1.208:30002"],
# 数据存放目录
"data-root": "/data/docker",
# 启用debug模式
"debug": true,
# runtime
"default-runtime": "nvidia",
"runtimes": {
"nvidia":{
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
修改后需要使用命令加载并重启docker
systemctl daemon-reload
systemctl restart docker
docker语法
docker [command] [image_name:tag] [flags]
command子命令包括以下:
容器生命周期管理
- run
- start/stop/restart
- kill
- rm
- pause/unpause
- create
- exec
容器操作
- ps
- inspect
- top
- attach
- events
- logs
- wait
- export
- port
- stats
容器rootfs命令
- commit
- cp
- diff
镜像仓库
- login
- pull
- push
- search
本地镜像管理
- images
- rmi
- tag
- build
- history
- save
- load
- import
info|version
- info
- version
docker 镜像命令
登陆仓库
docker login 仓库地址
创建镜像
docker build -f ./Dockerfile -t 镜像名:版本 .
查看自己服务器中docker 镜像列表
docker images
搜索镜像
docker search 镜像名
docker search --filter=STARS=9000 mysql # 搜索 STARS >9000的 mysql 镜像
拉取镜像
不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker pull 镜像名
docker pull 镜像名:tag
咱再来拉取一个指定版本号 镜像 至于版本号呢 ,可以在docker hub中查看docker官方镜像
运行镜像
docker run 镜像名
docker run 镜像名:Tag
docker中 run 命令是十分复杂的 有什么持久运行 映射端口 设置容器别名 数据卷挂载等,后面会详细介绍
删除镜像
当前镜像没有被任何容器使用才可以删除
#删除一个
docker rmi 镜像名/镜像ID
#删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
#删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi $(docker images -aq)
强制删除镜像
docker image rm -f 镜像名称/镜像ID
保存镜像
将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像
# 保存镜像
docker save $IMAGE_NAME:$VERSION | gzip > $SAVE_DIR/$IMAGE_NAME.tar.gz
# 加载镜像
gunzip -c $SAVE_DIR/$IMAGE_NAME.tar.gz | docker load
# 给镜像打标签
docker tag 源镜像名:TAG 新镜像名:新TAG
docker 容器命令
查看正在运行容器列表
docker ps
查看所有容器 -----包含正在运行 和已停止的
docker ps -a
容器怎么来呢 可以通过run 镜像 来构建 自己的容器实例
运行一个容器
# docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash
-d, --detach=false, 指定容器运行于前台还是后台,默认为false
-i, --interactive=false, 打开STDIN,用于控制台交互
-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
-it, 以交互模式进入容器,通常在最后通过/bin/bash或bash进入
-u, --user="", 指定容器的用户
-w, --workdir="", 指定容器的工作目录
-c, --cpu-shares=0, 设置容器CPU权重,在CPU共享场景使用
-e, --env=[], 指定环境变量,容器中可以使用该环境变量
-m, --memory="", 指定容器的内存上限
-P, --publish-all=false, 指定容器暴露的端口
-p, --publish=[], 指定容器暴露的端口
-h, --hostname="", 指定容器的主机名
-v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cidfile="", 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="", 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--cpu="", 用来设置工作线程的数量。有多颗 CPU,则需要相应增加 --cpu 的数量。
--device=[], 添加主机设备给容器,相当于设备直通
--dns=[], 指定容器的dns服务器
--dns-search=[], 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="", 覆盖image的入口点
--env-file=[], 指定环境变量文件,文件格式为每行一个环境变量
--expose=[], 指定容器暴露的端口,即修改镜像的暴露端口
--ip="", 指定容器的静态ip
--link=[], 指定容器间的关联,使用其他容器的IP、env等信息
--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不能被代理
--runtime=nvidia 设置runtime
--gpus all 设置显卡
停止容器
docker stop 容器名/容器ID
删除容器
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
重启容器
docker restart 容器ID/容器名
启动容器
docker start 容器ID/容器名
kill 容器
docker kill 容器ID/容器名
进入容器
# 方式一
docker exec -it 容器名/容器ID /bin/bash
# 方式二
docker attach 容器名/容器ID
从容器内 退出到自己服务器中 需注意 两个退出命令的区别
#=直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
exit
# 优雅退出 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
容器文件拷贝 —无论容器是否开启 都可以进行拷贝
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
查看容器日志
docker logs -f --tail=要查看末尾多少行(默认all) 容器ID
# 当容器启动失败时,通过下面方法
docker inspect --format '{{.LogPath}}' 容器ID
容器配置更新
docker update --restart=always 容器Id 或者 容器名
更换容器名
docker rename 容器ID/容器名 新容器名
自己提交一个镜像
我们运行的容器可能在镜像的基础上做了一些修改,有时候我们希望保存起来,封装成一个更新的镜像,这时候我们就需要使用 commit 命令来构建一个新的镜像
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
获取元数据
docker inspect 容器名/容器ID
# 获取正在运行的容器mymysql的 IP。
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql
查看容器中运行的进程信息
docker top 容器名/容器ID
查看指定镜像的创建历史
docker history 镜像:版本
docker 网络
新建网络
docker network create --driver bridge --subnet 172.18.0.0/24 --gateway 172.18.0.1 $net_name
使用网络固定IP
docker run --name mongo5 --network $net_name --ip 172.18.0.5 -p 27005:27017 -d mongo:4
docker 运维命令
可能有时候发布会遇到如下错误:
docker: write /var/lib/docker/tmp/GetImageBlob325372670: no space left on device
这个错误是docker在写入的时候报错无机器无空间
# 查看docker工作目录
sudo docker info | grep "Docker Root Dir"
更改docker工作目录
systemctl stop docker
sudo cp -r /var/lib/docker/* /data/docker
vim /etc/docker/daemon.json
# 添加这句话 "data-root": "/data/docker",
systemctl daemon-reload
systemctl start docker
查看docker磁盘占用总体情况
du -hs /var/lib/docker/
查看Docker的磁盘使用具体情况
docker system df
TYPE 列出了 Docker 使用磁盘的 4 种类型:
Images 所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。
Containers 运行的容器占用的空间,表示每个容器的读写层的空间。
Local Volumes 容器挂载本地数据卷的空间。
Build Cache 镜像构建过程中产生的缓存空间(只有在使用 BuildKit 时才有,Docker 18.09 以后可用)。
删除无用的镜像
# 清除所有无容器使用的镜像
docker system prune
# 删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
删除无用的容器
# 清理停止的容器
docker container prune
# 删除异常停止的容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
# 删除状态为exited的容器
sudo docker rm $(sudo docker ps -qf status=exited)
删除无用的数据卷
docker volume prune
删除无用的构建缓存
docker builder prune
一键清理所有无用的空间
docker system prune