Docker学习6:使用docker构建Jekyll服务和java服务
写在前面
## 文章Dockerfile中涉及apt-get 等操作需更换镜像 在Dockerfile中添加下列
Dockerfile源码,见下面作者github
https://github.com/turnbullpress/dockerbook-code/blob/master/code/6
RUN rm -rf /etc/apt/sources.list
ADD sources.list /etc/apt/
source.list 文件见下面链接 文件位置与Dockerfile文件在同一级目录下
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
1.构建第一个应用
构建2个镜像:
1、一个镜像安装Jekyll以及构建jekyll的软件包
2、通过Apache让Jekyll网站工作起来
工作流程:
1.创建Jekyll镜像和Apache镜像
2.从Jekyll镜像创建容器,通过卷挂载网站源代码
3.从Apache镜像创建容器,运行服务
4.在需要更新时,重复工作
具体步骤可借鉴下面博客
https://www.cnblogs.com/manmanchanglu/p/12000025.html

2.使用docker构建一个java服务
1.一个镜像从URL拉取指定war包文件保存到卷中
2.一个含有Tomcat服务器的镜像运行在这些下载的war文件中
2.1war文件获取程序
构建一个镜像会下载war文件,挂载到卷中
mkdir fetcher
cd fetcher
vim Dockerfile


构建镜像docker build -t jamtur01/fetcher .
2.2.获取war文件
docker run -t -i --name sample jamtur01/fetcher \
https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/sample.war

查看卷目录


2.3 Tomcat8应用服务器
## 更换镜像RUN rm-rf/etc/apt/sources.listADD sources.list/etc/apt/
vim Dockerfile
FROMubuntu:18.04
LABELmaintainer="james@example.com"
ENVREFRESHED_AT 2016-06-01
RUN apt-get -qq update
RUN apt-get -qq install tomcat8 default-jdk
ENVCATALINA_HOME /usr/share/tomcat8
ENVCATALINA_BASE /var/lib/tomcat8
ENVCATALINA_PID /var/run/tomcat8.pid
ENVCATALINA_SH /usr/share/tomcat8/bin/catalina.sh
ENVCATALINA_TMPDIR /tmp/tomcat8-tomcat8-tmp
RUNmkdir -p $CATALINA_TMPDIR
VOLUME["/var/lib/tomcat8/webapps/"]
EXPOSE8080
ENTRYPOINT["/usr/share/tomcat8/bin/catalina.sh","run"]
docker build -t jamtur01/tomcat8 .
2.4 运行WAR文件
创建tomcat8示例
docker run --name sample_app --volumes-from sample \
-d -P jamtur01/tomcat8
查看容器暴露的端口
docker port sample_app 8080

2.5基于tomcat应用服务器的构建服务
安装ruby
apt-get -qqy install ruby make ruby-dev
安装TProv应用
gem install --no-rdoc --no-ri tprov
tprov // 运行项目


会显示你运行的所有的容器
3.多容器应用栈
一个Node容器,用来服务于Node应用,这个容器会链接到。
一个Redis主容器,用于保存和集群化应用状态,这个容器会链接到。
两个Redis副本容器,用于集群化应用状态。
一个日志容器,用于捕获应用日志。
3.1Node.js镜像

创建dockerfile
wget https://github.com/turnbullpress/dockerbook-code/blob/master/code/6/node/nodejs/nodeapp/package.json
wget https://github.com/turnbullpress/dockerbook-code/blob/master/code/6/node/nodejs/nodeapp/server.js
cd ..
vim Dockerfile
FROM ubuntu:18.04
LABEL maintainer="james@example.com"
ENV REFRESHED_AT 2016-06-01
RUN apt-get -qq update
RUN apt-get -qq install nodejs npm
RUN mkdir -p /var/log/nodeapp
ADD nodeapp /opt/nodeapp/
WORKDIR /opt/nodeapp
RUN npm install
VOLUME ["/var/log/nodeapp"]
EXPOSE 3000
ENTRYPOINT ["nodejs","server.js"]
构建node.js镜像
docker build -t jamtur01/nodejs .
3.2 Redis基础镜像

