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下载
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 执行完成后删除容器