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&COPY - 复制文件
  • 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容器化技术(下)的更多相关文章

  1. Docker容器化技术(上)

    目录 Docker容器化技术 一.介绍 二.Docker的发展 三.Docker安装 四.阿里云Docker镜像加速 五.Docker的基本概念 六.命令 七.Docker宿主机与容器通信 八.容器内 ...

  2. 新一代Java程序员必学的Docker容器化技术基础篇

    Docker概述 **本人博客网站 **IT小神 www.itxiaoshen.com Docker文档官网 Docker是一个用于开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与 ...

  3. Docker容器化技术

    1. 初始Docker 1.1 Docker概念 Docker概念:Docker是一个开源的应用容器引擎 诞生于2013年初,基于Go实现,dotCloud公司出品(后改名为Docker Inc) D ...

  4. Java 服务 Docker 容器化最佳实践

    转载自:https://mp.weixin.qq.com/s/d2PFISYUy6X6ZAOGu0-Kig 1. 概述 当我们在容器中运行 Java 应用程序时,可能希望对其进行调整参数以充分利用资源 ...

  5. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  6. Gogs的Docker容器化部署流程遇到的问题

    Gogs的Docker容器化部署流程遇到的问题   最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...

  7. docker容器化python服务部署(supervisor-gunicorn-flask)

    docker容器化python服务部署(supervisor-gunicorn-flask) 本文系作者原创,转载请注明出处: https://www.cnblogs.com/further-furt ...

  8. 通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署

    通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署 Intro Azure DevOps Pipeline 现在对于公开的项目完全免费,这对于开源项目来讲无疑是个巨大的 ...

  9. 利用 ELK 搭建 Docker 容器化应用日志中心

    利用 ELK 搭建 Docker 容器化应用日志中心 概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志 ...

随机推荐

  1. Python - Django - jQuery 实现简单的 AJAX

    AJAX 局部刷新实例: 使用 jQuery 实现基本的发送 AJAX 请求 index.html: <!DOCTYPE html> <html lang="en" ...

  2. 复制pycharm虚拟环境

    我还是在内网进行开发,上篇讲了数据库驱动,方便链接数据库. 那么虚拟环境呢?那么多个包,离线下载………… 关键是我自己的笔记本也会进行交叉开发.一会儿在内网,一会儿在公网. 还是复制粘贴比较简单. 下 ...

  3. [ Docker ] 基础安装使用及架构

    目录- Centos7 安装 Docker- Docker 架构 1. CentOS7 安装 Docker 目前 docker 有三个分支,moby.docker-ce.docker-ee moby ...

  4. Java 8 stream 经典示例

    package org.study2.java8.stream; import org.junit.Test; import java.util.*; import java.util.stream. ...

  5. Kubernetes StatefulSet

    StatefulSet 简介 在Kubernetes中,Pod的管理对象RC.Deployment.DaemonSet和Job都是面向无状态的服务.但现实中有很多服务是有状态的,特别是一些复杂的中间件 ...

  6. LeetCode 238. 除自身以外数组的乘积(Product of Array Except Self)

    238. 除自身以外数组的乘积 238. Product of Array Except Self 题目描述 LeetCode LeetCode238. Product of Array Except ...

  7. 手撕面试官系列(二):开源框架面试题Spring+SpringMVC+MyBatis

    文章首发于今日头条:https://www.toutiao.com/i6712324863006081549/ 前言 跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽.切不可跟风,看 ...

  8. hyper-v安装windows7

    win7镜像下载地址 http://msdn.itellyou.cn/ 该网站都是微软系列的正规软件 非常好用 在hyper-v 虚拟机安装windows系统时,到百度搜索了几个iso 都不好用 到h ...

  9. 基础数字电路的Verilog写法

    Verilog是硬件描述电路,我对此一直稀里糊涂,于是将锆石科技开发板附带的的一些基础数字电路Verilog程序整理记录下来,并且查看他们的RTL视图,总算有点理解了. 1.基本运算符 module ...

  10. harbor helm仓库使用

    harbor helm仓库使用 官方文档地址:https://github.com/goharbor/harbor Monocular 从1.0 开始专注于helm 的UI展示,对于部署以及维护已经去 ...