入门
什么是Docker
docker是一个容器技术。
Docker的优势
- 一致的运行环境, 更轻松的迁移。
- 对进程进行封装隔离,容器与容器之间互不影响,更高效的利用系统资源。
- 通过镜像复制多个环境一致的容器。
Docker与虚拟机的对比
- Docker占用磁盘少
- Docker的引擎比虚拟机系统占用CPU资源低
- Docker启动速度快
- Docker安装管理方便
- Docker从第二次部署开始轻松简捷
- Docker可以每个应用使用一个服务,服务隔离
- Docker推荐使用Linux,不推荐使用Windows
安装及配置
- 下载安装
- 配置
- 启动Docker
- 创建Docker用户组
- 将当前用户添加到docker组
- 测试Docker是否安装正确
- 重启Docker
Docker核心概念
整体架构图
仓库 Repository
- 定义: 用来存储Docker中的镜像。
- 分类:
- 远程仓库
- 本地仓库: 当前自己机器中下载镜像存储位置。
镜像 Image
- 定义: 一个镜像代表一个软件安装包。
- 特点: 只读
容器 Container
- 定义: 基于某个镜像启动的实例,称之为一个服务。
- 特定: 可读可写
常用命令
引擎, 以及镜像相关的操作
- docker info
- docker –help || docker 查看docker所有帮助命令
- docker version
- docker 执行命令格式: docker [options] command
操作镜像images的相关命令
- 查看本地的镜像 docker images
- 下载新的镜像 docker pull dockerImageName:dockerVersion docker pull dockerImageName:@digest(摘要)
- 搜索镜像 docker search dockerImageName
- 删除镜像 docker image rm dockerImageName:dockerVersion docker image rm dockerImageId docker rmi …
容器相关 Container
- 运行容器
docker run dockerImageName:tag | 镜像ID
- 映射端口 docker run -p 宿主机端口:容器内服务端口 dockerImageName
- 后台运行 -d
- 给容器命名,唯一 –name containerName
- -it
- 导入容器 docker load -i dockerTag.tar
- 查看当前运行的容器
docker ps
- 查看所有的容器,包括已停止的 docker ps -a
- 返回正在运行的容器ID docker ps -q
- 重启,停止容器 docker start dockerContainerId | dockerName docker restart dockerContainerid | dockerName docker stop dockerCOntainerid | dockerName
- 删除容器
docker rm dockerContainerId | dockerName
- 强制删除, 包括正在运行的容器 docker rm -f dockerContainerid | dockerName
- 查看容器内运行日志
docker log dockerContainerid | dockerName
- 实时查看日志 -f
- 加入时间戳实时展示日志 -t
- 显示指定行数的日志 –tail Number
- 查看容器内的进程 docker top dockerContainerid | dockerName
- 与容器内部进行交互 docker exec -it dockerCOntainerid | dockerName Command [args]
- 宿主与容器的传输文件
- 从容器到操作系统 docker cp dockerContainerid | dockerName :/path/file ./file
- 从宿主到容器 docker cp 文件 | 目录 dockerContainerid | dockerName: 容器内目录
- 查看容器内部细节 docker inspect dockerContainerid | dockerName
- 数据卷 Volume
- 使用: 实现襥机系统与容器之间的文件共享
- 特点:
- 数据卷可以在容器之间共享和重用。
- 对数据卷的修改会立即影响到对应容器。
- 对数据卷的更新修改,不会影响镜像。
- 数据卷默认会一直存在, 即使容器被删除。
- 使用
- 自定义数据卷 docker run -v 宿主机目录:容器目录:ro dockerImageId
- 自动创建数据卷 docker run -v 卷名:容器内路径 dockerImageId
- 查看卷 docker volume inspect volumeName docker volume ls
- 将正在运行的容器打包成镜像 docker commit -m ’’ -a ’’ dockerContainerid dockerImageName:dockerTag
- 将镜像备份 docker save 镜像名称:tag -o dockerBak-tag.tar
网络配置
-
docker容器与操作系统通信机制默认使用网桥
-
docker网络使用注意: 一般在使用docker网桥实现容器与容器通信时,都是站在一个应用角度进行容器通信。
- 查看默认网桥配置 docker network ls
- 创建自定义网桥 docker network create brightName
- 删除网桥 docker network rm brightName
- 查看网桥信息 docker inspect brightName
- 删除无用的网络
docker network prune
- 给一个窗口添加一个网络
docker network connect bridge_name container_name
- 给一个容器删除一个网络
docker network disconnect bridge_name container_name
-
网络相关
-
网络模式, 使用–network指定
- bridge 默认配置,隔离的网络配置
- host 与宿主机使用同一个网络环境, 不需要做网络转发,不过会占用宿主机的资源,比如端口。 –network host
- none 无网络配置
- container 与指定容器使用同一个网络环境,但是文件系统还是隔离的。不过目前docker文档里没有对应的配置,有可能会在以后的更新中取消。 –network container:container_name
-
Dockerfile
定义
用来帮助我们自己构建一个自定义镜像, Dockerfile成为镜像构建文件
核心作用
用户可以将自己应用打包成镜像,这样就可以让我们应用进行容器运行。
原理
- Tips
- 第一行Dockerfile都会构建成一个镜像,可以使用–no-cache禁用缓存。
- dockerfile所在的目录为docker的上下文目录,可以添加.dockerignore文件忽略文件
Dockerfile的相关命令
官方文档: https://docs.docker.com/engine/reference/builder/
-
FROME
指当前镜像是基于的哪个镜像, 必须为Dockerfile的第行。
-
RUN
构建镜像时需要运行的指令
-
EXPOSE
当前容器对外暴露的端口号只要暴露了端口才可能在运行时使用-p命令映射。
-
WORKDIR
指定在创建容器后, 终端默认登录进来的工作目录可以是绝对目录也可是相对目录,如果指定的目录不存在,那么会自动创建。
-
ENV
用来在构建镜像过程中设置环境变量, 在容器构建了使用时都可以使用
-
ARG
在构建镜像过程中设置环境变量,在容器构建完成后消失。
-
ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
-
COPY
类似于ADD, 拷贝文件和目录到镜像中
-
VOLUME
容器数据卷, 用于数据保存和持久化工作
-
CMD
指定一个容器启动时要运行的命令, Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
-
ENTRYPOINT
指定一个容器启动时要运行的命令, ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。如果想覆盖ENTRYPOINT,必须显示指定–entrypoint=Command 如果使用ENTRYPOINT会将docker run -I后的命令变成参数传递给ENTRYPOINT
Docker-Compose
常用命令
version
版本
networks (top Level)
-
eg.
-
参数说明
- bjvm2_nacos 网络名称
- driver 连接方式
services
服务列表
image
使用哪个镜像的镜像名称, imageName:tag
container_name
容器名称,相当于docker run 的–name
ports
用来完成host与容器的端口映射关系数组。
volumes
用来指定宿主机与容器的目录数据的共享, 只能使用绝对路径或者自定义卷。相当于docker run的 -v 自定义卷使用前必须定义.
networks
代表当前服务使用哪个网络桥。使用前必须定义
cmd
用来覆盖容器的默认启动命令。
environment
用来指定容器启动时环境参数数组。
env_file
用来将environment的环境变量放入文件中, 使用相对路径。文件中使用key=value的形式,支持#开头的注释内容。
depends_on
指定容器的启动依赖,为容器ID的数组。代表为指定容器启动后才会启动。
build
用来指定Dockerfile所在目录,先根据build中的dockerfile自动构建镜像,自动运行容器。
命令行命令
up
docker-compose up [options] [service…] 用来启动所有docker-compose服务。默认前台启动,通过Ctrl-c会停止容器,
- -d选项
down
用来关闭所有docker-compose服务
exec
进入容器 docker-compose exec docker-compose.yml中声明服务的ID /bash(命令)
ps
用来展示当前docker-compose运行的所有容器
restart
用来重启项目服务中的某个容器 docker-compose restart [options] [service …]
rm
删除容器
start
启动服务 docker-compose start 服务ID
stop
关闭服务
top
展示容器内部的进程