1.Docker简介
https://www.docker.org.cn/index.html
docker 码头工人,搬运工
- docker是一个开源的软件部署解决方案;
- docker也是轻量级(和linux vm对比)的应用容器框架;
- docker可以打包、发布、运行任何的应用
2.Docker的核心概念
引动大佬的地址
镜像: images
容器: container
仓库: repository
docker 虚拟化和虚拟机对比:
Docker的安装与启动
安装前提:
centos 7 64位
centos内核版本3.10以上
查看内核版本: uname -r 或者uname -a
yum更新为最新
yum update (可选,不要更新)
安装docker依赖包:
yum-utils 提供了 yum-config-manager 实用程序,用于设置yum源。
devicemapper(内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构) 存储驱动需要 device-mapper-persistent-data 和 lvm2(Logical Volume Manager)逻辑卷管理,它是对磁盘分区进行管理的一种机制,建立在硬盘和分区之上的一个逻辑层,用来提高磁盘管理的灵活性。
yum install -y yum-utils device-mapper-persistent-data lvm2
设置镜像仓库:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo (阿里)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo (官网)
查看仓库中所有docker版本:
yum list docker-ce --showduplicates | sort -r
安装docker:
yum install -y docker-ce
Docker CE 和 Docker EE。Docker CE 即社区免费版,Docker EE 即企业版, 强调安全,但需付费使用。
启动docker:
systemctl start docker
service docker start
运行hello world :
docker run hello-world
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
错误原因:
docker默认的源为国外官方源,下载速度较慢,可改为国内,加速
Docker 官方中国区
https://registry.docker-cn.com
网易
中国科技大学
https://docker.mirrors.ustc.edu.cn
阿里云
https://pee6w651.mirror.aliyuncs.com
vim /etc/docker/daemon.json
复制下面内容:
{
"registry-mirrors":
["https://pee6w651.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}
重启docker:
service docker restart
再次运行:
docker run hello-world
1)docker客户端联系docker服务端
2) docker 服务端会从docker hub下载 hello-world镜像到本地
3)docker服务端会根据镜像创建容器
4) 会把hello from docker!以流的方式给docker客户端, 发送它到终端
3.docker常用命令
查看版本:
docker version
查看详情:
docker info
列出所有docker的用法以及所有命令:
docker --help
3.1 镜像命令
列出本地的镜像
docker images
参数:
--no-trunc:显示完整的镜像信息
-a:列出本地的所有镜像(包括不完整/损坏的镜像)
-q:只显示镜像的id
-qa:可以连用,显示所有的镜像id(包括不完整/损坏的镜像) - q -a
--digests:显示镜像的摘要信息
结果详解:
REPOSITORY # 镜像仓库
TAG # 镜像标签
IMAGE ID # 镜像ID
CREATED # 镜像创建时间
SIZE # 镜像大小
用于从 Docker Hub(https://hub.docker.com)中搜索指定的镜像
docker search spring-boot
参数:
-no-trunc:显示完整的镜像信息(description)
docker search spring --no-trunc
--limit n 限制结果多少条
docker search hello --limit 2
docker search tomcat
结果详解:
NAME # 镜像仓库
DESCRIPTION # 镜像描述信息
STARS # 镜像收藏数
OFFICIAL # 是否为docker官方发布的镜像
AUTOMATED # 是否为自动化构建的镜像
拉取镜像:
docker pull 仓库名:TAG (仓库名和标签名使用:隔开,不指定默认最新版本)
docker pull tomcat:8.5
docker pull tomcat:8.0
本地存放目录:/var/lib/docker
查看目录大小: du -sh docker
查看拉取结果:
docker images
删除镜像:
docker rmi [OPTIONS] IMAGE[IMAGE...]
-f --force=false 强制删除镜像(正在使用的也删除)
删除单个镜像
mi后跟镜像的【REPOSITORY仓库名+TAG标签名】,也可以根据ID删除:如:
docker rmi hello-world:latest
docker rmi -f hello-world:latest
再次下载运行:docker run hello-world
查看:docker images
按照镜像id删除:
docker rmi -f fce289e99eb9
删除相同镜像名称的多TAG镜像
如果我们需要删除相同iamgeName,但TAG的不同的多个镜像,只需在rmi后直接跟这些镜像的iamgeName即可:
docker rmi tomcat
这样就可以删除所有该名称的镜像。
删除批量镜像
rmi命令并没有删除批量镜像的命令,但是我们可以在“$()”包裹查询表达式,通过表达式的结果来批量删除镜像。
这里我们需要利用刚才使用的“通过镜像名搜索相关的镜像”(docker images 镜像名)指令来删除相关信息:
docker rmi -f $(docker images -q tomcat)
使用“-q”意味着只返回镜像的ID,所以上面的指令会删除所有仓库名为“centos”的镜像
删除所有镜像:
docker rmi -f $(docker images -qa)
3.2 容器命令
运行容器
使用命令:docker run --name container-name -d image-name:tag名字
--name:自定义容器名,不指定时,docker 会自动生成一个名称
-d:表示后台运行容器(以守护进程方式运行-d =deamonize)
image-name:指定运行的镜像名称以及 Tag
实例:
显示所有镜像:docker images
运行tomcat容器:docker run --name myTomcat -d tomcat:8.5
查看容器
docker ps
-a:显示所有的容器信息(包含已经停止和正在运行中的所有容器)
-q:显示容器的id
-qa:显示所有容器的id(包含已经停止和正在运行中的所有容器)
-l:显示最近所创建过的一个容器
-n:显示最近所创建过的n个容器
docker ps -n 1
结果详解:
CONTAINER ID:容器 di
IMAGE:镜像名称:Tag
COMMAND:命令
CREATES:容器创建的时刻
STATUS:容器当前的状态 (up 表示运行、Exited 表示停止运行)
PORTS:镜像程序使用的端口号
停止容器
使用 docker stop container-name/container-id 命令进行停止容器运行,指定容器名或者容器 id 即可
docker stop 301888fe8c05
docker stop myTomcat
启动容器
使用 docker start container-name/container-id 命令启动停止运行的容器,同理可以根据 容器名或者 容器 id 进行启动
docker start 301888fe8c05
docker start myTomcat
登录容器
使用 docker exec -it CONTAINER_ID bash 命令登录容器
exec: Run a command in a running container(在运行的容器中运行命令)
exec -i: --interactive(相互作用的) Keep STDIN open even if not attached(即使没有连接,也要保持STDIN打开)
exec -t: --tty Allocate a pseudo-TTY(分配一个 冒充的终端设备)
docker exec -it 461227b45db1 bash
退出:exit
删除容器
使用 docker rm container-id 命令 删除容器,删除容器前,必须先停止容器运行,根据 容器 id 进行删除(rm 参数是删除容器,rmi 参数是删除镜像)
docker rm 301888fe8c05
端口映射
使用命令:docker run --name container-name -d -p 服务器端口:Docker 端口 image-name
--name:自定义容器名,不指定时,docker 会自动生成一个名称
-d:表示后台运行容器
image-name:指定运行的镜像名称以及 Tag
-p 表示进行服务器与 Docker 容器的端口映射,默认情况下容器中镜像占用的端口是 Docker 容器中的端口与外界是隔绝的,必须进行端口映射才能访问
docker run --name myTomcat -d -p 8090:8080 tomcat:8.5
8.5无法正常访问,使用8.0
docker pull tomcat:8.0 拉取镜像
docker run --name tomcat8 -d -p 8090:8080 tomcat:8.0 使用镜像创建容器
docker ps 查看进程
docker start tomcat8 启动容器
访问:
http://ip:8090/
容器日志
使用 docker logs container-name/container-id 命令 可以查看容器日志信息,指定容器名或者 容器 id 即可
docker logs tt80
docker logs a9319038cac2
docker ps -a
docker start myTomcat
docker logs myTomcat