Docker容器化技术(下)
Docker容器化技术(下)
一、Dockerfile基础命令
1.1.FROM - 基于基准镜像
FROM centos #制作基准镜像(基于centos)
FROM scratch #不依赖任何基准镜像base image
FROM tomcat:9.022-jdk8-openjdk
尽量使用官方的Base Image
1.2.LABEL&MAINTAINER - 说明信息
- MAINTAINER xxx.com
- LABEL version = "1.0"
- LABEL description = "xxx啥作用"
1.3.WORKDIR - 设置工作目录
- WORKDIR /usr/local
- WORKDIR /usr/local/newdir #自动创建
- 尽量使用绝对路径
1.4.ADD© - 复制文件
- ADD hello / #f复制到根路径
- ADD test.tar.gz / #添加根目录并解压
- ADD 除了复制,还具备添加远程文件的功能,+网址,类似wget
1.5.ENV - 设置环境常量
- ENV JAVA_HOME /usr/local/openjdk8
- RUN ${JAVA_HOME}/bin/java -jar test.jar
- 尽量使用环境常量,可提高程序维护性
二、Dockerfile执行指令
RUN&CMD&ENTRYPOINT
- RUN:在Build构建时执行 相当于shell的执行方式
- ENTRYPOINT:容器启动时执行
- CMD:容器启动后执行 CMD[“ps”,"ef"] 相当于exec的执行方式
执行方式
RUN yum install -y vim #shell命令格式
RUN ["yum","install","-y","vim"] #Exec命令格式
为什么要提供两种不同的执行方式呢?
- shell执行
使用Shell执行,当前shell是父进程,生成一个子进程
在子shell中执行脚本,脚本执行完毕,退出子shell,回到当前shell
- exec运行
当前进程执行
实战
FROM centos
RUN ["echo","image building!!!"]//执行在子进程了
CMD ["echo","container starting..."]//只有这句能看到的
注意 : CMD 如果增加了,则会取代CMD命令,CMD命令不一定执行
ENTRYPOINT 一定会执行
三、构建Redis镜像
- Redis是一个NoSQL数据库
- 2010.3.15开始,Redis开发工作,由VMWare主持
书写Dockerfile
FROM centos
RUN ["yum","install","-y","gcc","gcc-c++","net-tools","make"]
WORKDIR /usr/local
ADD redis-4.0.14.tar.gz . //会自动解压
WORKDIR /usr/local/redis-4.0.14/src
RUN make && make install
WORKDIR /usr/local/redis-4.0.14
ADD redis-7000.conf .
EXPOSE 7000 //暴露7000端口
CMD ["redis-server","redis-7000.conf"]
之后执行镜像构建就行
docker build -t xxx/docker-redis:1.0 .
docker run -p 7000:7000 xxx/docker-redis:1.0
这边只是讲述Dockerfile的书写,实际工作中,直接使用redis镜像即可
四、容器间Link单向通信
- 容器创建后,存在一个虚拟IP
容器单向访问
原理:虽然有内虚拟IP,容器中进行通讯,我们不采用IP通讯,采用容器名称进行通讯
我们使用--name指定名称
docker run -d --name web tomcat
docker run -d --name database -it centos /bin/bash
查看虚拟IP
docker inspect [containerID]
我们使用ping
ping 172.17.0.3 是可以ping通的
但是我们ping名称是ping不通的
所以我们创建第二个tomcat的时候,要进行链接数据库
docker run --name web --link database tomcat
这时候我们进入tomcat,然后进行ping,可以自然联通
ping database 可以自动ping通
五、基于Bridge网桥进行双向通信
网桥双向通信原理
具体操作:绑定tomcat和database
docker run -d --name web tomcat
docker run -d --name database centos /bin/bash
docker network ls
docker network create -d bridge my-bridge
docker network connect my-bridge web
docker network connect my-bridge database
六、Volume容器间共享数据
容器未使用volume
Volume容器原理
方法:
1.通过设置-v挂载宿主机目录
- 格式:
- docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
- 实例:
- docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
2.通过共享容器
- 格式:
- docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
- 共享容器挂载点
- docker run --volumes-from webpage --name t1 -d tomcat
七、Docker Compose
多容器部署会遇到很多麻烦,所以我们的Docker compose出来了
案例
- Docker Compose 单机多容器部署工具
- 通过yml文件定义多容器如何部署
- WIN/MAC默认提供Docker Compose,Linux则需要安装
安装步骤:
1.获取自动安装
pip install -U docker-compose==1.23.2
2.进行执行权限
sudo chmod +x /usr/local/bin/docker-compose
安装WordPress
1.创建目录wordpress
mkdir wordpress
2.vim docker-compose.yml
复制官网上的
3.build the project
docker-compose up -d
八、Docker-compose应用实战
案例、两个SpringBoot项目构建docker-compose
SpringBoot打包
文件 applicaion-dev.yml application.yml bsbdj.jar
vim Dockerfile
FROM openjdk:8u222-jre
WORKDIR /usr/local/bsbdj //上述肯定没有这个目录,所以会创建
ADD bdbdj.jar //加入jar
ADD application.yml .
ADD application-dev.yml .
EXPOSE 80 //暴露端口80
CMD ["java","-jar","bsbdj.jar"]
docker build -t msb.com/bsbdj-app .
docker run msb.com/bsbdj-app
数据库打包
vim Dockerfile
FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ADD init-db.sql .
docker build -t msb.com/bsbdj-db .
docker run -e -d MYSQL_ROOT_PASSWORD=root msb.com/bsbdj-db
docker exec -it aae73fa77d75 /bin/bash
Docker-Compose进行关联和发布
vim docker-compose.yml
version: '3.3'
services:
db:
build: ./bsbdj-db/
restart: always //容错,自动重启
environment:
MYSQL_ROOT_PASSWORD: root
app:
build: ./bsbdj-app/
depends_on:
- db
ports:
- "80:80"
restart: always
docker-compose up
docker-compose up -d
docker-compose logs
docker-compose down
我们连接数据库,那么yml中jdbc:mysql://db:3306/xxx即可
Docker容器化技术(下)的更多相关文章
- Docker容器化技术(上)
目录 Docker容器化技术 一.介绍 二.Docker的发展 三.Docker安装 四.阿里云Docker镜像加速 五.Docker的基本概念 六.命令 七.Docker宿主机与容器通信 八.容器内 ...
- 新一代Java程序员必学的Docker容器化技术基础篇
Docker概述 **本人博客网站 **IT小神 www.itxiaoshen.com Docker文档官网 Docker是一个用于开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与 ...
- Docker容器化技术
1. 初始Docker 1.1 Docker概念 Docker概念:Docker是一个开源的应用容器引擎 诞生于2013年初,基于Go实现,dotCloud公司出品(后改名为Docker Inc) D ...
- Java 服务 Docker 容器化最佳实践
转载自:https://mp.weixin.qq.com/s/d2PFISYUy6X6ZAOGu0-Kig 1. 概述 当我们在容器中运行 Java 应用程序时,可能希望对其进行调整参数以充分利用资源 ...
- spring boot本地开发与docker容器化部署的差异
spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...
- Gogs的Docker容器化部署流程遇到的问题
Gogs的Docker容器化部署流程遇到的问题 最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...
- docker容器化python服务部署(supervisor-gunicorn-flask)
docker容器化python服务部署(supervisor-gunicorn-flask) 本文系作者原创,转载请注明出处: https://www.cnblogs.com/further-furt ...
- 通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署
通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署 Intro Azure DevOps Pipeline 现在对于公开的项目完全免费,这对于开源项目来讲无疑是个巨大的 ...
- 利用 ELK 搭建 Docker 容器化应用日志中心
利用 ELK 搭建 Docker 容器化应用日志中心 概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志 ...
随机推荐
- docker+k8s基础篇四
Docker+K8s基础篇(四) pod控制器 A:pod控制器类型 ReplicaSet控制器 A:ReplicaSet控制器介绍 B:ReplicaSet控制器的使用 Deployment控制器 ...
- 修复一个mysqlbinlog_flashback不支持json格式问题
修复一个mysqlbinlog_flashback不支持json格式问题 , 有问题可以反馈留言 , 如下盘: 最简单的例子为 python mysqlbinlog_back.py --host=&q ...
- java8新特性六-Optional 类
Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者仅仅保 ...
- template模板语言
模板渲染 通过views视图函数对html页面进行渲染 标签{{ 变量 }}/标签 {% 逻辑 %} -- 标签 万能的点 <h1>91李业网</h1> <h2>{ ...
- 16.Python略有小成(内置模块Ⅱ)
Python(内置模块Ⅱ) 一.规范化开发 一个py文件中 文件加载问题 代码可读性,查询差 要将一个py文件分开,合理的分成多个py文件 配置文件放在一起 : 一些轻易不改变的变量,一般命名 set ...
- 解决SQL server 18740、18456登录失败问题
第一步:使用window管理员用户登录SQL server 第二步:如下图步骤(开始配置sa默认用户) 第三步:选择角色类型 第四步:选择和配置用户映射的数据库 第五步:授予允许连接,并开启登录权限 ...
- zap+日志分级分文件+按时间切割日志整合demo
实现功能 info debug 级别的日志输出到 /path/log/demo.log warn error .... 级别的日志输出到 /path/log/demo_error.lo ...
- TypeScript之函数
1.函数声明 与javascript一样,ts的函数声明也分为两种:函数声明,函数表达式 1)函数声明: function fn(age:number):string{ return `age is ...
- Python Django 协程报错,进程池、线程池与异步调用、回调机制
一.问题描述 在Django视图函数中,导入 gevent 模块 import gevent from gevent import monkey; monkey.patch_all() from ge ...
- 不是所有OutOfMemoryError异常都跟内存有关
一个老鸟遇到一个稀奇的问题后,如果只是想想,那么可能会失去一次丰富自己的机会. 如果从开始养成一个习惯,把所有难解决的问题都记录下来,面试的时候,也可能是给自己一次机会 *************** ...