docker是一个开源的应用容器引擎,基于go语言,一次构建,随处运行
为什么使用docker?
1:docker容器启动是秒级别,相比传统的虚拟机要快得多
2:docker对系统资源的利用率很高,一台主机上可以同时运行数千个docker容器
3:docker只需要将应用隔离开,传统的虚拟机需要创建多个虚拟机操作系统,docker只一个系统
4:docker可以更快速的交付和部署,大量的节约开发、测试、部署的时间,对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行
5:更轻松的迁移和扩展
docker最新版本20
docker ce社区免费版
docker ee 企业版
从容器内退出到自己服务器中:
直接退出:exit,未添加-d时,容器会被关闭
优雅退出:Ctrl + p + q ,加不加-d,容器都不会被关闭
docker解决了什么问题?
解决 运行环境和配置问题 ,方便做 持续集成 并有助于整体发布的 容器虚拟化技术
虚拟机缺点:
资源占用多,冗余步骤多,启动慢
docker和虚拟机的区别:
1:虚拟机是 模拟全套硬件,并在其上运行一个完整的操作系统
2:容器内的 应用是直接运行在宿主机(也就是本地,物理机),容器没有自己的内核和硬件,比虚拟机更轻便
3:每个容器之间相互隔离,有自己的文件系统,互不影响,能区分计算资源
docker三要素:镜像,容器,仓库
镜像是模版,镜像只读,镜像是分层的
容器是镜像的实例,可读,可写
docker命令
帮助命令:
docker info:详细信息
docker version:版本信息
docker --help:帮助命令
镜像命令:
docker images:列出本地主机上的镜像列表
docker search 镜像名称:查询镜像(在官网上查询)
docker search -s 20 镜像名称:查询镜像收藏数大于等于20的镜像
docker pull 镜像名称:拉取镜像
docker rmi 镜像名称:删除镜像(正在运行的镜像,需要强制删除)
docker rmi -f 镜像名称:强制删除
docker rmi -f 镜像名称1 镜像名称2:删除多个镜像
docker rmi -f $(docker images -qa):删除全部镜像
容器命令:
docker run -it 容器名称:创建并运行容器
参数:
--name=”容器新名称”:为容器指定一个名称
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P:随机端口映射
-p:指定端口映射
ip:hostPort:containerPort
ip::containePort
hostPort:containerPort
containerPort
exit:退出并关闭容器
control+p+q:退出但不关闭容器(回到宿主机)
docker start 容器ID:启动容器
docker restart 容器ID:重启容器
docker stop 容器ID:停止容器(平滑停止)
docker kill 容器ID:强制关闭容器
docker rm 容器ID:删除已停止的容器
docker rm -f 容器ID:强制删除容器
docker ps:列出所有正在运行的容器
参数:
-a:列出当前所有正在运行的容器+历史上运行过的容器
-l:显示最近创建的容器
-n:限制最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:不截断输出
docker run -d 容器ID:后台启动容器(ps查不到 );启动守护式容器
docker logs -f -t -tail 容器ID:查看容器日志
参数:
-t:是加入时间戳
-f:跟随最新的日志打印
--tail 数字:显示最后几条
查看容器内运行的进程:
docker top 容器ID
查看容器内部细节:docker inspect 容器ID
进入正在运行的容器并以命令行交互:
docker attach 容器ID:直接进入容器终端,不会启动新的进程
docker exec -it 容器ID ls -l /tmp:在容器中打开新的终端,并且启动新的进程,不进入容器
docker exec -it 容器ID /bin/bash :在容器中打开新的终端,并且可以启动新的进程,进入容器
从容器内拷贝文件到主机上:
docker cp 容器ID:容器内路径 目的主机路径
docker commit -m=”提交描述” -a=”作者”:提交容器副本使之成为一个新的镜像
docker run -it -p 主机端口:容器内端口 容器ID:指定映射端口
容器数据卷:容器数据持久化+数据共享
数据卷:容器停止退出后,主机修改的数据仍然同步
启动容器,并添加容器卷:docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
启动容器,并添加只读容器卷:docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
–volumes-from:容器间传递共享,前面的继承后面的
子与子之间共享,子与父之间共享,父与子之间共享,删除父,子与子仍然共享
docker run -it 容器2 --volumes-from 容器1 容器ID:容器2继承容器1
dockerFile
dockerFile:是用来创建docker镜像的脚本文件,由一系列命令和参数构成
构建三步骤:
1:手动编写一个dockerFile文件,
2:有这个文件后,直接docker build命令执行,获得一个自定义镜像
3:docker run启动这个容器
dockerFile文件内容:
FROM 基础镜像
VOLUME [数据卷名]
CMD /bin/bash
dockerFile保留字指令:
FROM:from;基础镜像,当前要创建的镜像基于哪个镜像
MAINTAINER:maintainer;镜像维护者的姓名和邮箱地址
RUN:run;容器构建时需要运行的命令
EXPOSE:expose;容器对外暴露的端口号
WORKDIR:workdir;终端默认登陆时,进入的工作目录
ENV:env;设置环境变量
ADD:add;拷贝并解压压缩包
COPY:copy;拷贝压缩包
VOLUME:volume;容器数据表
CMD:cmd;指定一个容器启动时要运行的命令,如果有多个,只执行最后一个,且会被docker run之后的参数替换
ENTRYPOINT:entrypoint;指定一个容器启动时要运行的命令,将docker run之后的参数追加到原有命令中
ONBUILD:onbuild;父镜像在被子继承后父镜像的onbuild会被触发
base镜像:scratch镜像,所有镜像的基础镜像
默认的centos镜像:不支持vim,不支持ifconfig,默认工作目录是根目录
自定义新镜像:
docker build -f dockerfile -t 新的镜像名:版本号 .:新建一个新的镜像
进入一个正在运行的容器:
docker attach 容器ID:
docker exec -it 容器ID
docker在工作中的使用流程
1:在本地电脑上安装docker
2:在docker中拉取一个公司提供的镜像(包含:开发环境,相关扩展,git等)
3:构建容器,配置容器卷(项目代码存放目录),配置端口映射(内外部端口映射)
4:使用git拉取代码到容器(项目代码存放目录)
5:配置容器内部网站域名,端口
6:项目代码连接数据库,三方类库等
7:本地浏览器通过配置域名+映射端口号访问项目
8:本地编辑器编写代码,容器内部代码自动同步,在容器内使用git拉取或提交代码