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 ...
随机推荐
- Halcon软件介绍与图像基本知识
1.halcon环境 halcon功能:1.视觉算法(核心)基本 2. 弱语言 3.解释性语言 halcon软件介绍: 1.标题栏 2.菜单栏 3.工具栏 4.工作区 图形窗口(显示图像) 变量窗口( ...
- Java实现:抛开jieba等工具,写HMM+维特比算法进行词性标注
一.前言:词性标注 二.经典维特比算法(Viterbi) 三.算法实现 四.完整代码 五.效果演示: 六.总结 一.前言:词性标注 词性标注(Part-Of-Speech tagging, POS t ...
- vue多页面与单页面开发的区别。
进入一家新的公司,要开发移动端app项目,前端技术选型时前端组长选的是vue的多页面开发,当时很蒙,vue不是单页面开发吗?咋出来多页面的.接触之后才发现确实存在也挺简单的,省去了路由表的配置.那就给 ...
- Java之HttpClient调用WebService接口发送短信源码实战
摘要 Java之HttpClient调用WebService接口发送短信源码实战 一:接口文档 二:WSDL 三:HttpClient方法 HttpClient方法一 HttpClient方法二 Ht ...
- CVE-2017-6090&msf的基本使用(一)
渗透环境的搭建 phpcollab的下载:phpCollab-v2.5.1.zip 解压到www目录,给www目录权限,因为这个漏洞需要写的权限 chmod 777 wwww 基本环境 配置 mysq ...
- VM Linux (Centos)联网
今天新建一个linux突然发现不能上网,然后百度好多都不行,最后还是解决掉了,这是我的配置方法 鼠标左击虚拟机(或者选中之后直接设置),找到设置选项,打开网络适配器,设为NAT模式 然后进入虚拟机,进 ...
- Mybatis之plugin插件设计原理
大多数框架,都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外. 我们从插件配置.插件编写.插件运行原理.插件注册与执行拦截的时机.初始化插件.分页插件的原理等六个方面展开阐述. 一 ...
- PASS模型-第一周个人报告
PASS模型-第一周个人报告 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE2020 作业要求 https://edu.cnblogs.com/campus ...
- js音乐播放器【简洁】
辞职的第二天没有去找工作还,准备回家. 但到了火车站才发现沃特玛的买的票不是在这个火车站坐. 这就耽误了行程...... 说出来真舒服!!!淦 代码 这里已经上传到码云了,大家可以直接引用. 目前只有 ...
- 【Java】阿里巴巴开发规范手册
Java 开发手册 一. 编程规约 (一) 命名风格 [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name, $name, __name [强制]代码中 ...