FROMubuntu:18.04
LABELmaintainer="james@example.com"
ENVREFRESHED_AT 2017-06-01
RUNapt-get -qq update
RUNapt-get install -qq software-properties-common
RUNadd-apt-repository ppa:chris-lea/redis-server
RUNapt-get -qq update
RUNapt-get -qq install redis-server redis-tools
VOLUME["/var/lib/redis","/var/log/redis"]
EXPOSE6379
CMD[]
构建redis基础镜像 docker build -t jamtur01/redis .
3.3 Redis主镜像

FROMjamtur01/redis
LABELmaintainer="james@example.com"
ENVREFRESHED_AT 2016-06-01
ENTRYPOINT["redis-server","--protected-mode no","--logfile /var/log/redis/redis-server.log"]
构建Redis主镜像 docker build -t jamtur01/redis_primary .
3.4 Redis 副本镜像

FROMjamtur01/redis
LABELmaintainer="james@example.com"
ENVREFRESHED_AT 2016-06-01
ENTRYPOINT["redis-server","--protected-mode no","--logfile /var/log/redis/redis-replica.log","--slaveof redis_primary 6379"]
docker build -t jamtur01/redis_replica .
3.5 创建Redis后端集群
创建express网络
docker network create express
运行redis 主容器
docker run -d -h redis_primary \
--net express --name redis_primary jamtur01/redis_primary
-h 用来设置容器的主机名,可以确保redis_primary 作为主机名,并被本地DNS服务正确解析
redis容器日志
docker logs redis_primary
看不到日志。 redis服务会将日志保存成文件,使用docker看不到日志,可以使用之前看到的 /var/log/redis 卷。
读取redis主日志
docker run -ti --rm --volume-from redis_primary \
ubuntu cat /var/log/redis/redis-server.log

运行第一个redis容器副本
docker run -d -h redis_replica1 \
--name redis_replica1 \
--net express \
jamtur01/redis_replica
读取redis副本容器日志
docker run -ti --volumes-from redis_replica1 \
ubuntu cat /var/log/redis/redis-replica.log

运行第二个redis容器副本
docker run -d -h redis_replica2 \
--name redis_replica2 \
--net express \
jamtur01/redis_replica
读取redis副本容器日志
docker run -ti --volumes-from redis_replica2 \
ubuntu cat /var/log/redis/redis-replica.log

3.6创建Node容器
运行Node.js容器
docker run -d \
--name nodeapp -p 3000:3000 \
--net express \
jamtur01/nodejs
查看nodeapp容器日志
docker logs nodeapp



3.7 捕获应用日志
创建Dockerfile

FROMubuntu:18.04
LABELmaintainer="james@example.com"
ENVREFRESHED_AT 2016-06-01
RUNapt-get -qq update
RUNapt-get -qq install wget gnupg2 openjdk-8-jdk
RUNwget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
RUNecho"deb https://artifacts.elastic.co/packages/5.x/apt stable main"| tee -a /etc/apt/sources.list.d/elastic-5.x.list
RUNapt-get -qq update
RUNapt-get -qq install logstash
WORKDIR/usr/share/logstash
ADDlogstash.conf /usr/share/logstash/
ENTRYPOINT["bin/logstash"]
CMD["-f","logstash.conf","--config.reload.automatic"]
4. 不使用SSH管理Docker容器
使用docker kill发送信号
docker kill -s <signal> <container>
安装nsenter
工具nsenter可以进入docker用来构成容器的内核命名空间,进入一个已经存在的容器shell,即使容器没有运行ssh或任何的守护进程。
docker run -v /usr/local/bin:/target jpetazzo/nsenter
获取容器进程ID
sudo docker inspect --format '{{.State.Pid}}' nodeapp

