26

面向开发者的Docker实践

 4 years ago
source link: http://www.cnblogs.com/chenzhuantou/p/12856021.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

本文源码,请点击 learnSpringboot

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

一、 引入

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

AfIbquZ.png!web

二、快速入门

2.1 我为什么要用 Docker

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

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

QjamYfA.png!web

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

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

2.2 Docker 原理

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

2.3 一些名字解释

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

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

jmUrY3e.png!web

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

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

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

nUJvArR.png!web

三、安装 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

安装成功后显示

ZZBRfan.png!web

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

四、常用命令

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

NF32iaI.png!web

1. 启动、停止

# 启动 
service docker start

# 停止
service docker stop

2. 查看版本

docker -v

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

3. 搜索镜像

docker search jdk

Vbuaiqq.png!web

4. 拉取镜像

docker pull 镜像名

5. 查看镜像

docker images

Ffm6Jrb.png!web

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

rmEBneI.png!web

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

docker ps  -a

10.删除容器

docker rm 容器id

11.查看容器运行日志

docker logs  容器id

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

docker exec -it 容器id /bin/bash

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

五、 Nginx

1.搜索 Nginx

zeMV7bn.png!web

2.拉去 Nginx 镜像

JFvuA3r.png!web

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

EFJZniY.png!web

六、实例之部署 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"]

然后将 jarDockerfile 文件上传到 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

vQju2iU.png!web

公众号

2M3ABrv.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK