Docker常用命令


帮助命令

# 显示Docker的版本信息
docker version
# 显示Docker的系统信息,包括镜像和容器的数量
docker info
# 帮助命令
docker -- help

镜像命令

Docker images 查看所有本地主机上的镜像

# 解释
REPOSITORY	镜像的仓库源
TAG					镜像的标签
IMAGE ID		镜像的ID
CREATED			镜像的创建时间
SIZE				镜像的大小

# 可选项
-a, --all		列出所有镜像
-q, --quiet	只显示镜像的ID

Docker search 搜索镜像

# 搜索mysql镜像
docker search mysql

# 可选项
--filter=STARS=3000		

# 搜索出来的镜像就是STARS大于3000的镜像
docker search mysql --filter=STARS=3000

Docker pull 下载镜像

# 下载mysql镜像 docker pull镜像名[:tag] 不写tag,默认就是latest
docker pull mysql
# 指定版本下载
docker pull mysql:5.7

Docker rmi 删除镜像

# 删除指定的镜像
docker rmi -f 镜像id
# 删除多个镜像
docker rmi -f 镜像id 镜像id 镜像id
# 删除全部的镜像
docker rmi -f $(docker images -aq)

容器命令

说明:我们有了镜像才可以创建容器,Linux,下载一个Centos镜像来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] images
# 参数说明
--name="name"		容器名字 用来区分容器
-d 							后台方式运行
-it							使用交互方式运行,进入容器查看内容
-P							指定容器的端口 -P 8080:8080
-p 							ip:主机端口:容器端口
-p 							主机端口:容器端口(常用)
-p							随机指定端口

# 测试
docker run -it centos /bin/bash
# 从容器中退出主机
exit

列出所有的运行的容器

# docker ps 命令
			列出当前正在运行的容器
-a		列出当前正在运行的容器+带出历史运行过的容器
-n=?	显示最近创建的容器
-q		只显示容器的编号

退出容器

# 直接停止容器并退出
exit
# 容器不停止退出
Ctrl + P + Q

删除容器

docker rm 容器id								 # 删除容器,不能删除正在运行中的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -a)		# 删除所有的容器
docker ps -a -q | xargs docker rm # 删除所有的容器

启动和停止容器的操作

# 启动容器
docker start 容器id
# 重启容器
docker restart 容器id
# 停止当前正在运行的容器
docker stop 容器id
# 强制停止当前容器
docker kill 容器id

常用的其他命令

后台启动容器

# 命令 docker run -d 镜像名
docker run -d centos
# 问题docker ps,发现centos停止了
# 常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现在即没有提供服务,就会立即停止,就是没有程序了

查看日志命令

docker logs -f -t --tail 容器id
# shell脚本
docker run -d centos /bin/bash -c "whil ture;do echo hella;sleep 1;done"
# 显示日志
-tf							# 显示日志
--tail number		# 要显示日志的条数
docker logs -tf --tail 10 容器id

查看容器中的进程信息

docker top 容器id

查看容器的元数据

docker inspect 容器id

进入当前正在运行的容器

# 我们的容器通常都是使用后台方式运行的,需要进入容器修改一些配置

# 命令
docker exec -it 容器id /bin/bash

# 方式二
docker attach 容器id

# 区别
docker exec				进入容器后开启一个新的终端,可以在里面操作
docker attact			进入容器正在执行的终端,不会启动新的终端

从容器拷贝文件到主机上面

docker cp 容器id:容器内路径+文件名 目的地的主机路径+文件名

从主机拷贝文件到容器上面

docker cp 主机路径+文件名 容器id:容器内路径+文件名

安装Nginx

Docker安装Nginx

# 1、搜索镜像
docker search nginx
# 2、下载镜像
docker pull nginx
# 3、运行测试
docker run -d --name nginx01 -p 3344:80 nginx
curl localhost:3344

安装Tomcat

# 启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat
# 测试访问没有权限

# 进入容器
docker exec -it tomcat01 /bin/bash
# 发现问题
# 1、Linux命令少了
# 2、没有webapps。阿里云镜像的原因,默认是最小的镜像,所有不必要的都删除掉,保证最小可运行环境

思考问题:我们以后要部署项目,如果每次都要进入进入容器是不是十分麻烦?我要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了!

部署es+kibana

# ES暴露的端口很多
# ES十分耗内存
# ES的数据一般需要放置到安全目录!挂在
# --net somenetwork 网络配置

# qidong elasticsearch
docker run -d --name elasticearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

Docker容器打包

# 将运行中的容器保存为镜像,保存后docker images可以查看
docker commit 容器ID 镜像名字:tag

# 将镜像打包为.tar文件,默认保存在当前目录
docker save -o 文件名.tar 镜像名:tag

# 从tar包导入镜像
docker load -i tar文件名.tar

# 查看镜像
docker images