Docker容器的基本操作

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

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

1.获取镜像

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

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

①基本查看 —— images

  1. docker images [仓库名称] [:标签]
  2. 例:
  3. [root@xjj opt]# docker images #查看仓库中所有镜像
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. nginx1 nginx ea335eea17ab 7 days ago 141MB
  6. nginx latest ea335eea17ab 7 days ago 141MB
  7. hello-world latest feb5d9fea6a5 2 months ago 13.3kB
  8. centos 7 eeb6ee3f44bd 2 months ago 204MB
  9. docker images -q #只查看镜像的ID
  10. [root@xjj ~]# docker images -q
  11. ea335eea17ab
  12. ea335eea17ab

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

  1. docker inspect [镜像:版本号]
  2. docker inspect [镜像ID号]
  3. 例:[root@xjj ~]# docker inspect nginx:1.9.6
  4. [root@xjj ~]# docker inspecte a335eea17ab

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

  1. '命令格式:'
  2. docker tag 名称:[标签] 新名称:[新标签]
  3. '例:'
  4. [root@xjj docker]# docker tag nginx:latest nginx:nginx2
  5. [root@xjj docker]# docker images | grep nginx
  6. nginx1 nginx ea335eea17ab 7 days ago 141MB
  7. nginx latest ea335eea17ab 7 days ago 141MB
  8. nginx nginx2 ea335eea17ab 7 days ago 141MB
  9. nginx 1.9.6 a9f920c44e20 6 years ago 133MB

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

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

①REPOSITORY:TAG

  1. 例如
  2. [root@lucien~]# docker image
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. centos 7.4.1708 9f266d35e02c 2 years ago 197MB
  5. centos的唯一表示即为:centos:7.4.1708

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

  • 镜像的唯一标识除了镜像名:版本号以外,还可以使用镜像的ID作为唯一标识
  • ID是sha256:64位的号码,但一般情况下,不加参数查询时,系统只显示12位
  1. docker image ls --no-trunc
  2. 查看详细的 image id
  3. [root@xjj ~]# docker images --no-trunc
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. nginx latest sha256:ea335eea17ab984571cd4a3bcf90a0413773b559c75ef4cda07d0ce952b00291 7 days ago 141MB

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

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

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

  1. '命令格式:'
  2. docker save -o [存储文件名] [存储镜像]
  3. '例:'
  4. docker save -o nginx_1 nginx:latest
  5. ll nginx
  6. [root@xjj opt]# ll nginx_1
  7. -rw-------. 1 root root 145917440 11 25 17:12 nginx_1
  8. scp nginx root@192.168.126.16:nginx
  9. '#传至另一台主机'

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

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

  1. '命令格式:'
  2. docker load < [存出文件]
  3. '例:'
  4. docker load < nginx_1
  5. docker images|grep nginx
  1. 把镜像导出到系统中
  2. docker image save 9f266d35e02c > /opt/centos_7.4.1708.tar.gz
  3. 把已经导出到系统的镜像导入到容器中
  4. docker image load -i /opt/centos_7.4.1708.tar.gz

5.删除镜像——docker rmi

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

  1. '命令格式:'
  2. docker rmi [仓库名称][:标签]
  3. docker rmi [镜像ID号]
  4. '例:'
  5. docker images|grep nginx
  6. docker rmi nginx1:nginx
  7. '#当一个镜像有多个标签时,该命令只会删除多少标签中的这个指定标签,而不会影响镜像文件'
  8. '#若该镜像只有一个标签就要注意了,再使用该命令会直接彻底删除该镜像!'
  9. docker rmi 97788821c58b
  10. '#选择参数为镜像ID号时要谨慎,必须首先确保该镜像当前没有被容器使用'
  11. '#如果该镜像已被容器使用,则需先删除所以依赖该镜像的容器,再删除该镜像'
  12. '#删除时系统会先删除指向该镜像的所有标签,然后删除镜像本身'
  13. docker images|grep nginx
  14. #批量删除:
  15. docker rmi `docker images -q` #删除所有镜像
  16. docker rmi `docker images -q | grep nginx` #删除所有Nginx的镜像

