什么是docker
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker有什么用
我们在一台linux通常需要搭建mysql,jdk,redis等等这些基础设施来运行我们开发的程序,这时业务扩张了,我们又租了三台linux服务器,然后这些基础设施又要重新搭建一遍,看到这,我们的血压是不是已经上升了(╬▔皿▔)。但是有了Docker,我们只用在搭建完第一台服务器后,制作个镜像,后续的服务器导入之后直接就能跑起来,是不是瞬间舒畅了。ヾ(≧O≦)〃嗷~
Docker vs 传统虚拟机技术
Docker作为一项容器引擎技术面世后,可以秒级启动,吊打市面上的虚拟机技术。让开发/测试/部署一条龙服务,变得无比湿滑。
特性 | 容器 | 虚拟机 |
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
Docker基本概念
镜像:一个只读的模板,可以用来创建容器。可以使用以下命令,来操作镜像
#查看本地已安装镜像
docker images
#安装一个版本未10.3的mariadb数据库
docker pull mariadb:10.3
#删除镜像,b539af69bc01是镜像id,由docker images执行后获取
docker rmi b539af69bc01
#镜像导出,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
docker save > nginx.tar nginx:latest
#容器导出,nginx-test.tar为目标文件,nginx-test是源容器名(name),导出时用-o或者>都可以
docker export -o nginx-test.tar nginx-test
#导入容器
docker import nginx-test.tar nginx:latest
#导入镜像
docker load -i nginx.tar
或
docker load < nginx.tar
镜像仓库
用来存放镜像仓库的场所,制作完镜像后,可以推送到公共仓库(目前最大公共仓库是DockerHub),也可以利用本地网络搭建一个私人仓库,然后把自己制作的仓库往私人仓库推送,下次直接从仓库拉取加载。
容器
由镜像模板创建的运行实例,可以被启动停止删除,docker单机就可以部署上千个容器,容器之间相互独立。
#显示运行中的容器
docker ps
#显示所有容器
docker ps -a
#创建一个新的容器并运行一个命令,\符号用来linux换行, --name指定容器名,-p将容器端口与服务器真实端口做映射,-d后台运行
#其他参数执行 docker run --help查看
docker run \
--name zookeeper \
-d \
-p 2181:2181 \
zookeeper
# 开启容器xxx为容器id
docker start xxxx
#关闭容器
docker stop xxxx
#重启容器
docker restart xxxx
#删除容器
docker rm -f xxxx
#进入容器内部,比如你用docker安装了redis,需要修改配置文件,执行这个命令,然后进入容器内部修改
docker exec -it xxxx bash
Dockerfile文件
dockerfile是一个文本配置文件,用户可以用dockerfile的规范撰写dockerfile文件,然后cmd命令,使用docker build来执行它,生成镜像文件。Dockerfile指令集:
Dockerfile指令集
FROM 第一条指令必须为FROM指令,用于指定基础镜像。
MAINTAINER
指定维护者信息。
RUN
会在shell终端运行命令。
EXPOSE
格式为 EXPOSE [ ...],声明容器需要暴露的端口号。
-----------镜像启动可以通过 –P 或 -p 进行端口映射的绑定。
ENV
指定一个环境变量,可以被后续的RUN引用,并且在容器中记录该环境变量。
ADD
该命令将复制指定的到容器中的。
-------其中可以是Dockerfile所在目录的一个相对路径;也可以是tar文件(自动解压)。
VOLUME
格式为 VOLUME [path]。
--------创建一个可以从本地主机或其他容器挂载点,一般用来存放需要保持的数据。
USER
指定运行容器时的用户名,后续的RUN也会指定该用户。
WORKDIR
指定工作空间,后续命令都在此目录下执行。
CMD
ENTRYPOINT