Docker 架构
镜像:一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器、一个镜像代表一个软件,如:mysql镜像、redis镜像、nginx镜像
容器:(Container)容器是用镜像创建的运行实例,他可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的可以把容器看作是一个简易版的linux环境,基于某个镜像运行一次就是生成一个程序实例 一个程序实例称之为一个容器
容器与镜像的关系类似于面向对象编程中的对象和类
仓库:集中存放镜像的地方
远程仓库:docker在世界范围维护一个唯一远程仓库
本地仓库:当前自己机器中下载镜像存储位置
Docker中心库(Web界面):https://hub.docker.com/ (搜出来带:OFFICIAL IMAGE 是官方的)
Docker配置
2.1、Docker通用下载方法(使用脚本自动安装)
- curl -fsSL get.docker.com -o get-docker.sh
- sudo sh get-docker.sh --mirror Aliyun
- systemctl enable docker
- systemctl start docker
2.2、Docker 下载镜像的加速配置
阿里云的镜像加速服务:
- 注册阿里云账号
- 登录找到管理控制台
- 在产品服务中搜索 容器服务,找到容器镜像服务
- 在打开的页面中找到镜像加速器
- sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://s5lq9k7j.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
- 使用docker info 查询
Docker 相关命令
3.1、docker run hello-world (hello-world 程序)
- docker run
- 在运行之前先在自己本地仓库中查找对应的镜像找到直接使用,找不到自动去远程仓库下载
3.2、docker 引擎以及镜像的相关操作
- 查看docker 引擎以及docker帮助命令
- docker info 用来展示docker 信息(版本、等)
- docker version 查看版本信息
- docker --help || docker 查看docker所有的帮助命令
- docker 执行命令格式:docker【options】command(具体命令)
- 查看本地仓库中存在哪些镜像
- docker images
- -a 显示所有镜像信息
- -q 只显示镜像的id
- 下载新的镜像
- docker pull (镜像名称:版本号) - 推荐使用
- docker pull tomcat:8.5.69-jdk8-corretto
- docker pull 镜像名:@DIGEST(摘要信息)
- 不通过dockerhub ,通过命令行搜索需要镜像
- docker search 镜像名
- 删除镜像
- docker image rm 镜像名:tag | 镜像id
- docker image rm -f 镜像名:tag | 镜像id 强制删除(运行中的容易也会删除)
- docker rmi -f 镜像名:tag | 镜像id
- docker rmi -f $(docker images -q) 删除所有的镜像
3.3、容器相关命令操作
- 将打包tar镜像文件导入到自己的docker仓库
- docker load -i 导入tar的镜像文件名称
- 通过镜像运行一个容器
- docker run 镜像名:tag | 镜像id
- docker run -p 8080:8080 -d 镜像名:tag | 镜像id
- -p 映射宿主机端口与容器中端口进行映射【-p 系统上外部端口: 容器内服务监听的端口】
- -d 后台启动
- docker run -d(后台运行) -p 8081:8080 (可书写多个) --name tomcat01(容器名称:要求唯一) 镜像名:tag | 镜像id
- 以tomcat 镜像为例
- docker run tomcat:8.0-jre8
- 查看当前正在运行的容器
- docker ps
- -a 正在运行的和历史运行过的容器
- -q 静默模式,只显示容器编号
- 停止|关闭|重启容器
- docker start 容器名字或容器id --- 开启容器
- docker restart 容器名字或容器id --- 重启容器
- docker stop 容器名字或容器id --- 正常停止容器
- docker kill 容器名字或容器id --- 立即停止容器
- 删除容器
- docker rm -f 容器名字或容器id
- docker rm -f $(docker ps -aq) ------ 删除所有容器
- 查看容器内进程
- docker top 容器名字或容器id --- 查看容器内进程
- 查看容器内部细节
- docker inspect 容器名字或容器id
- 查看容器的运行日志
- docker logs [options] 容器名字或容器id ---查看容器日志
- -t 加入时间戳
- -f 跟随最新的日志打印
- -n 数字 显示最后多少条 (或者--tail)
- 与容器内部进行交互
- docker exec -it 容器id或者容器名 bash ===> 进入容器,并与容器内部命令终端进行交互
- -i 以交互模式运行容器,通常与-t 一起使用
- -t 分配一个伪终端 shell 窗口 bash
- 退出容器
- exit
- 操作系统与容器的文件交互
- 从容器复制文件到操作系统
- docker cp 文件|目录 容器id:容器路径 ---> 将宿主机复制到容器内部
- docker cp 容器id:容器内资源路径 宿主机目录路径 ---> 将容器内资源拷贝到主机上
- 数据卷(volum)实现与宿主机共享目录
- docker run -v 宿主机的路径|任意别名:/容器内路径 :ro 镜像名
- 注意:
- 如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
- 如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中
- :ro 只读
- 打包镜像
- docker save 镜像名 -o 名称.tar
- 载入镜像
- docker load -i 名称.tar
- 容器打包成新的镜像
- docker commit -m "描述信息" -a “作者信息” 容器id或者名称打包的镜像名称:标签
Docker中容器之间的网络配置
4.3、为什么提供网络通信
Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。
4.2、docker容器与操作系统通信机制
4.3、Docket 网络使用
注意:一般在使用docker网桥(bridge)实现容器与容器通信时,都是站在一个应用的角度进行容器通信
- 查看docker网桥配置
- docker network ls
- 创建自定义网桥
- docker network create -d bridge ems(网桥名称) -- docker network create ems(网桥名城)
- docker run -d -p 8082:8080 --network ems --name tomcat03 tomcat:8.0-jre8
注意:一旦在启动容器时制定了网桥之后,日后可以在这个网桥关联的容器中使用容器名字进行与其他容器通信
- 删除网桥
- docker network rm 网桥名称
- 查看网桥细节
- docker inspect 网桥名称
注意:使用docker run 指定 --network 网桥时,网桥必须存在
数据卷
5.1、数据卷的作用?
用来实现容器与宿主机之间的数据共享
5.2、数据卷的特点
- 数据卷 可以在容器之间共享和重用
- 对 数据卷 的修改会立马生效
- 对 数据卷 的更新,不会影响镜像
- 数据卷 默认会一直存在,即使容器被删除
5.3、数据卷的操作
- 自定义数据卷目录
- docker run -v 绝对路径:容器内的路径
- 自动创建数据卷
- docker run -v aa(卷名,随便起的自动创建):容器内的路径
- 查看数据卷
- docker volume ls
- 创建数据卷
- docker volume create bb(卷名)
- 删除没有使用的数据卷
- docker volume prune