二、Docker容器操作

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

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

  1. Docker 的容器十分的轻量级,用户可以随机创建或删除
  2. 新创建的容器默认处于停止状态,即不会自行开始运行任何程序
  3. 需要开启一个进程来启动容器,该进程是容器的唯一进程,即该进程终止时,容器也会被完全终止
  4. 停止后的容器可以重启启动并保留原有的修改
  1. #查询容器
  2. docker ps -a
  3. '#可以使用该命令查看索引容器的运行状态'
  4. '#“-a”选项表示列出系统最近一次启动的容器'
  5. #创建容器
  6. docker create [选项] [镜像] [运行的程序]
  7. docker create -it nginx:latest /bin/bash #创建新容器后,会返回一个唯一的ID
  8. -i 让容器的标准输入保持打开(让一个可以交互可以进入的接口)
  9. -t 分配一个伪终端
  10. -d 后台守护进程的方式运行
  11. #启动容器(停止状态下的容器)
  12. docker start [容器的ID/名称]
  13. #停止容器
  14. docker stop 容器ID

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

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

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

  1. 检查本地是否存在指定镜像,若不存在,则会从公共仓库下载
  2. 利用镜像创建并启动一个容器
  3. 分配一个文件系统给容器,在只读的镜像层外挂载一层可读写层
  4. 从宿主机配置的网桥接口中桥接一个虚拟机至容器中
  5. 分配一个地址池中的 IP 给容器
  6. 执行用户指定的应用程序
  7. 执行完毕后容器被终止运行
  1. '例:创建容器并启动执行一条shell命令'(一次性执行)
  2. docker run centos:7 /usr/bin/bash -c ls /
  3. --
  4. docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello world;done"(持续后台运行)
  5. '#可以添加“-d”选项,可以让docker以守护进程形式在后台运行,即可以在后台持续运行该容器'
  6. '#注:该容器所运行的程序一旦结束,容器也就会被终止'
  7. docker ps -a

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

  1. 1.使用run
  2. docker run -it nginx:latest /bin/bash
  3. 2.exec(容器必须为开启状态)
  4. '命令格式:'
  5. docker exec -it [容器ID/名称] /bin/bash
  6. '例:'
  7. docker exec -it 4aa9da25318d /bin/bash
  8. '#用户可以通过所创建的终端来输入命令'

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. 1.容器导出
  2. docker export [容器ID/名称] >文件名
  3. '例:'
  4. docker export 4aa9da25318d >nginx_1
  5. ls -l nginx_1
  6. --
  7. scp nginx_1 root@192.168.126.16:nginx_1
  8. 2.容器导入(生成镜像)
  9. docker import 导出的文件名(容器) 指定镜像名称
  10. 示例:
  11. docker import nginx_1 nginx:latest
  12. cat [文件名](容器) |docker import - [生成的镜像名称][:标签]
  13. '例:'
  14. ll nginx_1
  15. cat nginx_1 |docker import - nginx_1:xjj
  16. '#导入文件nginx_1成为本地镜像'
  17. --
  18. docker images |grep nginx

4.容器的删除–docker rm

  1. #删除容器
  2. docker rm [容器ID/名称]
  3. '例:'
  4. docker rm docker rm fcd5691107cf a17b5d224f47 cf7eb18ebf28 fb95ffa44044 2ee2c9d515b3 e88f1ded4cd
  5. #强制删除容器(正在运行的up状态)
  6. docker rm -f 容器ID
  7. #批删除非up状态的rm -f : 强制删除所有
  8. docker rm `docker ps -qa`
  9. #批量删除容器(正则匹配)
  10. docker ps -a | awk ' {print "docker rm "$1}' | bash
  11. #批量删除"exit"状态( 指定状态)的容器
  12. 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

相关文章