一、基础命令
1、启动docker
systemctl start docker
2、关闭docker
systemctl stop docker
3、重启docker
systemctl restart docker
4、设置docker随服务启动而自启动
systemctl enable docker
5、查看docker 运行状态
systemctl status docker
6、查看docker 版本号信息
docker version
docker info
二、镜像命令
1、查看镜像列表
docker images
2、搜索镜像
docker search 镜像名
3、拉取镜像
【如果不加tag(版本号)会拉取docker仓库中该镜像的最新版本latest,加上tag拉取指定版本】
4、运行镜像
docker run 镜像名
docker run 镜像名:tag
docker run -it -d --name 别名 镜像名:tag /bin/bash
-it 表示与容器进行交互式启动
-d 表示可后台运行容器(守护式运行)(结合:-itd)
--name 指定容器名称叫什么
-p 端口映射(宿主机端口:容器端口) 后文有详解
--restart=alwats 表示该容器随docker服务启动而自动启动
-v 将容器内的指定文件夹挂载到宿主机对应位置 (宿主机文件存储位置:容器内文件位置)
/bin/bash 交互路径
5、删除镜像
#删除一个
docker rmi -f 镜像名/镜像ID
#删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
强制删除镜像
docker image rm 镜像名称/镜像ID
6、保存镜像
将我们的镜像保存为tar 压缩文件 这样方便镜像转移和保存 ,然后可以在任何一台安装了docker的服务器上加载这个镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
eg:docker save tomcat -o /myimg.tar

7、加载镜像
docker load -i 镜像保存文件位置

三、容器命令
1、查看容器
#查看 正在运行容器
docker ps
#查看 所有容器(包括已停止的)
docker ps -a
2、停止容器
docker stop 容器名/容器ID
3、删除容器
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
4、进入容器
docker exec -it 容器名/容器ID /bin/bash
#进入 redis1容器
docker exec -it redis1 /bin/bash
5、退出容器
#直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
exit
# 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭 (推荐)
Ctrl + p + q
6、停止容器
docker stop 容器名/容器ID
7、重启容器
docker restart 容器ID/容器名
8、启动容器
docker start 容器ID/容器名
9、kill容器
docker kill 容器ID/容器名
10、容器文件拷贝(无论容器是否开启 都可以进行拷贝)
#docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
11、查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID

12、端口映射
每个容器之间环境都是隔离的!!!A容器中的3306 与B容器的3306毫无关系,如果外部想要访问容器,那必须得让容器中的端口与宿主机的端口建立联系绑定起来,这个正式的概念叫做 容器端口映射
-p 宿主机端口:容器端口
docker run -itd --name redis2 -p 8888:6379 redis:5.0.5 /bin/bash
(-p 8888:6379 解析 将容器内部的 6379端口与docker 宿主机(docker装在哪台服务器 哪台服务器就是宿主机)8888端口进行映射,那通过外部访问宿主机8888端口即可访问到 docker 容器 6379 端口了)
tip:虽说每个容器之间,环境都是隔离的,但是宿主机每个端口都是一个,8888端口被redis002容器绑定了,那么其他所有的容器都不可以使用8888这个端口了!!!
13、数据挂载
什么是数据挂载?
简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复!
命令:(-v命令可以多次使用,即一个容器可以同时挂载多个文件)
-v 宿主机文件存储位置:容器内文件位置
示例:
# 运行一个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"
不想删容器,又想让这个容器设置开机自启动,那么我们修改其启动配置即可!
docker update --restart=always 容器Id 或者 容器名
或
docker container update --restart=always 容器Id 或者 容器名
虽然不删容器就设置了自启动需求满足了,但是,危不危险,这个容器有没有需要数据恢复的情况?
14、更换容器名
docker rename 容器ID/容器名 新容器名
四、运维命令
1、查看docker磁盘占用总体情况
du -hs /var/lib/docker/
2、查看Docker的磁盘使用具体情况
docker system df
3、删除 无用的容器和镜像
# 删除异常停止的容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
# 删除名称或标签为none的镜像
docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
4、查看、导出容器日志
#查看一个docker容器的日志时
docker logs 容器名或ID
#找其中包含某些内容(如 xxx)的所有行
docker logs 容器名或ID 2>&1 | grep xxx
#导出日志文件,以下命令可以获取日志路径
docker inspect 容器名或ID | grep -i logpath
grep的-i表示不区分大小写