赞
踩
目录
引言
- 1,docker client客户端连接到了服务器(服务端是以一个守护进程的形式跑在操作系统里面的)restfulapi,典型的c/s架构
- 2,有docker服务端的守护进程从dockerhub,上下载了镜像(,服务端会先检查本地系统是否有这个镜像)
- 3,服务端创建了一个新的容器,然后从拉取的这个镜像启动了一个容器,容器执行了脚本、可执行程序,让我们可以查看/使用client
- 4,docker服务端把这些信息流返回到客户端并展示出来
docker version#查看docker版本
docker info
- docker pull 镜像名称。例如
- docker pull nginx
- 查看镜像列表
- docker images——查看当前docker下的下载镜像信息
- REPOSITORY:镜像属于的仓库;
- TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
- IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
- CREATED:镜像创建时间;
- VIRTUAL SIZE:镜像大小
- 获取镜像信息
- docker inspect 镜像ID
docker tag nginx:latest nginx:11.11
删除
- 删除
- docker rmi 镜像名称
- docker rmi 镜像标签
- docker save -o 文件名+镜像名
- 实例
- docker save -o nginx_docker nginx:11.11
- docker rmi nginx:11.11
- docker images
- docker load < nginx_docker
- docker images
- 格式:
- docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
- 或者
- docker rmi 镜像ID号 #会彻底删除该镜像
-
- 注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
-
- docker rmi nginx:web
-
- docker tag nginx:latest skymarch/nginx:ly #添加新的标签
- docker login #登录公共仓库
- Username:
- password:
- docker push skymarch/nginx:ly #上传镜像
- docker ps
- 查看运行的容器
- docker ps-a
- 查看所有容器
- ##字段说明
- CONTALNER ID:容器的id好
- image:加载的镜像
- command:运行的程序
- created:创建时间
- status:当前状态
- ports:端口映射
- names:名称
-
- docker create 选项 镜像
-
- 常用选项
- -i:让容器开启表标准输入
- -t:让docker分配一个伪终端
- -d:后台守护进程方式运行
- -it:合起来实现和容器的交互的作用,运行一个交互式会话shell
-
-
- docker create -it tomcat:latest /bin/bash
- #加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。
-
- #示例1:
- docker run -itd nginx:latest /bin/bash
-
- #示例2:执行后退出
- docker run centos:7 /usr/local/bash -c ls -lh /
-
- #示例3:执行后不退出,以守护进程方式执行持续性任务
- docker run -d centos:7 /usr/local/bash -c "while true;do echo lcdb;done"
-
实例1
docker run -itd nginx:latest /bin/bash
实例2:执行后,退出
docker run centos:7 /usr/local/bash -c ls -lh /
实例3 :执行后不退出,以守护进程方式执行持续性任务
docker run -d centos:7 /usr/local/bash -c "while true;do echo lcdb;done"
如果在生产环境中,这个容器不能删除,但是磁盘被这个容器执行的爆满,导致其它应用不能用,那怎么处理?
答:可以在/var/lib/docker/containers中可以查看到容器的运行文件,找到死循环的容器,进入到有一个json.log文件,这个文件为日志文件,可以使用echo " " >json.log 这个文件中,可以临时解决磁盘压力的问题。直接删除解决不了。但是过段时间,还是会导致压力大,那怎么处理?
可以写一个脚本,定期crontab -e 执行该脚本,相当于定时清空。
- #!/bin/bash
- logs=$(find /var/lib/docker/containers/ -name *-json.log*)
- for log in $logs
- do
- cat /dev/null > $log
- done
-
- ===##或者====
- #设置docker日志文件数量及每个日志大小
- vim /etc/docker/daemon.json
- {
- "registry-mirrors":["http://f613ce8f.m.daocloud.io"] //加速器
- "log-driver":"json-file", //定义日志格式,
- "log-opts":{"max-size":"500M","max-file":"3"} //设置日志文件最大500M,最多3个,如果3个都满了,它会自动删除一个,然后继续装。
- }
-
- systemctl damon-reload && systemctl restart docker
- #重新加载一下
停止容器
docker stop
- docker run -it nginx:latest /bin/bash
- exec(容器必须为开启状态)
- docker exec -it 容器id /bin/bash
-
- exec和shell是两种运行方式
- docker run -it 会创建前台进程,但是会在输入exit后终止进程
- docker exec -it 会连接到容器,可以向ssh一样进入容器,进行操作,可以通过exit退出容器,不影响容器运行
- docker expore 容器id > 文件名
- 实例
- docker export 容器id > nginx_a
- docker import 导出的文件名字 指定镜像名称
- 实例
- docker import tomdce cetnos:liss1
- docker rm 【容器id】
- #不能删除运行状态的容器,如果要删除,需要加-f强制删除,或者停止后删除
-
- docker rm -f 【容器名称】
- #基于容器名称删除
-
- docker rm -f `docker ps -q`
- #删除所有运行的容器
-
- docker rm -f `docker ps -aq`
- #删除所有的容器
-
- docker ps -a | awk 'NR>=2{print "docker rm "$1}'| bash
- #删除所有容器,不包括运行的容器
-
- for i in `docker ps -a |grep -i exit | awk '{print $1}'`;do docker rm -f $i;done
- #过滤出关闭状态的容器,并删除
-
docker rm 【容器id】
docker rm -f 【容器名称】
- docker rm `docker ps -aq`
-
- docker ps -a
docker stats
- docker logs 【容器ID】
- #查看指定容器的日志信息
- docker iamges #查看docker镜像
-
- docker inspect 【id号】 #查镜像的详细信息
-
- docker tag nginx:lastest nginx:web #修改docker的标签(见名知意)
-
- #==========删除镜像
- docker rmi nginx:web #删除标签为web的nginx镜像(删除标签指定的镜像)
- 或者
- docker rmi 【镜像id】 #彻底删除该镜像
- #注意:如果该镜像一个呗容器使用,正确做法先删除该镜像的所有容器,再删除镜像
-
- #=====导入导出镜像
- 存储镜像----》将镜像保存为本地文件
- docker save -o 【存储文件名】 【存储的镜像】
- docker save -o nginx nginx:latest #实例(保存本地目录)
-
- 导入镜像----》将本地文件导入到容器
- docker load < nginx #存入到容器中
- 或
- docker load -i nginx #也可以存储到容器中
-
- #=====上传镜像====演示上传阿里云和docker hub
- 默认上传到docker Hub官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com可以使用docker login命令来输入用户名、密码和邮箱来完成注册和登录。
- 在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用docker push命令进行上传。
- docker tag nginx:latest ydq/nginx:web #修改docker标签
- docker iamges
- docker login #登录到docker的hub
- docker push 【上传的镜像】 #上传镜像
-
- #=======下载镜像
- docker pull nginx #下载nginx镜像
- ===#先创建后启动
- docker create -it nginx:latest /bin/bash #创建容器
-
- docker ps -a #查看所有容器
- docker ps #查看运行的容器
-
- docker start 【镜像id】 #启动一个镜像
-
- ========#创建并启动
- docker run 【镜像名】 /usr/bin/bash -c ls / #创建一个容器并启动镜像(本地没有将从仓库下载)(运行结束就退出)
-
- docker run -d 【镜像名】 /usr/bin/bash -c "while true;do echo hello;done"
- #后台运行(必须要加-d,不然容器无法启动)(会造成cpu100%)
-
- docker run -itd -name test1(名称) 【镜像名】 /bin/bash
- #创建容器并持续运行容器(-name:指定名称 )
-
- ======#停止容器
- docker stop 【容器id】 #容器id用docker ps -a 查看
-
- =====#容器的进入
- docker exec -it 【容器id】 /bin/bash #进入一个启动的容器
- 或
- docker run -it centos:7 bash #不加-d选项会创建容器后直接进入容器,但是退出容器,容器也会停止
-
- =====#本机文件与容器互传
- docker cp ydq.txt 【容器id】:/opt #将本地文件传到容器中的/opt目录下
-
- docker cp 【容器id】:/opt/ydq.txt /home/ydq2.txt #将容器中的文件拷贝到本地
-
- ======#容器的导出导入
- docker export 【容器id】 > nginx.tar #将容器导出到本地
- cat nginx.tar |docker import - nginx:web #将本地导入到容器
-
- ======#容器的删除
- docker rm [-f] 【容器id】 #删除容器(加-f删除正在运行的容器)
-
- docker ps -a |awk 'NR>=2{print "docker stop" $1}'|bash
- ......
- #1、如果镜像优化?
- 有效减少镜像大小(dockerfile 优化方向-》对于部分企业而言,是一种升阶面试题)
-
- #2、怎么看当下有多大号容器,怎么看当下所有容器占用的I/O有多少,占用内存多少?
- 使用docker stats命令查看
-
- #3、容器有哪些状态?
- Docker容器可以有七种状态:
- 已创建(create)
- 运行(up)
- 已暂停(paused)
- 重新启动(restarting)
- 已退出(exited)正常退出为(exited(0)),人工干预停止会有(exited(137))
- 死亡(dead)
- 迁移(removing)
-
- #4、overlay2由哪几部分组成 ?
- LowerDir
- MergedDir
- UpperDir
- WorkDi
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。