官方文档:https://docs.docker.com/engine/reference/commandline/cli/
帮助命令
# docker版本信息docker version# docker系统信息,包括镜像和容器信息,很详细docker infodocker 命令 --help
镜像命令
docker images
docker search [名字]
docker search mysql --filter=STARS=3000 #会找到stars3000以上的
docker pull [名字]:[tag] #如果不写tag,默认latest
(base) [root@izuf64eqyhnvmcv50ay73gz ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest #完整名字
(base) [root@izuf64eqyhnvmcv50ay73gz ~]#
#这里有一个关于layer的,不同镜像如果有相同的layer不会重复下载
docker rmi [完整名或id] #删除镜像
docker rmi -f $(docker images -aq) #删除全部镜像
docker rmi prune #删除没有被使用的镜像
docker inspect [镜像名]:[tag] #查看镜像元数据
容器命令
docker run [可选参数] image [命令]
#超多参数,下面是常用的
--name #为容器指定名字
-d #后台运行
-it #使用交互方式运行,进入容器查看内容
-p #指定的容器的端口
-p [主机端口]:[容器端口](常用)
-p [容器端口]
-P #大屁,随机指定端口
docker run -d [可选参数] image [命令]
#后台运行,必须要有一个前台进程,不然启动就会立刻停止
docker run -itd --restart=always [镜像名] [命令]
docker run -itd --rm [镜像名] [命令]
#跑完停掉之后自动删掉容器,镜像也会被删掉,平时不建议用,可以用来测试
exit #退出不能保持后台运行
ctrl+p+q #退出之后保持后台运行
docker ps
docker ps -a
docker ps -n=5 #最近创建的5个容器
docker stop [id] #运行时候不能删除,要停掉
docker start [id]
docker restart [id]
docker kill [id] #强制删除
docker attach [id] #进入正在运行的容器,进入正在执行的终端
docker exec -it [id] /bin/bash
#进入正在运行的容器 -it以交互模式开启一个新的终端,类似于开一个xshell新连接
docker rm -f ${docker ps -aq} #删除全部
docker rm [id] #删除指定容器
docker rm prune #删除所有处于exit状态的容器
docker stats #查看资源占用
docker logs [容器id] #查看容器日志
-t #显示时间戳
-f
--tail 10 [容器id] #查看最新十条
#一个例子
(base) [root@izuf64eqyhnvmcv50ay73gz ~]# docker run -d centos /bin/sh -c "while true;do echo test;sleep 1;done"
84caae0543937c8bfeecbcb043b82a57924812c2fa8d5fa4b8c64286bbcc4833
(base) [root@izuf64eqyhnvmcv50ay73gz ~]# docker logs 84caa
test
test
test
test
test
(base) [root@izuf64eqyhnvmcv50ay73gz ~]#
#查看容器中进程信息
docker top [容器id]
#查看容器元数据
docker inspect [容器id]
#拷贝文件、文件夹
#容器里的文件到宿主机
docker cp [容器id]:[路径] [本机路径]
#宿主机文件到容器中
docker cp [本机路径] [容器id]:[路径]
#容器保存为压缩包
#容器导出保存为tar文件:
docker export CONTAINERID > TARNAME
#容器tar包>image:
docker import TARNAME IMAGENAME:VERSION
#镜像导出保存为tar
docker commit
docker save [镜像名]:[tag] > [tar包名称]
#重新导入,不需要指定镜像名字
docker load -i [tar包名称]
个人觉得,用先commit保存成镜像再导出更好一点,用容器导出的tar包在import之后,需要固定的cmd命令才可以启动容器。
发现一个问题:
运行新的镜像,可以看到原本容器挂载服务器的数据卷文件夹下的文件都不见了,是因为数据卷吧…
所以需要保留的文件都全部重新挪了位置。
练习
部署nginx
docker search nginx
docker pull nginx
docker images | grep nginx
#端口暴露
docker run -d --name nginx-test -p 3344:80 nginx
curl localhost:3344
#进入容器
docker exec -it nginx-test /bin/bash
部署es+kabana
要点:es暴露的端口很多;es十分消耗内存;es的数据一般需要放置到安全目录>>挂载
#查看容器存活状态
docker stats
#针对ES消耗内存的问题,设置占用内存大小
-e ES_JAVA_OPTS="-Xms 64m -Xmx 512m"
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms 64m -Xmx 512m" elasticsearch:7.6.2
#网络如何设置??
