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 ...
随机推荐
- 手写Redux-Saga源码
上一篇文章我们分析了Redux-Thunk的源码,可以看到他的代码非常简单,只是让dispatch可以处理函数类型的action,其作者也承认对于复杂场景,Redux-Thunk并不适用,还推荐了Re ...
- POI样式设置详细解析
````````由于看到网上对poi做报告合成的内容不是很全面, ````````自己最近又有新的需求, 作为勉励, 会慢慢补充详细的样式设置, 希望也能帮到各位 设置段落方向 (默认是纵向, 这里可 ...
- 【Vue.js】简单说下vuejs中v-model自定义使用姿势
vue.js中有个v-model的语法,可以实现双向绑定. 起初刚看到的时候,觉得很神奇.后面随着对vue.js的熟悉.发现这个其实是vue官方给我们实现的一个语法糖. 使用v-model的时候,vu ...
- Git高级使用教程
Git 与 SVN 区别 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的 ...
- 【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常
1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERROR日志,发现抛了这样的异常:java.lang.NumberFormatExcep ...
- win10系统出现“VMware Workstation与Device/Credential Guard不兼容”的解决办法
办公室win10 64位系统安装的VMware Workstation,有一天启动时出现提示"VMware Workstation 与 Device/Credential Guard 不兼容 ...
- Scala编程 笔记
date: 2019-08-07 11:15:00 updated: 2019-11-25 20:00:00 Scala编程 笔记 1. makeRDD 和 parallelize 生成 RDD de ...
- vue生命钩子函数
vue的生命钩子函数在使用Vue开发中是非常重要的一环,可以说,生命钩子函数使开发变得更加便捷. 下图是Vue的生命周期图: 具体钩子如下: beforeCreate created beforeMo ...
- 实在解决不了丢失vs2019之类的msvcr110.dll之类的问题
因为msvcr110.dll也是微软DirectX的一个组件 如果在下载VC运行库没用的情况下,可能是因为要运行的程序是win32的,但是电脑和下载的程序是64的,所以 下载一个win32的即可 如果 ...
- D. Maximum Distributed Tree 解析(思維、DFS、組合、貪心、DP)
Codeforce 1401 D. Maximum Distributed Tree 解析(思維.DFS.組合.貪心.DP) 今天我們來看看CF1401D 題目連結 題目 直接看原題比較清楚,略. 前 ...