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 ...
随机推荐
- Ubuntu Eclipse启动时报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No java virtual machine was found after searching the following locations:
此问题起于我在Ubuntu1004上装了两个版本的eclipse:Galieo+helios:卸载前者后出现启动不了eclipse的问题:在网上找了下,可以按如下过程进行解决: Eclipse 3 ...
- if当中是赋值怎么办
1.Java中,赋值是有返回值的 ,赋什么值,就返回什么值.比如这题,x=y,返回y的值,所以括号里的值是1. 2.Java跟C的区别,C中赋值后会与0进行比较,如果大于0,就认为是true:而Jav ...
- Qt导入CMakeLists.txt后无法调试
问题: Qt导入CMakeLists.txt后无法单步调试 解决方法: 在CMakeLists.txt后加入一句: SET(CMAKE_BUILD_TYPE DEBUG)
- Redis---03Redis事务
一.Redis事务 1.简述: Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 2.作用: 主要作用就是串联多 ...
- Java 运行时动态生成class
转载 http://www.liaoxuefeng.com/article/0014617596492474eea2227bf04477e83e6d094683e0536000 Java是一门静态语言 ...
- Android Choreographer 源码分析
Choreographer 的作用主要是配合 Vsync ,给上层 App 的渲染提供一个稳定的 Message 处理的时机,也就是 Vsync 到来的时候 ,系统通过对 Vsync 信号周期的调整, ...
- TCP 队列溢出了
一.TCP 队列 1.syns queue:半连接队列 TCP 三次握手(参考:TCP建立连接之三次握手),第一步,服务端接收到客户端发送的 syn 消息后,将连接信息放入 syns queue,此时 ...
- [Luogu P3469] [POI2008]BLO-Blockade (割点)
题面 传送门:https://www.luogu.org/problemnew/show/P3469 Solution 先跟我大声念: poi! 然后开始干正事. 首先,我们先把题目中的点分为两类:去 ...
- P5958 【[POI2017]Sabotaż】
P5958 [[POI2017]Sabotaż] 题意描述 在一棵以1号节点为根节点的树上,有很多纯洁的白点, BUT,突然有一个黑点出现(可能在任意位置) 它要染黑尽可能多的节点,而在一棵子树中, ...
- python开发基础(二)运算符以及数据类型之tuple(元组)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...