写在前面


## 文章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服务的更多相关文章

  1. docker学习之使用 DockerFile 构建镜像并搭建 swarm+compose 集群

    题目要求 (1)将springboot应用程序打成jar包:Hot.jar (2)利用dockerfile将Hot.jar构建成镜像 (3)构建 Swarm 集群 (4)在 Swarm 集群中使用 c ...

  2. docker学习笔记:简单构建Dockerfile【Docker for Windows】

    参考与入门推荐:https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html#autoid-0-0-9 最近学习docker,写一个简单构建Doc ...

  3. Docker学习笔记_10 docker应用 - 部署TOMCAT服务

    选择基镜像 基镜像使用dokcer hub官方提供的tomcat8 alpine当前最新版本,https://hub.docker.com/_/tomcat/ docker pull tomcat:8 ...

  4. 【Docker学习之七】Docker图形化管理和监控

    环境 docker-ce-19.03.1-3.el7.x86_64 centos 7 一.Docker管理工具 (官方三剑客)1.Docker Machine(学习的Openstack Heat)Cr ...

  5. DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

  6. Docker学习第一天(Docker入门&&Docker镜像管理)

    简介 今天小区的超市买零食老板给我说再过几天可能就卖完了我有点诧异,老板又说厂家不生产了emmm 今天总算开始docker了! 1.Docker? 1.什么是Docker Docker 是一个开源的应 ...

  7. Docker学习笔记之docker volume 容器卷的那些事(一)

    预览目录 volume 方式 相关用例 使用方式 使用 volume driver bind mount 方式 相关用例 使用方式 配置selinux标签 配置macOS的安装一致性 tmpfs 方式 ...

  8. Docker学习笔记之Docker的Build 原理

    0x00 概述 使用 Docker 时,最常用的命令无非是 docker container 和 docker image 相关的子命令,当然最初没有管理类命令(或者说分组)的时候,最常使用的命令也无 ...

  9. Docker学习笔记之Docker的数据管理和存储

    0x00 概述 数据是应用程序重要的产出,所以很好的管理和存储数据,是对应用程序劳动结果的尊重.特别是在大数据时代,所有的数据都是重要的资产,保护好数据是每个开发者必须掌握的技能.我们知道,在 Doc ...

随机推荐

  1. java 保留小数点后指定位数四种方法

    1 package com.itheima_01; 2 3 import java.math.BigDecimal; 4 import java.text.DecimalFormat; 5 impor ...

  2. Vue踩坑日记-Element this.$message 找不到模块

    在使用Vue.js的 Element框架时,无法使用Message组件 浏览器提示:找不到组件 原始写法: this.$message({ message: '恭喜你,这是一条成功消息', type: ...

  3. Redis基础(一)数据结构与数据类型

    Redis数据结构 Redis一共有六种数据结构,分别是简单动态字符串.链表.字典.跳表.整数集合.压缩列表. 简单动态字符串(SDS) Redis只会使用C字符串作为字面量,在大多数情况下,Redi ...

  4. 自定义Jackson2HttpMessageConverter,适应.html后缀url

    Jackson2HttpMessageConverter 用处 SpringMVC中,controller中的方法返回java Bean对象,mvc将此对象转换成字符串 默认支持的mediaType: ...

  5. zctf2016_note2:一个隐蔽的漏洞点挖掘

    代码量挺大的,逆起来有难度 功能挺全,啥都有 main函数 add函数,有heaparray并且无pie保护,考虑unlink show函数,可以泄漏地址用 edit函数,有两种edit方式 dele ...

  6. github初始化版本

    git命令上传初始化项目 (1)先去github创建自己的项目版本 (2)然后找到自己想要上传代码版本的目录$ git init $ git add ./src ./pom.xml $ git com ...

  7. java数据结构-12树相关概念

    一.树 1.概念: 包含n(n>=0)个结点的有穷集:树有多个节点(node),用以储存元素.某些节点之间存在一定的关系,用连线表示,连线称为边(edge).边的上端节点称为父节点,下端称为子节 ...

  8. PHP对接微信扫码登录

    1.PC端扫码登录 如果你将微信小程序和公众账号绑定同一个微信开放平台,那么他们各自的接口返回有一个参数unionid是相同的(没有绑定微信公众账号就没有):那么你就可以使用这个unionid来做业务 ...

  9. 嵌入式linux和stm32嵌入式开发这两者之间有什么关联性

    对于更开始入坑的同学,可能也像我一样搞不清楚两者的区别与联系.现在结合知乎网上的相关资料发一篇文章来具体分析. 基于STM32的开发属于微控制器开发领域,主要开发工具是keil或IAR,这种开发更准确 ...

  10. 1,web项目工作流程

    1.1 了解web程序工作流程 .1.2django生命周期