docker基础
概念:docker是一个开源的应用容器引擎。
系统发展趋势:实体->虚机->容器
实体机:[应用代码+依赖库+kernel+硬件]
虚拟机:[应用代码+依赖库+kernel] + [硬件+虚拟化]
容器:[应用代码+依赖库] + [kernel+容器引擎] + [硬件]
[应用代码+依赖库] 即 镜像。镜像经过某些处理后,即成为容器。
镜像:
Dockerfile:
说明:用于生成docker的image的配置文本文件。http://www.dockerinfo.net/dockerfile介绍
举例:
# 基于已有的docker image来生成镜像。
FROM tomcat:7.0
# 对已有的docker image镜像进行修改。
ADD myDeploy.sh /
# 容器启动后执行的命令。
ENTRYPOINT sh myDeploy.sh
镜像操作命令:
docker -v # 查看docker版本
docker images
说明:查看所有的镜像。
docker pull
说明:从远程仓库(registry)下载镜像。
举例:docker pull xxx https://hub.docker.com
docker rmi
说明:删除镜像
格式:docker rmi 镜像id 或 docker rmi 镜像名:tag
docker save / docker load
概念:导出镜像 / 导入镜像
说明:当需要把一台机器上的镜像迁移到另一台机器的时候,我们就需要用到save和load命令。
导出格式:docker save 镜像名:tag > xxx.tar.gz
导入格式:docker load < 导出的镜像文件压缩包
举例:
docker save mysql:5.6 > /data/docker/images/mysql56.tar.gz
docker load < /data/docker/images/mysql56.tar.gz
docker build
概念:创建镜像
格式:docker build 参数 镜像名:tag .
参数:
-t 指定镜像名和tag
. 表示使用当前目录下的Dockerfile文件。注:Dockerfile文件 和 dockerfile文件都可以。
举例:docker build -t jxntomcat:2.0 .
docker常用命令:
docker run
格式:docker run 参数 镜像名:tag [COMMAND] [ARG...]
参数:
--help 查看命令的帮助文档
-e 设置环境变量
-d 后台运行
-i 打开STDIN,用于控制台交互
-p, --publish=[] 指定容器暴露的端口(Publish a container's port(s) to the host),格式:Host端口:容器端口
注意:-p, --publish=[]中的[]表示该参数可以出现多次
举例:暴露多个接口:docker run -itd --name 容器名称 -p 主机端口1:容器端口1 -p 主机端口2:容器端口2 镜像名:tag
-t 分配一个虚拟终端(pty)。补充:tty(终端设备的统称)、pty(pseudo-tty虚拟终端)
-v 容器内目录与宿主机目录共享,格式:Host路径:容器路径
--name 设置容器名称
--restart=always 被终止后会自动重启
--link
举例:docker run -itd --name 容器名称 -p 主机端口:容器端口 镜像名:tag # 注:tag为latest时可省略
说明:验证容器是否正常启动:curl 127.0.0.1:主机端口
docker stop
举例:
docker stop 容器id或容器名称
docker kill 容器id
docker rm
参数:
-f 强行删除容器
举例:
docker rm -f 容器名称
docker ps
参数:
-a 显示所有的容器,包括未运行的容器。
结果:
CONTAINER ID 容器id
IMAGE 镜像名:tag
COMMAND
CREATED 创建时间
STATUS 容器的状态
PORTS 容器暴露的端口
NAMES 容器的名称
docker exec
说明:在运行的容器中执行命令
格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
参数:
举例:
# 查看docker中正在运行的某个容器下的目录结构
docker exec -it 容器id /bin/bash
docker cp
说明:用于容器与主机之间的数据拷贝
举例:
docker cp 主机目录 容器名称:容器目录
docker cp 容器名称:容器目录 主机目录
docker logs
说明:查看容器的日志
格式:docker logs [OPTIONS] CONTAINER
参数:
-f, --follow 跟踪实时日志
-t, --timestamps 显示时间戳
--since string 显示自某个timestamp之后的日志,或相对时间(eg:30m)
--until string 显示自某个timestamp之前的日志,或相对时间(eg:30m)
--tail string 从日志末尾显示多少行日志, 默认是all
举例:
# 查看指定时间之后的日志,只显示最后50行
docker logs -f -t --since="2019-01-01" --tail=50 容器名称
# 查看最近30分钟的日志
docker logs --since 30m 容器名称
# 查看某时间段日志
docker logs -t --since="2019-01-01T17:27:37" --until "2019-01-01T19:27:37" 容器名称
docker start
docker stop
docker数据存储方式:
默认容器的数据是保存在容器的可读写层,当容器被删除时其上的数据将会丢失,所以为了实现数据的持久性则需要选择一种数据持久技术来保存数据,当前有以下几种方式
Volumes
Bind mounts