1、什么是docker:
一种轻量级、可移植、自包含的软件打包技术,将环境与应用程序一起打包,可部署到不同地方以相同的方式运行。
2、docker一些重要定义
镜像(image):类似于虚拟机中的镜像,是一个包含有文件系统的面向docker引擎的只读模板。任何应用程序运行都需要环境一个Ubuntu镜像就是一个包含Ubuntu操作系统的模板,同理,载镜像中安装Apache软件,即可称为Apache镜像。
容器(container):类似于一个轻量级沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、停止、删除容器、各个容器间相互隔离,互不影响。注意:镜像本身是可读的,容器镜像启动时,docker镜像载上层创建一个可写层,镜像本身不变。
远程仓库(Repositorty):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注册服务器(Registry)是存放仓库的地方,一般会有多个仓库,仓库是存放镜像的地方,每个镜像根据tag进行区分。
3、常用的Docker命令:
# docker search centos //从配置的远程仓库中查找指定镜像
# docker pull centos //拉取镜像,未指定tag 则默认拉取lasted
# docker images //获取当前系统中的镜像信息
# docker rmi centos //删除镜像
3.1 执行镜像
# docker run [可选参数] image
# docker ps //查看运行中的容器
可选参数:
-- name = "Name": 容器名称,可根据同一镜像生成多个容器
-e : 指定环境变量
-d :后台守护进程运行
-it : 以交互方式运行 进入容器中一个命令执行窗口
-p :指定容器端口
格式1:-p :主机端口:容器端口 生成映射关系
格式2:-p: 容器端口
-P : 随机指定端口
-v : 格式: 容器中位置:宿主机中存放位置,
3.2 容器启动与停止:
# docker start 容器 //启动容器
#docker restart 容器 // 重启容器
# docker stop 容器 //停止容器
# docker kill 容器 //强制杀死容器
3.3 容器中文件拷贝
# docker cp 容器id : 容器内文件路径 宿主机文件路径
3.4 查看容器日志
docker log -ft -- tial 10 容器id
-f :格式化日志
-t :携带日志时间戳
4、 Dockerfile
4.1 docker file 保留关键字:
-
FROM : 基础镜像
-
MAINTAINER : 作者名字
-
RUN : 构建镜像的命令
-
ADD:生成镜像需要添加的文件
-
WORKDIR : 镜像工作目录
-
VOLUME: 挂载目录
-
EXPOSE : 暴露的端口
-
CMD : 容器启动时执行的命令
-
ENTRYPOINT : 启动容器时执行的命令(追加)
-
ONBUILD: 当前镜像被继承时执行的命令
-
ENV : 构建时需要输入的环境变量
# docker build -f dockerfile路径 -t 生成镜像名称 .
5、Docker 自定义网络
# docker network ls//查看网络模式
5.1、网络模式
-
bridge : 桥接模式
-
host :与宿主机使用相同网络模式
-
none :不配置网络
-
container:容器网络
5.2、自定义网络格式
# docker network create [可选项] 自定义网络名称
--driver : 网络模式
--subnet : 子网掩码
--gateway :网关
实践:
查看镜像:
docker images
查看容器:
docker ps
docker ps -a
进入容器:
docker exec -it 容器id /bin/bash
启动容器 :
docker run --name 容器名 -d -p 外部端口:容器端口 --restart=always -v 文件挂载 镜像:版本
--name: 命名容器
-d 守护进程
-v 文件挂载
-p 端口映射
--restar :重启
docker 打包:
docker build -f dockerfile文件 -t 镜像:版本 ./
最后有个点 ( . ) 或者 ( ./ ) d
6、总结
Docker 是基于容器的平台,允许高可移植的负载,完成动态工作管理。借助docker技术 我们可以快速构建出一个与生产环境相同的方式管理项目架构,通过docker 完成快速交付、测试、部署代码。减少代码在生产环境和编写代码过程中出现不同的问题。且相当于传统的虚拟机管理程序,更加便捷,经济、高效。