Docker容器------镜像,容器基础命令

目录

 一,docker镜像

 1,查看docker版本

 2,获取镜像

2.1查看下载到本地的所有镜像 

 2.2 获取镜像信息

2.3 添加镜像标签(上传镜像到仓库) 

 2.4 镜像导出

 2.5 镜像导入

 2.6 ,删除镜像

 2.7 上传镜像

​编辑 二,docker 容器操作

1,查看容器

2,容器创建----docker create

 3,启动容器

 4,进入容器

1,进入容器

2,容器导出

 3,容器导入

 4,批量删除容器/批量删除镜像

 5,动态查看运行容器资源消耗

6,查看docker的日志信息

 三,总结

镜像操作

容器操作

简单面试题


引言

aafef06deca444fca3e3c3df8d168600.jpeg

 一,docker镜像

1,docker client客户端连接到了服务器(服务端是以一个守护进程的形式跑在操作系统里面的)restfulapi,典型的c/s架构
2,有docker服务端的守护进程从dockerhub,上下载了镜像(,服务端会先检查本地系统是否有这个镜像)
3,服务端创建了一个新的容器,然后从拉取的这个镜像启动了一个容器,容器执行了脚本、可执行程序,让我们可以查看/使用client
4,docker服务端把这些信息流返回到客户端并展示出来

029a1300638448c0b6ddfa0c1c95d53a.png

 1,查看docker版本

 docker version#查看docker版本

ce89394da3f540bf90c8f38ec5d88542.png

docker info

2354dc7166b14831b89f61ee63dc4f34.png

 2,获取镜像

docker pull 镜像名称。例如
docker pull nginx

ca331cc477b240dda0d9f61d28917e07.png

2.1查看下载到本地的所有镜像 

查看镜像列表
docker images——查看当前docker下的下载镜像信息
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小

061c4ba76c634732a7ed783354d91151.png

 2.2 获取镜像信息

获取镜像信息
docker inspect 镜像ID

de0bdb9fd0784c918a46263feb1c588b.png

2.3 添加镜像标签(上传镜像到仓库) 

docker tag nginx:latest nginx:11.11

7d3450183c1842edbf13e539c034d17e.png

 删除

删除
docker rmi 镜像名称
docker rmi 镜像标签

2f4b6dbd8512409580a46efd21a8e5db.png

cfe3093d2c0d4fe18ae7a4ebfc22b684.png

 2.4 镜像导出

docker save -o 文件名+镜像名
实例
docker save -o nginx_docker nginx:11.11

9322cff4a22a479eb43d664e77ac9652.png

 2.5 镜像导入

docker rmi nginx:11.11
docker images
docker load < nginx_docker
docker images

3627e6210b284656b1c01e324fb5c572.png

 c93aef79151146db8d55a90fff580179.png

 2.6 ,删除镜像

格式:
docker rmi 仓库名称:标签				#当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号					#会彻底删除该镜像

注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。

docker rmi nginx:web

e530f817bc7d411b93b2ab6f0c655514.png

 2.7 上传镜像

636f424e6c4b4cab8e54f3dade61a178.png

 a40b5882dcfb40d29948a3ec2a237466.png

 5c84a715d6384f718b34e981ea411984.png

docker tag nginx:latest skymarch/nginx:ly			#添加新的标签
docker login									#登录公共仓库
Username:
password:
docker push skymarch/nginx:ly						#上传镜像

830b8cbe0fea45e0aceb5dc1c62412bf.png 二,docker 容器操作

1,查看容器

docker ps
查看运行的容器
docker ps-a
查看所有容器
##字段说明
CONTALNER ID:容器的id好
image:加载的镜像
command:运行的程序
created:创建时间
status:当前状态
ports:端口映射
names:名称

b4bbc41da1f149cfa8a24c270f123716.png

2,容器创建----docker create

docker create 选项  镜像

常用选项
-i:让容器开启表标准输入
-t:让docker分配一个伪终端
-d:后台守护进程方式运行
-it:合起来实现和容器的交互的作用,运行一个交互式会话shell


docker create -it tomcat:latest /bin/bash

c6e9b68acdd9410f886ea1228bb43bf8.png

a689bd819e5247a7a73731b0276a5a22.png

 776d84dcd05d4142af071d15da51eb09.png

 3,启动容器

#加 -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
 

3fc4f2ae969f4a538a97f9559ee9d86b.png

 实例2:执行后,退出

docker run centos:7 /usr/local/bash -c ls -lh /

21e9950b3a6342e587bc269d50738f8f.png

 实例3 :执行后不退出,以守护进程方式执行持续性任务

docker run -d centos:7 /usr/local/bash -c "while true;do echo lcdb;done" 
 

d8edc937174247fc813bf2d3e5e9def8.png

 如果在生产环境中,这个容器不能删除,但是磁盘被这个容器执行的爆满,导致其它应用不能用,那怎么处理?

答:可以在/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

bafd36f6dea4400eae3820057a2b84d4.png

 4,进入容器

1,进入容器

docker run -it nginx:latest  /bin/bash
exec(容器必须为开启状态)
docker exec -it 容器id /bin/bash

exec和shell是两种运行方式

b7a50a1c0b5940688b04df7a1cf4df52.png

 0bd79cd3434d4b9f8dbc441586d0c759.png

docker run -it 会创建前台进程,但是会在输入exit后终止进程
docker exec -it 会连接到容器,可以向ssh一样进入容器,进行操作,可以通过exit退出容器,不影响容器运行

2,容器导出

docker expore 容器id > 文件名
实例
docker export 容器id > nginx_a

0e121e209a0b4fafb2192f140114637b.png

 3,容器导入

docker import 导出的文件名字 指定镜像名称
实例
docker import tomdce cetnos:liss1

9cba89164a93408892db6e9a7d582e54.png

 4,批量删除容器/批量删除镜像

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】
beb7838a6d3745e986190a488038d461.png

 docker rm -f 【容器名称】

5b9516ad78e4426f9fa9cef845800f57.png

docker rm `docker ps -aq`

docker ps -a

fdf81788d27e40a8bc74dbc489ff622a.png

 5,动态查看运行容器资源消耗

docker stats

3cfc7c415c0745f9b3c931c7ef92872b.png

6,查看docker的日志信息

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

猜你喜欢

转载自blog.csdn.net/m0_54594153/article/details/127341191