一、前言
Docker容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了Docker引擎的服务器上(包括流行的Linux机器、Windows机器),也可以实现虚拟化。以下是Docker容器的特点:
- 沙箱机制:容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app)。
- 性能开销小:几乎没有性能开销,可以很容易地在机器和数据中心中运行。
- 语言、框架、系统无关:最重要的是,容器不依赖于任何语言、框架包括系统。所以,需要通过设计和部署把这些服务拆分成为它们自己的容器。
- 扩展性:如果一个应用程序能够被拆分成为越多的分布式组件,那么应用程序扩展的选择则越多。
- 配置管理:企业用户可以把这些配置部署在容器中或使用环境变量。为了积极主动地关注基于容器的应用程序的运行状况,可考虑实施必要的监控和管理机制,确保打开日志记录功能。
- 命令行工具和API:Docker提供了一个命令行工具Docker以及一整套RESTful API。
- 架构:Docker采用C/S架构,Docker daemon作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。客户端和服务端既可以运行在一个机器上,也可通过socket或者RESTful API来进行通信
二、nginx docker run 命令详解
docker run -d \--name nginx \--net=host \-v /home/docker/apps/nginx/www:/usr/share/nginx/html \-v /home/docker/apps/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \-v /home/docker/apps/nginx/logs:/var/log/nginx \-v /home/docker/apps/nginx/conf.d:/etc/nginx/conf.d \-v /home/docker/apps/nginx/cert:/etc/nginx/cert \nginx
-d: 在后台以守护进程模式运行容器。
--name nginx: 为容器指定一个名称,可以进行自定义名称。
-v /home/docker/apps/nginx/www:/usr/share/nginx/html \: 将主机上的 NGINX 配置文件目录挂载到容器中的usr/share/nginx/html目录,以便使用自定义的 NGINX 配置。
所以在nginx location中只需要指向容器的路径,实际访问的就是主机的路径,他们是个映射关系,或者说是个代理关系
如:配合的是 /usr/share/nginx/html/member-plat 实际主机上 /home/docker/apps/nginx/wwwmember-plat
#静态资源location /icon/ {root /usr/share/nginx/html/member-plat;try_files $uri $uri/ /index.html;}
docker run --name eureka_docker -d -p 8861:8861 eureka_host
docker run --name eureka_docker -d -p 8861:8861 eureka_host
所以这一段的意思是 运行主机上的 eureka_host 在容器中叫 eureka_docker 主机的 8861 映射 容器的 8861 ,通过主机的8861 实际访问的就是容器的 8861
三、DockerFile的使用
Dockerfile是一个用来构建镜像的文本文件,其中包含了一系列的指令和说明,这些指令和说明告诉Docker如何构建镜像。
Docker通过阅读Dockerfile中的指令代码来构建镜像文件。在Dockerfile中,可以使用多种指令来定义如何构建镜像,例如:
- FROM:指定基础镜像;
- RUN:在容器中执行命令;
- COPY:将文件从主机复制到容器中;
- ENV:设置环境变量;
- EXPOSE:声明容器将监听的端口;
- CMD:定义容器启动时执行的命令。
要创建一个Dockerfile,需要在项目目录中创建一个名为Dockerfile的文件,并在其中编写指令。编写Dockerfile的指令将按照文件中的顺序逐一执行。使用docker build命令可以构建镜像。
FROM java:8
VOLUME /tmp
ADD eureka.jar eureka.jar
EXPOSE 8861