写在前面


## 文章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. Halcon软件介绍与图像基本知识

    1.halcon环境 halcon功能:1.视觉算法(核心)基本 2. 弱语言 3.解释性语言 halcon软件介绍: 1.标题栏 2.菜单栏 3.工具栏 4.工作区 图形窗口(显示图像) 变量窗口( ...

  2. Java实现:抛开jieba等工具,写HMM+维特比算法进行词性标注

    一.前言:词性标注 二.经典维特比算法(Viterbi) 三.算法实现 四.完整代码 五.效果演示: 六.总结 一.前言:词性标注 词性标注(Part-Of-Speech tagging, POS t ...

  3. vue多页面与单页面开发的区别。

    进入一家新的公司,要开发移动端app项目,前端技术选型时前端组长选的是vue的多页面开发,当时很蒙,vue不是单页面开发吗?咋出来多页面的.接触之后才发现确实存在也挺简单的,省去了路由表的配置.那就给 ...

  4. Java之HttpClient调用WebService接口发送短信源码实战

    摘要 Java之HttpClient调用WebService接口发送短信源码实战 一:接口文档 二:WSDL 三:HttpClient方法 HttpClient方法一 HttpClient方法二 Ht ...

  5. CVE-2017-6090&msf的基本使用(一)

    渗透环境的搭建 phpcollab的下载:phpCollab-v2.5.1.zip 解压到www目录,给www目录权限,因为这个漏洞需要写的权限 chmod 777 wwww 基本环境 配置 mysq ...

  6. VM Linux (Centos)联网

    今天新建一个linux突然发现不能上网,然后百度好多都不行,最后还是解决掉了,这是我的配置方法 鼠标左击虚拟机(或者选中之后直接设置),找到设置选项,打开网络适配器,设为NAT模式 然后进入虚拟机,进 ...

  7. Mybatis之plugin插件设计原理

    大多数框架,都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外. 我们从插件配置.插件编写.插件运行原理.插件注册与执行拦截的时机.初始化插件.分页插件的原理等六个方面展开阐述. 一 ...

  8. PASS模型-第一周个人报告

    PASS模型-第一周个人报告 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE2020 作业要求 https://edu.cnblogs.com/campus ...

  9. js音乐播放器【简洁】

    辞职的第二天没有去找工作还,准备回家. 但到了火车站才发现沃特玛的买的票不是在这个火车站坐. 这就耽误了行程...... 说出来真舒服!!!淦 代码 这里已经上传到码云了,大家可以直接引用. 目前只有 ...

  10. 【Java】阿里巴巴开发规范手册

    Java 开发手册 一. 编程规约 (一) 命名风格 [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name, $name, __name [强制]代码中 ...