使用nsenter进入容器
nsenter --target $PID --mount --uts --ipc --net --pid
Docker学习6:使用docker构建Jekyll服务和java服务的更多相关文章
- docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群
题目要求 (1)将springboot应用程序打成jar包:Hot.jar (2)利用dockerfile将Hot.jar构建成镜像 (3)构建 Swarm 集群 (4)在 Swarm 集群中使用 c ...
- docker学习笔记:简单构建Dockerfile【Docker for Windows】
参考与入门推荐:https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html#autoid-0-0-9 最近学习docker,写一个简单构建Doc ...
- Docker学习笔记_10 docker应用 - 部署TOMCAT服务
选择基镜像 基镜像使用dokcer hub官方提供的tomcat8 alpine当前最新版本,https://hub.docker.com/_/tomcat/ docker pull tomcat:8 ...
- 【Docker学习之七】Docker图形化管理和监控
环境 docker-ce-19.03.1-3.el7.x86_64 centos 7 一.Docker管理工具 (官方三剑客)1.Docker Machine(学习的Openstack Heat)Cr ...
- DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结
前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...
- Docker学习第一天(Docker入门&&Docker镜像管理)
简介 今天小区的超市买零食老板给我说再过几天可能就卖完了我有点诧异,老板又说厂家不生产了emmm 今天总算开始docker了! 1.Docker? 1.什么是Docker Docker 是一个开源的应 ...
- Docker学习笔记之docker volume 容器卷的那些事(一)
预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...
- Docker学习笔记之Docker的Build 原理
0x00 概述 使用 Docker 时,最常用的命令无非是 docker container 和 docker image 相关的子命令,当然最初没有管理类命令(或者说分组)的时候,最常使用的命令也无 ...
- Docker学习笔记之Docker的数据管理和存储
0x00 概述 数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重.特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能.我们知道,在 Doc ...
随机推荐
- java 保留小数点后指定位数四种方法
1 package com.itheima_01; 2 3 import java.math.BigDecimal; 4 import java.text.DecimalFormat; 5 impor ...
- Vue踩坑日记-Element this.$message 找不到模块
在使用Vue.js的 Element框架时,无法使用Message组件 浏览器提示:找不到组件 原始写法: this.$message({ message: '恭喜你,这是一条成功消息', type: ...
- Redis基础(一)数据结构与数据类型
Redis数据结构 Redis一共有六种数据结构,分别是简单动态字符串.链表.字典.跳表.整数集合.压缩列表. 简单动态字符串(SDS) Redis只会使用C字符串作为字面量,在大多数情况下,Redi ...
- 自定义Jackson2HttpMessageConverter,适应.html后缀url
Jackson2HttpMessageConverter 用处 SpringMVC中,controller中的方法返回java Bean对象,mvc将此对象转换成字符串 默认支持的mediaType: ...
- zctf2016_note2:一个隐蔽的漏洞点挖掘
代码量挺大的,逆起来有难度 功能挺全,啥都有 main函数 add函数,有heaparray并且无pie保护,考虑unlink show函数,可以泄漏地址用 edit函数,有两种edit方式 dele ...
- github初始化版本
git命令上传初始化项目 (1)先去github创建自己的项目版本 (2)然后找到自己想要上传代码版本的目录$ git init $ git add ./src ./pom.xml $ git com ...
- java数据结构-12树相关概念
一.树 1.概念: 包含n(n>=0)个结点的有穷集:树有多个节点(node),用以储存元素.某些节点之间存在一定的关系,用连线表示,连线称为边(edge).边的上端节点称为父节点,下端称为子节 ...
- PHP对接微信扫码登录
1.PC端扫码登录 如果你将微信小程序和公众账号绑定同一个微信开放平台,那么他们各自的接口返回有一个参数unionid是相同的(没有绑定微信公众账号就没有):那么你就可以使用这个unionid来做业务 ...
- 嵌入式linux和stm32嵌入式开发这两者之间有什么关联性
对于更开始入坑的同学,可能也像我一样搞不清楚两者的区别与联系.现在结合知乎网上的相关资料发一篇文章来具体分析. 基于STM32的开发属于微控制器开发领域,主要开发工具是keil或IAR,这种开发更准确 ...
- 1,web项目工作流程
1.1 了解web程序工作流程 .1.2django生命周期