Docker快速上手
Docker快速上手
感谢b站视频教程,以下为文字梳理版。
Docker 简介
what is it?
Docker是一个用于构建(build)、运行(run)、传送(share) 应用程序的平台。
why we need it?
简化环境配置,相同的环境不用多次配置。例如前端Vue、后端SpringBoot、数据库MySQL的一个项目,你需要安装NodeJS环境、安装各种npm依赖、安装Java运行时环境、安装各种第三方依赖(maven)、安装MySQL数据库、Vue环境配置+启动脚本、安装配置Redis、安装配置Nginx……等
而这样的操作不仅开发环境需要配置一遍、生产环境、测试环境都要配置一遍。而Docker就是将这些环境打包好后,之后都可以使用。
Docker vs 虚拟机
虚拟机:
Docker:
Docker与虚拟机不同,每个容器共用一个操作系统,因此启动速度更快、更加轻量。
Docker 基本原理和概念
- 镜像:镜像是一个可读的模板,它可以用来创建容器。
- 容器:容器是Docker的运行实例,它提供了一个可移植的环境,可以在这个环境中运行应用程序。
镜像和容器的关系就像Java中类和实例的关系。
- 仓库:Docker是用来存储Docker镜像的地方,最流行的仓库为Dockerhub,在这里可以分享或下载镜像。
Docker 安装配置
官网下载,windows平台注意开启wsl相关配置。
容器化 和 Dockerfile
容器化:
- 创建一个Dockerfile
- 使用Dockerfile构建镜像
- 使用镜像创建和运行容器
Dockerfile:
Dockerfile是一个文本文件,里面包含了一条条的指令,用来告诉Docker如何来构建镜像,这个镜像中包含了应用程序执行的所有命令——即各种依赖、配置环境和运行应用程序所需要的所有内容(精简版的操作系统、应用程序的运行时环境、应用程序、应用程序的第三方依赖库或者包、应用程序的配置文件环境变量等等)。一般我们会在项目的根目录下创建一个叫Dockerfile的文件。
一般想要运行一个项目,拿到Dockerfile文件->docker build -> docker run [镜像] 运行即可。(重点是拿到镜像)
Docker 命令查询手册
注意子序列为例子e.g.
服务管理
具体Linux版本有关(不一定通用)
- docker version 查看docker版本详细信息
- docker -v 查看docker简要信息
- systemctl start docker 启动docker
- ststemctl stop docker 关闭docker
- systemctl enable docker 设置开启启动
- service docker restart 重启docker服务
- service docker stop 关闭docker服务
镜像管理
- docker image ls 或 docker images 查看镜像
- docker search [image] 检索镜像
- docker search nginx
- docker pull [image] 拉取镜像
- docker push [image] 上传镜像
- docker push muxueavid/hello-docker:latest
- docker save [image] -o FILE 或 docker save [image] > FILE 保存镜像
- docker save muxueavid/hello-docker:latest > hello-docker.tar
- docker load -i FILE 导入镜像
- docker load -i hello-docker.tar
- docker history [image] 查看镜像历史
- docker rmi [image] 或 docker image rm [image] 删除镜像
- docker image prune 删除不再使⽤的镜像
- docker import [URL/FILE] 将⽂件系统导⼊为镜像
- docker commit [container] [image] 从容器创建镜像
容器管理
- docker create [image] 创建容器(仅创建,不运⾏)
- docker run [image] 创建并运⾏容器
- docker start [container] 启动容器
- docker stop [container] 停⽌容器
- docker restart [container] 重启容器
- docker ps 或 docker container ls 列出正在运⾏的容器
- docker ps -a 或 docker container ls -a 列出所有容器
- docker exec -it [container] bash 或 docker attach [container] 以交互模式进⼊容器
- docker export [container] -o FILE 或 docker export [container] > FILE 导出容器
- docker import FILE 导⼊容器快照
- docker logs [container] 查看容器⽇志
- docker rm [container] 或 docker container rm [container] 删除容器
- docker port [container] 查看容器端⼝映射
- docker top [container] 显示容器内进程
- docker cp [FILE] [container]:[PATH] 复制本地⽂件到容器内的指定路径
- docker diff [container] 显示容器内的变化
- docker stats [container] 显示容器资源使⽤情况
容器运行
语法格式:docker run [options] image [command] [arg…]
- docker run --name [name] [image] 创建 运⾏并命名容器
- docker run -d [image] 创建⼀个容器并后台运⾏
- docker run -p [hostPort]:[containerPort] [image] 创建⼀个容器并指定端⼝映射
- docker run -P [image] 创建⼀个容器并指定端⼝映射(随机分配)
- docker run -e [key=value] [image] 创建⼀个容器并指定环境变量
- docker run -w [PATH] [image] 创建⼀个容器并指定⼯作⽬录
- docker run -name [name] [image] 创建⼀个容器并指定容器名称
- docker run [image] [command] 创建⼀个容器并在容器中执⾏命令(交互模式)
- docker run -d -p [hostPort]:[containerPort] -e [key=value] -w [PATH] --name [name] [image] 创建⼀个容器,并指定容器名称、后台运⾏、端⼝映射、环境变量和⼯作⽬录
- docker run -it nginx:latest /bin/bash 使⽤镜像nginx:latest来启动⼀个容器,并在容器内执⾏交互式bash shell
- docker run -it -p 3316:3306 -v /data:/data -d mysql:latest 创建⼀个mysql容器,后台模式启动,主机3316端⼝映射到容器3306端⼝,主机/data⽬录映射到容器/data⽬录
网络管理
- docker network ls 列出可⽤⽹络
- docker network inspect [network] 查看⽹络详细信息
- docker network create [network] 创建⼀个新的⽹络
- docker network rm [network] 删除⼀个⽹络
- docker network connect [network] [container] 将容器连接到⽹络
- docker network disconnect [network] [container] 将容器从⽹络断开
数据卷管理
- docker volume create [volume] 创建⼀个数据
- docker volume ls 查看数据卷
- docker volume inspect [volume] 查看数据卷详细信息
- docker volume rm [volume] 删除数据卷
- docker volume prune 删除所有未使⽤的数据卷
插件管理
- docker plugin ls 列出插件
- docker plugin install [plugin] 安装插件
- docker plugin enable [plugin] 启⽤插件
- docker plugin disable [plugin] 禁⽤插件
- docker plugin rm [plugin] 卸载插件
日常操作
- docker info 查看系统信息
- docker version 查看版本
- docker --help 查看帮助文档
- docker [command] --help 查看命令帮助
- docker login 登陆
- docker logout 退出
常用Dockerfile指令
- FROM [base_image] 指定基础镜像,必须为Dockerfile的第一条指令
- ADD 用于将文件赋值到镜像中,源可以试URL或者本地文件,也可以是一个压缩文件(自动解压)
- COPY [–chown=
: ] [源路径] [⽬标路径] 用于将文件拷贝到镜像中,源只能是本地文件 - WORKDIR [PATH] 用于指定工作目录,可以使用多个WORKDIR指令,如果使用相对路径,则是相对于上一条WORKDIR指令所指定的目录
- ENV
或 ENV = = … 用于设置环境变量 - CMD <命令> 或 CMD [“可执行文件”,“参数1”,“参数2”,…] 用于指定默认的容器主进程,每个Dockerfile中只能有一条CMD指令,如果有多条,则只有最后一条会生效
- VOLUME <路径> 或 VOLUME [“路径1”,“路径2”,…] 用于定义匿名卷(持久化目录)





