面向开发者的Docker实践
show me the code and talk to me,做的出来更要说的明白
本文源码,请点击learnSpringboot
我是布尔bl,你的支持是我分享的动力!
一、 引入
有开发经验的都知道,几乎每种技术都有一个吉祥物代表。那么Docker
的吉祥物是怎么样的呢? 下图我们可以看到Docker
是一个小鲸鱼,他的上面运载者许多货物。
二、快速入门
2.1 我为什么要用Docker
那么,Docker
究竟是什么东西来的呢?Docker
由 Go
语言编写,是一个免费开源的开放平台,可以运行在多个主流平台。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、 yum 包更新到最新
yum update
# 2、安装需要的软件包, yum-utils 提供yum-config-manager功能, 另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data 1vm2
# 3、设置yum源
yum-config-manager -- add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、安装docker,出现输入的界面都按 y
yum install -y docker-ce
# 5、查看docker版本,验证是否验证成功
docker -V
安装成功后显示
当然由于众所周知的原因,我们的Docker
需要进行加速,不然就得忍受蜗牛般的速度。因此,我推荐阿里云的Docker
容器镜像加速配置。
四、常用命令
docker
作为一个类Linux
平台,自然也有命令行操作。当然,不喜欢命令行操作,推荐可以使用界面操作portainer
组件。
1. 启动、停止
# 启动
service docker start
# 停止
service docker stop
2. 查看版本
docker -v
这里我们最好安装1.3
以上版本
3. 搜索镜像
docker search jdk
4. 拉取镜像
docker pull 镜像名
5. 查看镜像
docker images
6. 运行镜像
docker run -p 8083:8083 springio/gs-spring-boot-docker
前面端口是服务器端口,后面是Docker
暴露的端口,这里映射端口的目的是为了我们可以远程访问到Docker
里面的容器。端口不一定相同。
可选参数
-d # Run container in background and print container ID:后台运行以及打印容器id
-v #挂载容器目录到宿主机(服务器),达到修改宿主机文件同步到容器文件目的
7.删除镜像
docker rmi 镜像id
8.查看运行容器
docker ps
9.查看全部容器包括,没有运行
docker ps -a
10.删除容器
docker rm 容器id
11.查看容器运行日志
docker logs 容器id
12.进入容器内部,命令行界面
docker exec -it 容器id /bin/bash
我们在启动容器的过程,可能会碰到容器启动失败的情况。
五、Nginx
1.搜索Nginx
2.拉去Nginx
镜像
3.运行Nginx
镜像
docker run --name my_nginx
-d
-p 8081:80
-v /srv/web/logs:/var/log/nginx
-v /srv/web/conf/nginx.conf:/etc/nginx/nginx.conf
-v /srv/web/conf/default.conf:/etc/nginx/conf.d/default.conf
-v /srv/web/html:/usr/share/nginx/html
docker.io/nginx
说明
--name my_nginx 把容器起一个名字
-d 后台运行
-p 8081:80 将容器80端口映射到宿主机(服务器)8081端口
-v /srv/web/logs:/var/log/nginx
挂载目录, " : "前面是宿主机目录,后面是容器文件目录
docker.io/nginx 原来镜像名字
4.查看Nginx
容器
docker ps
六、实例之部署SpringBoot
1. 编写代码
package com.example.demo2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Service;
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
E e = (E) SpringApplication.run(Demo2Application.class, args).getBean("ss");
e.test();
}
@Service(value = "ss")
class E {
public void test() {
System.out.println("service1111111");
}
}
}
2. 打包jar
mvn clean package -Dmaven.test.skip=true
在target
目录找到jar
,重名lsb-helloworld
3. 编写Dockerfile
文件
FROM docker.io/adoptopenjdk/openjdk8
COPY lsb-helloworld.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
然后将jar
和Dockerfile
文件上传到Linux
服务器的同一目录
4. 运行Dockerfile
文件
docker build -t springio/gs-spring-boot-docker .
生成名为springio/gs-spring-boot-docker
的镜像
5. 运行镜像
docker run -p 8083:8083 springio/gs-spring-boot-docker
公众号
面向开发者的Docker实践的更多相关文章
- Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享
架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...
- PHP 开发者的 Docker 之旅
用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的.这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言.「PHP 是最好的语言」这个流传已久的梗,或 ...
- 【转】开发者可以使用Docker做什么?
有些开发者可能还是不明白 Docker 对自己到底有多大的用处,因此翻译 Docker 个人用例 这篇文章中来介绍 Docker 在普通开发者开发过程中的用例. Docker 如今赢得了许多关注,很多 ...
- Java面向切面原理与实践
Java面向切面原理与实践 一. 面向切面编程是什么 首先用一句话概括:面向切面编程(AOP)就是对某些具有相似点的代码进行增强. 相似点可以是同一个包.使用相同的注解.public的方法.以Impl ...
- docker实践之docker-compose部署mysql
文章目录 docker实践之docker-compose部署mysql 1.安装部署docker 2.编写docker-compose文件 3.编写配置文件和初始化文件 4.启动数据库 5.检查初始化 ...
- MaxCompute推出面向开发者的专属版本,普惠大数据开发者
3月20号,阿里云正式对外宣布推出MaxCompute产品的新规格-开发者版.MaxCompute开发者版是阿里云大数据计算服务发布的开发者专属版本.区别于原有的按量付费.按CU预付费规格,开发者版是 ...
- Docker实践之02-使用镜像及定制
目录 一.获取镜像 二.使用镜像启动容器实例 三.列出镜像 四.删除本地镜像 五.定制镜像 通过commit命令定制镜像 通过Dockerfile定制镜像 docker build的工作原理 dock ...
- centos7+ docker 实践部署docker及配置direct_lvm
转载于博客园:http://www.cnblogs.com/Andrew-XinFei/p/6245330.html 前言 Docker现在在后端是那么的火热..尤其当笔者了解了docker是什么.能 ...
- 【容器云】传统金融企业的 Docker 实践
基于 Docker 的容器云-Padis 目前市面上基于容器云的产品有很多,对于平安而言,则是基于 Docker 的 Padis 平台.所谓 Padis,全称是 PingAn Distribution ...
随机推荐
- 让图片适合在静态文本控件窗口大小 MFC
1.加入 IDC_STATIC1 静态文本控件. 2.为文本控件添加 STATIC 型变量 3.在OnInitDialog函数中添加以下代码 //设置该静态控件为显示位图的 m_bitmap.Modi ...
- ORCAD常用元件库说明
以下是ORCAD自带库文件的说明,路径:Cadence\Cadence_SPB_16.6\tools\capture\library 1' AMPLIFIER.OLB共182个零件,存放模拟放大器IC ...
- 用threejs实现三维全景图
网络上看到了3D全景图,发现threejs里面有一个库竟然可以实现,一下我贴出代码: <!DOCTYPE html> <html> <head> <meta ...
- Extjs——简单的Grid panel小实例
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- L18 批量归一化和残差网络
批量归一化(BatchNormalization) 对输入的标准化(浅层模型) 处理后的任意一个特征在数据集中所有样本上的均值为0.标准差为1. 标准化处理输入数据使各个特征的分布相近 批量归一化(深 ...
- 【08NOIP提高组】笨小猴
笨 小 猴 来自08年NOIP提高组的第一题 1.题目描述 [题目描述] 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头痛.经实验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体 ...
- Linux学习笔记(九)Vim文本编辑器的使用
Vim文本编辑器的使用 Vim的工作模式 1.命令模式 2.输入模式 3.编辑模式 进入Vim 1.使用Vim打开文件 2.直接进入指定位置 Vim基本命令 1.插入命令 2.光标移动命令 3.使用V ...
- Nginx(1)---安装及基础命令
一.简述 Nginx是一个高性能WEB服务器,除它之外Apache.Tomcat.Jetty.IIS,它们都是Web服务器 Nginx 相对基它WEB服务有什么优势:Tomcat.Jetty 面向j ...
- GoJS事件
1.阻止键盘事件 myDiagram.commandHandler.doKeyDown = function () { var e = myDiagram.lastInput; // Meta(Com ...
- PHP 获取前两页的url地址
通过隐藏表单控件 <input type="hidden" name="prevurl" value="<?php echo $_SERV ...