目录
1、docker 是啥
1.1 docker概念
1.2 docker 和虚拟机的区别
1.3 docker 的架构
2、dockerfile 制作
3、常用的docker命令
4、一个例子
做了好久的游戏,感觉和外面的技术有点脱节,游戏公司的技术基本上都是固定的,因为生产效率第一,所以更新换代比较慢。作为一个程序不能停止学习,因为停止学习就会被社会抛弃,今天聊一下docker ,这个现在比较火的交付容器技术。还不赶紧学起来。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
换句人话说docker 就是在部署的时候屏蔽环境细节的一个环境。
docker 是更轻量级的虚拟机,就是一个软件,更节省系统资源
Docker 容器将软件以及它运行安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,这就保证了不管是在什么样的运行环境,总是能以相同的方式运行。就好像 Java 虚拟机一样,“一次编写,到处运行(Write once, run anywhere)”,而 Docker 是“一次构建,到处运行(Build once,run anywhere)
client 就是我们发送命令的地方,也是我们常操作的地方
docker host 就是我们服务器上的容器,也是app 运行的地方
registry 就是存放app 的地方,可以搭建私有的仓库,官方的Docker hub是一个用于管理公共镜像的好地方。
dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
Docker通过读取Dockerfile
中的指令自动生成映像。
Dockerfile的基本结构
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
Dockerfile文件说明
Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#
字符开头则被视为注释。可以在Docker文件中使用RUN
,CMD
,FROM
,EXPOSE
,ENV
等指令。
# 基础镜像
FROM java:8
# 默认工作空间
VOLUME /tmp
WORKDIR /opt/his
# 复制为ecard
ADD target/server-adapter-0.0.1-SNAPSHOT.jar /opt/his/server-adapter.jar
ADD run.sh /opt/his/run.sh
RUN bash -c 'touch /server-adapter.jar'
# 时钟
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#暴露端口对外
EXPOSE 9083
EXPOSE 9081
#执行 脚本
ENTRYPOINT ["bash","/opt/his/run.sh"]
docker ps 列出容器
配合 grep 使用,查出自己的app的容器id :d4f5ae7107f3
docker inspect : 获取容器/镜像的元数据,可以查看自己配置的环境变量和挂载的目录
docker top :查看容器中运行的进程信息,支持 ps 命令参数。
docker logs -f 跟踪日志输出
docker exec :在运行的容器中执行命令 docker exec -it cid bash
docker cp :用于容器与主机之间的数据拷贝 docker cp src dest
docker rm :删除一个或多个容器。 -f 强制删除一个运行中的容器 docker
docker start :启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器
docker images 来列出本地主机上的镜像
-v 挂载的只能
有几点需要注意:
host机器的目录路径必须为全路径(准确的说需要以/
或~/
开始的路径),不然docker会将其当做volume而不是volume处理
如果host机器上的目录不存在,docker会自动创建该目录
如果container中的目录不存在,docker会自动创建该目录
如果container中的目录已经有内容,那么docker会使用host上的目录将其覆盖掉
volume也是绕过container的文件系统,直接将数据写到host机器上,只是volume是被docker管理的,docker下所有的volume都在host机器上的指定目录下/var/lib/docker/volumes。
将my-volume挂载到container中的/mydata目录:
下面是一个在公司使用的启动脚本,主要做了几件事情
注入环境变量
挂载目录
暴露端口
设置文件镜像
全面。本书从并发的底层核心技术、互联网应用框架、数据处理等三部分对高并发系列技术做了系统讲解。
(2)实用。本书以实战化训练为宗旨,用详尽且经典的案例阐述了 Java大数据及高级编程中的重点、难点。书中案例由真实项目演化而来,既体现了所述知识点的精华,又屏蔽了无关技术的干扰。
(3)案例完整。案例都是以“理论讲解 环境搭建 完整代码及分析 运行截图”这种完善的结构进行讲解,考虑到了读者可能会遇到的各种问题。
京东自营购买链接:
《亿级流量Java高并发与网络编程实战》(颜群)【摘要 书评 试读】- 京东图书
当当自营购买链接:
《亿级流量Java高并发与网络编程实战》(颜群)【简介_书评_在线阅读】 - 当当图书
大家点赞关注,三天后在留言的同学中抽取送两本书
注:如果中奖了没关注则放弃