show me the code and talk to me,做的出来更要说的明白

本文源码,请点击learnSpringboot

我是布尔bl,你的支持是我分享的动力!

一、 引入

有开发经验的都知道,几乎每种技术都有一个吉祥物代表。那么Docker的吉祥物是怎么样的呢? 下图我们可以看到Docker是一个小鲸鱼,他的上面运载者许多货物。

二、快速入门

2.1 我为什么要用Docker

那么,Docker究竟是什么东西来的呢?DockerGo 语言编写,是一个免费开源的开放平台,可以运行在多个主流平台。Docker 可以用于开发应用、交付应用、运行应用。简单来说,Docker就像一个Linux里面的Linux。那么我们为什么需要使用Docker,因为Linux在使用代价高,配置麻烦。一般我们使用Linux服务器需要向阿里、腾讯购买,是不是。不过,如果可以的话我们更喜欢白嫖。

因此,Docker的出现就可以解决这个痛点了。只要你有想法,你可以在Linux服务器里面安装上Docker,然后在Docker里面装多个Linux`服务器。

由于Docker具有隔离性 ,我们无需担心多个Linux会互相影响(串味)。

另外的优点是,当我们安装组件的时候,在Linux上面很麻烦,在Docker上面可以更快配置组件。我们还可以编写Dockerfile脚本,实现生产环境与开发环境同步配置的目的。

2.2 Docker原理

我们在Linux里安装Docker,其实跟我们以前在Windows里安装虚拟机一样。Docker利用了Linux服务器的物理特性,就像病毒一样,寄生在服务器里面。

2.3 一些名字解释

Docker有一些名词:镜像、容器、Dockerfile、Docker Hub

Docker Hub就像我们使用的github。里面有各种各样的镜像。其中有分为官方和非官方,我们在拉取的时候当然是选择官方啦。

在我们拉去镜像回Docker后,我们就可以运行了,就像快递到家了,我们需要手撕他。然后镜像就变成了容器

另外我们也可以通过Dockerfile将本地应用变成镜像。

至于Docker Compose,就是我们运行镜像的时候,需要编写一大推命令,而Docker Compose可以以yml文本形式快速运行镜像,做到一次编写,处处运行。

三、安装Docker

我们可以在各个平台安装运行Docker。在这里,我演示的是Linux平台。

  1. # 1、 yum 包更新到最新
  2. yum update
  3. # 2、安装需要的软件包, yum-utils 提供yum-config-manager功能, 另外两个是devicemapper驱动依赖的
  4. yum install -y yum-utils device-mapper-persistent-data 1vm2
  5. # 3、设置yum源
  6. yum-config-manager -- add-repo https://download.docker.com/linux/centos/docker-ce.repo
  7. # 4、安装docker,出现输入的界面都按 y
  8. yum install -y docker-ce
  9. # 5、查看docker版本,验证是否验证成功
  10. docker -V

安装成功后显示

当然由于众所周知的原因,我们的Docker需要进行加速,不然就得忍受蜗牛般的速度。因此,我推荐阿里云的Docker容器镜像加速配置。

四、常用命令

docker作为一个类Linux平台,自然也有命令行操作。当然,不喜欢命令行操作,推荐可以使用界面操作portainer组件。

1. 启动、停止

  1. # 启动
  2. service docker start
  3. # 停止
  4. service docker stop

2. 查看版本

  1. docker -v

这里我们最好安装1.3以上版本

3. 搜索镜像

  1. docker search jdk

4. 拉取镜像

  1. docker pull 镜像名

5. 查看镜像

  1. docker images

6. 运行镜像

  1. docker run -p 8083:8083 springio/gs-spring-boot-docker

前面端口是服务器端口,后面是Docker暴露的端口,这里映射端口的目的是为了我们可以远程访问到Docker里面的容器。端口不一定相同。

可选参数

  1. -d # Run container in background and print container ID:后台运行以及打印容器id
  2. -v #挂载容器目录到宿主机(服务器),达到修改宿主机文件同步到容器文件目的

7.删除镜像

  1. docker rmi 镜像id

8.查看运行容器

  1. docker ps

9.查看全部容器包括,没有运行

  1. docker ps -a

10.删除容器

  1. docker rm 容器id

11.查看容器运行日志

  1. docker logs 容器id

12.进入容器内部,命令行界面

  1. docker exec -it 容器id /bin/bash

我们在启动容器的过程,可能会碰到容器启动失败的情况。

五、Nginx

1.搜索Nginx

2.拉去Nginx镜像

3.运行Nginx镜像

  1. docker run --name my_nginx
  2. -d
  3. -p 8081:80
  4. -v /srv/web/logs:/var/log/nginx
  5. -v /srv/web/conf/nginx.conf:/etc/nginx/nginx.conf
  6. -v /srv/web/conf/default.conf:/etc/nginx/conf.d/default.conf
  7. -v /srv/web/html:/usr/share/nginx/html
  8. docker.io/nginx

说明

--name my_nginx 把容器起一个名字

-d 后台运行

-p 8081:80 将容器80端口映射到宿主机(服务器)8081端口

-v /srv/web/logs:/var/log/nginx

挂载目录, " : "前面是宿主机目录,后面是容器文件目录

docker.io/nginx 原来镜像名字

4.查看Nginx容器

  1. docker ps

六、实例之部署SpringBoot

1. 编写代码

  1. package com.example.demo2;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.stereotype.Service;
  5. @SpringBootApplication
  6. public class Demo2Application {
  7. public static void main(String[] args) {
  8. E e = (E) SpringApplication.run(Demo2Application.class, args).getBean("ss");
  9. e.test();
  10. }
  11. @Service(value = "ss")
  12. class E {
  13. public void test() {
  14. System.out.println("service1111111");
  15. }
  16. }
  17. }

2. 打包jar

  1. mvn clean package -Dmaven.test.skip=true

target目录找到jar,重名lsb-helloworld

3. 编写Dockerfile文件

  1. FROM docker.io/adoptopenjdk/openjdk8
  2. COPY lsb-helloworld.jar app.jar
  3. ENTRYPOINT ["java","-jar","/app.jar"]

然后将jarDockerfile文件上传到Linux服务器的同一目录

4. 运行Dockerfile文件

  1. docker build -t springio/gs-spring-boot-docker .

生成名为springio/gs-spring-boot-docker的镜像

5. 运行镜像

  1. docker run -p 8083:8083 springio/gs-spring-boot-docker

公众号

面向开发者的Docker实践的更多相关文章

  1. Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享

    架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...

  2. PHP 开发者的 Docker 之旅

    用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的.这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言.「PHP 是最好的语言」这个流传已久的梗,或 ...

  3. 【转】开发者可以使用Docker做什么?

    有些开发者可能还是不明白 Docker 对自己到底有多大的用处,因此翻译 Docker 个人用例 这篇文章中来介绍 Docker 在普通开发者开发过程中的用例. Docker 如今赢得了许多关注,很多 ...

  4. Java面向切面原理与实践

    Java面向切面原理与实践 一. 面向切面编程是什么 首先用一句话概括:面向切面编程(AOP)就是对某些具有相似点的代码进行增强. 相似点可以是同一个包.使用相同的注解.public的方法.以Impl ...

  5. docker实践之docker-compose部署mysql

    文章目录 docker实践之docker-compose部署mysql 1.安装部署docker 2.编写docker-compose文件 3.编写配置文件和初始化文件 4.启动数据库 5.检查初始化 ...

  6. MaxCompute推出面向开发者的专属版本,普惠大数据开发者

    3月20号,阿里云正式对外宣布推出MaxCompute产品的新规格-开发者版.MaxCompute开发者版是阿里云大数据计算服务发布的开发者专属版本.区别于原有的按量付费.按CU预付费规格,开发者版是 ...

  7. Docker实践之02-使用镜像及定制

    目录 一.获取镜像 二.使用镜像启动容器实例 三.列出镜像 四.删除本地镜像 五.定制镜像 通过commit命令定制镜像 通过Dockerfile定制镜像 docker build的工作原理 dock ...

  8. centos7+ docker 实践部署docker及配置direct_lvm

    转载于博客园:http://www.cnblogs.com/Andrew-XinFei/p/6245330.html 前言 Docker现在在后端是那么的火热..尤其当笔者了解了docker是什么.能 ...

  9. 【容器云】传统金融企业的 Docker 实践

    基于 Docker 的容器云-Padis 目前市面上基于容器云的产品有很多,对于平安而言,则是基于 Docker 的 Padis 平台.所谓 Padis,全称是 PingAn Distribution ...

随机推荐

  1. SpringCloud-服务注册中心「Eureka」的介绍与使用

    Eureka 两大组件

  2. ModuleNotFoundError: No module named 'sklearn.cross_validation'

    本文为CSDN博主「不服输的南瓜」的原创文章,遵循 CC 4.0 BY-SA 版权协议 原文链接 ModuleNotFoundError: No module named 'sklearn.cross ...

  3. vs 类型定义及语句,随机数

    1  类型定义: 1)小数: 类型         变量名           赋值 decimal       d   :              d=1.2m float             ...

  4. 详解 volatile关键字 与 CAS算法

    (请观看本人博文 -- <详解 多线程>) 目录 内存可见性问题 volatile关键字 CAS算法: 扩展 -- 乐观锁 与 悲观锁: 悲观锁: 乐观锁: 在讲解本篇博文的知识点之前,本 ...

  5. code-breaking picklecode中对signed_cookies引擎分析

    最近做了 ph 牛的 code-breaking,在做 picklecode 这一题时,没有搞懂那个 django 的 signed_cookies 引擎对 session 的操作,就 debug 了 ...

  6. [html]浏览器标签小图标LOGO简单设置

    方式一:如果是一个项目一个LOGO 的话,直接接把图片像素设置成16x16像素,然后改名favicon.ico放在项目根部目录就可以,自动识别的! 方式二:简单设置! 首先找一个图片把像素设置成16x ...

  7. 当td中文字过长时,显示为省略号

    当表格中的文字过长时,可选择已省略号显示.这里是用js实现的.首先获取td中的文字长度(innerText.length),如果长度超过了设定的长度,则截取内容,加上省略号显示.示例代码如下: $(f ...

  8. 数值计算方法实验之newton多项式插值 (Python 代码)

    一.实验目的 在己知f(x),x∈[a,b]的表达式,但函数值不便计算或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)=yi (i=0,1,……, n)求出简单函 ...

  9. 进程、线程和携程的通俗解释【刘新宇Python】

    通过下面这张图你就能看清楚了,进程.线程和携程的关系   进程: 多个进程是可以运行在多个CPU当中的,比如你的电脑是4核,可以同时并行运行四个进程,这是真正物理上的并行运行. 线程: 每个进程又可以 ...

  10. thinkphp5 -- _initialize()初始化控制器

    public function _initialize() { parent::_initialize(); } public function __construct() { $; parent:: ...