Docker容器的基本操作

x33g5p2x  于2021-11-25 转载在 Docker  
字(4.7k)|赞(0)|评价(0)|浏览(384)

一、Docker镜像的基本操作(image)

1.获取镜像

docker search 镜像名      (搜索镜像)      
docker pull 镜像:版本号  (获取固定版本镜像)
docker pull 镜像名      (不加版本号默认为获取最新版本)
docker info #查看docker全部信息 还可以统计哪些容器是running、停止的数量
docker version #查看docker版本

2.查看镜像信息——docker images/inspect/tag

①基本查看 —— images

docker images [仓库名称] [:标签]

例:
[root@xjj opt]# docker images #查看仓库中所有镜像
REPOSITORY    TAG        IMAGE ID       CREATED        SIZE
nginx1        nginx      ea335eea17ab   7 days ago     141MB
nginx         latest     ea335eea17ab   7 days ago     141MB
hello-world   latest     feb5d9fea6a5   2 months ago   13.3kB
centos        7          eeb6ee3f44bd   2 months ago   204MB

docker images -q   			#只查看镜像的ID

[root@xjj ~]# docker images -q
ea335eea17ab
ea335eea17ab

②根据镜像的唯一标识 ID 号来获取镜像的详细信息——inspect

docker inspect [镜像:版本号]
docker inspect [镜像ID号]

例:[root@xjj ~]# docker inspect nginx:1.9.6
[root@xjj ~]# docker inspecte a335eea17ab

③为本地的镜像添加新的标签——tag

'命令格式:'
docker tag 名称:[标签] 新名称:[新标签]

'例:'
[root@xjj docker]# docker tag nginx:latest nginx:nginx2

[root@xjj docker]# docker images | grep nginx
nginx1        nginx      ea335eea17ab   7 days ago     141MB
nginx         latest     ea335eea17ab   7 days ago     141MB
nginx         nginx2     ea335eea17ab   7 days ago     141MB
nginx         1.9.6      a9f920c44e20   6 years ago    133MB

3.表示镜像唯一性的方法

REPOSITORY镜像属于的仓库
TAG镜像的标签信息,标记了同一个仓库中的不同镜像
IMAGE ID镜像的唯一 ID 号,是镜像的唯一标识
CREATED镜像的创建时间
SIZE镜像的大小

①REPOSITORY:TAG

例如
[root@lucien~]# docker image 
REPOSITORY   TAG        IMAGE ID       CREATED        SIZE
centos       7.4.1708   9f266d35e02c   2 years ago    197MB

centos的唯一表示即为:centos:7.4.1708

②IMAGE ID(sha256:64位的号码,默认只截取12位)

  • 镜像的唯一标识除了镜像名:版本号以外,还可以使用镜像的ID作为唯一标识
  • ID是sha256:64位的号码,但一般情况下,不加参数查询时,系统只显示12位
docker image ls --no-trunc
查看详细的 image id 号

[root@xjj ~]# docker images --no-trunc 
REPOSITORY    TAG        IMAGE ID                                                                  CREATED        SIZE
nginx         latest     sha256:ea335eea17ab984571cd4a3bcf90a0413773b559c75ef4cda07d0ce952b00291   7 days ago     141MB

4.镜像的导出和导入——docker save/load

如果你需要进行镜像迁移,需要先将镜像保存至本地文件,之后可以拷贝该文件至其他主机

这一过程称之为存出镜像,使用【docker save】命令操作

'命令格式:'
docker save -o [存储文件名] [存储镜像]

'例:'
docker save -o nginx_1 nginx:latest
ll nginx
[root@xjj opt]# ll nginx_1
-rw-------. 1 root root 145917440 11月 25 17:12 nginx_1

scp nginx root@192.168.126.16:nginx

'#传至另一台主机'

如果需要将存出的镜像从主机 A 迁移至主机 B 上使用,可以将该导出文件导入到主机 B 的镜像库中

这一过程称之为载入镜像,使用【docker load】进行载入操作

'命令格式:'
docker load < [存出文件]

'例:'
docker load < nginx_1

docker images|grep nginx
把镜像导出到系统中
docker image save 9f266d35e02c > /opt/centos_7.4.1708.tar.gz

把已经导出到系统的镜像导入到容器中
docker image load -i /opt/centos_7.4.1708.tar.gz

5.删除镜像——docker rmi

删除镜像的方法有两种:使用镜像的标签或 ID

'命令格式:'
docker rmi [仓库名称][:标签]
或
docker rmi [镜像ID号]

'例:'
docker images|grep nginx

docker rmi nginx1:nginx

'#当一个镜像有多个标签时,该命令只会删除多少标签中的这个指定标签,而不会影响镜像文件'
'#若该镜像只有一个标签就要注意了,再使用该命令会直接彻底删除该镜像!'

docker rmi 97788821c58b

