Docker容器的简单使用
2022-03-15 16:38:02 # 开发

Docker基本原理及操作

Docker简介

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

Docker下载

https://download.docker.com/

Docker的基本使用

Docker容器信息

  • docker version #查看docker容器版本
  • docker info #查看docker容器信息
  • docker –help #查看docker容器帮助

镜像操作

  • docker images #列出本地images
  • docker images -a #列出本地iamges(含中间映像层)
  • docker images -q #只显示镜像ID
  • docker images -qa #只显示镜像ID(含中间映像层)
  • docker images –digests #显示镜像摘要信息(DIGEST列)
  • docker images –no-trunc #显示镜像完整信息
  • docker history -H redis #显示指定镜像的历史创建;参数:-H 镜像大小和日期,默认为true;–no-trunc 显示完整的提交记录;-q 仅列出提交记录ID

镜像下载

  • docker pull redis #下载Redis官方最新镜像,相当于:docker pull redis:latest
  • docker pull -a redis #下载仓库所有redis镜像
  • docker pull bitnami/redis #下载私人仓库镜像

镜像删除

  • docker rmi redis #单个镜像删除,相当于:docker rmi redis:latest
  • docker rmi -f redis #强制删除(针对镜像有运行的容器进程)
  • docker rmi -f redis tomcat nginx #多个镜像删除,不同镜像间以空格间隔
  • docker rmi -f $(docker images -q) #删除本地全部镜像

镜像构建

  • cd /docker/dockerfiile, vim mycentos #编写dockerfile
  • docker build -f /docker/dockerfile/mycentos -t mycentos:1.1 #构建docker镜像

容器操作

  • docker run -i -t –name mycentos #新建并启动容器,参数:-i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;–name 为容器指定一个名称
  • docker run -d mycentos #后台启动容器,参数:-d 已守护方式启动容器
  • docker start redis #启动一个或多个已经被停止的容器
  • docker restart redis #重启容器
  • docker top redis #列出redis容器中运行进程
  • docker logs redis #查看redis容器日志
  • docker logs -f -t –tail=20 redis #查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;–tail 仅列出最新N条容器日志
  • docker logs –since=”2022-03-15” –tail=10 redis #查看容器redis从2022年03月15日后的最新10条日志

容器的进入与退出

  • docker run -it centos /bin/bash #使用run方式在创建时进入
  • exit #关闭容器并退出
  • 快捷键:Ctrl+P+Q #仅退出容器,不关闭
  • docker attach –sig-proxy=false centos #直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:–sig-proxy=false 确保CTRL-D或CTRL-C不会关闭容器
  • docker exec -i -t centos /bin/bash #在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i 即使没有附加也保持STDIN 打开;-t 分配一个伪终端
  • docker exec -i -t centos ls -l /tmp #以交互模式在容器中执行命令,结果返回到当前终端屏幕 #以交互模式在容器中执行命令,结果返回到当前终端屏幕
  • docker exec -d centos touch cache.txt #以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端

查看容器

  • docker ps #查看正在运行的容器
  • docker ps -q #查看正在运行的容器的ID
  • docker ps -a #查看正在运行+历史运行过的容器
  • docker ps -s #显示运行容器总文件大小
  • docker ps -l #显示最近创建的容器
  • docker ps -n 3 #显示最近创建的3个容器
  • docker ps –no-trunc
  • docker inspect redis #获取redis的元信息

容器的停止与删除

  • docker stop redis #停止一个运行中的容器
  • docker kill redis #停止一个运行中的容器
  • docker rm redis #删除一个已停止的容器
  • docker rm -f redis #删除一个运行中的容器
  • docker rm -f $(docker ps -a -q) #删除多个容器
  • docker rm -v redis #-v 删除容器,并删除容器挂载的数据卷

生成镜像

  • docker commit -a=”DeepInThought” -m=”my redis” [redis容器ID] myredis:v1.1 #基于当前redis容器创建一个新的镜像;参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停

容器与主机间的数据拷贝

  • docker cp rabbitmq:/[container_path] [local_path] #将rabbitmq容器中的文件copy至本地路径
  • docker cp [local_path] rabbitmq:/[container_path]/ #将主机文件copy至rabbitmq容器
  • docker cp [local_path] rabbitmq:/[container_path] #将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)

Docker-compose的基本使用

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

常用命令

  • docker-compose 命令 –help #获得一个命令的帮助
  • docker-compose up -d nginx #构建启动nignx容器
  • docker-compose exec nginx bash #登录到nginx容器中
  • docker-compose down #此命令将会停止 up 命令所启动的容器,并移除网络
  • docker-compose ps #列出项目中目前的所有容器
  • docker-compose restart nginx #重新启动nginx容器
  • docker-compose build nginx #构建镜像
  • docker-compose build –no-cache nginx #不带缓存的构建
  • docker-compose to #查看各个服务容器内运行的进程
  • docker-compose logs -f nginx #查看nginx的实时日志
  • docker-compose images #列出 Compose 文件包含的镜像
  • docker-compose config # 验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
  • docker-compose events –json nginx #以json的形式输出nginx的docker日志
  • docker-compose pause nginx #暂停nignx容器
  • docker-compose unpause nginx #恢复ningx容器
  • docker-compose rm nginx #删除容器(删除前必须关闭容器,执行stop)
  • docker-compose stop nginx #停止nignx容器
  • docker-compose start nginx #启动nignx容器
  • docker-compose restart nginx #重启项目中的nignx容器
  • docker-compose run –no-deps –rm php-fpm php -v #在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器