'#选择参数为镜像ID号时要谨慎,必须首先确保该镜像当前没有被容器使用'
'#如果该镜像已被容器使用,则需先删除所以依赖该镜像的容器,再删除该镜像'
'#删除时系统会先删除指向该镜像的所有标签,然后删除镜像本身'

docker images|grep nginx

#批量删除:
docker rmi `docker images -q`    #删除所有镜像
docker rmi `docker images -q | grep nginx`  #删除所有Nginx的镜像

二、Docker容器操作

1.容器的创建与使用–docker create/ps/start/stop/run

容器的创建就是将镜像加载到容器的过程

  1. Docker 的容器十分的轻量级,用户可以随机创建或删除
  2. 新创建的容器默认处于停止状态,即不会自行开始运行任何程序
  3. 需要开启一个进程来启动容器,该进程是容器的唯一进程,即该进程终止时,容器也会被完全终止
  4. 停止后的容器可以重启启动并保留原有的修改
#查询容器
docker ps -a

'#可以使用该命令查看索引容器的运行状态'
'#“-a”选项表示列出系统最近一次启动的容器'

#创建容器
docker create [选项] [镜像] [运行的程序]
docker create -it nginx:latest /bin/bash		#创建新容器后,会返回一个唯一的ID

-i  让容器的标准输入保持打开(让一个可以交互可以进入的接口)
-t  分配一个伪终端
-d  后台守护进程的方式运行

#启动容器(停止状态下的容器)
docker start [容器的ID/名称]

#停止容器
docker stop 容器ID

如果想直接创建并使用容器,可以使用【docker run】命令,等同于先执行【docker create】,再执行【docker start】

需要注意的是,执行该命令,只要后面的命运行结束,容器就会停止

使用【docker run】命令创建容器时,Docker 在后台的标准运行过程

  1. 检查本地是否存在指定镜像,若不存在,则会从公共仓库下载
  2. 利用镜像创建并启动一个容器
  3. 分配一个文件系统给容器,在只读的镜像层外挂载一层可读写层
  4. 从宿主机配置的网桥接口中桥接一个虚拟机至容器中
  5. 分配一个地址池中的 IP 给容器
  6. 执行用户指定的应用程序
  7. 执行完毕后容器被终止运行
'例:创建容器并启动执行一条shell命令'(一次性执行)
docker run centos:7 /usr/bin/bash -c ls /

--
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello world;done"(持续后台运行)

'#可以添加“-d”选项,可以让docker以守护进程形式在后台运行,即可以在后台持续运行该容器'
'#注:该容器所运行的程序一旦结束,容器也就会被终止'

docker ps -a

2.容器的进入——docker run/exec

1.使用run
docker run -it nginx:latest /bin/bash

2.exec(容器必须为开启状态)

'命令格式:'
docker exec -it [容器ID/名称] /bin/bash

'例:'
docker exec -it 4aa9da25318d /bin/bash

'#用户可以通过所创建的终端来输入命令'

exec 和 shell 是两种运行模式

PS:
docker run-it 会创建前台进程,但是会在输入exit后终止进程
docker attach 会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止容器进程
docker exec -it 会连接到容器,可以像SSH一样进入 容器内部,进行操作,可以通过exit退出容器,不影响容器运行

3.容器的导出与导入–docker export/import

用户可以将任何一个 Docker 从一台主机迁移至任意一台主机:

  1. 首选需要将已创建好的容器导出为文件,使用【docker export】命令实现,该容器当前处于运行状态也可以正常导出
  2. 导出后将该文件传输至其他主机,通过相应的导入命令以实现容器的迁移
  3. 与镜像的迁移基本同理
1.容器导出
docker export [容器ID/名称] >文件名

'例:'
docker export 4aa9da25318d >nginx_1
ls -l nginx_1

--
scp nginx_1 root@192.168.126.16:nginx_1

2.容器导入(生成镜像)
docker import 导出的文件名(容器) 指定镜像名称
示例:
docker import nginx_1 nginx:latest
cat [文件名](容器) |docker import - [生成的镜像名称][:标签]

'例:'
ll nginx_1

cat nginx_1 |docker import - nginx_1:xjj

'#导入文件nginx_1成为本地镜像'

--
docker images |grep nginx

4.容器的删除–docker rm

#删除容器
docker rm [容器ID/名称]

'例:'
docker rm docker rm fcd5691107cf a17b5d224f47 cf7eb18ebf28 fb95ffa44044 2ee2c9d515b3 e88f1ded4cd

#强制删除容器(正在运行的up状态)
docker rm -f 容器ID

#批删除非up状态的rm -f : 强制删除所有
docker rm `docker ps -qa`

#批量删除容器(正则匹配)
docker ps -a | awk ' {print "docker rm "$1}' | bash

#批量删除"exit"状态( 指定状态)的容器
for i in `docker ps-a|grep -i exit | awk '{print $1}'`; do docker rm-f $i;done

总结

docker优化:有效减少镜像大小

overlay2由4部分组成 :LowerDir MergedDir UpperDir WorkDir

相关文章