docker 快速入门-动力节点学习笔记(自用)

docker 快速入门

目录

docker 快速入门

第一章 docker 概述

1.1 传统应用部署

1.2 虚拟化技术

1.3虚拟化技术的分类

1.4 虚拟化技术的优缺点

1.5 容器技术发展

1.6 Docker是什么

1.7容器和虚拟机的区别

1.8 为什么使用Docker

第二章 Docker 环境搭建

2.1 Docker的版本

2.2 Docker的安装

2.3 Docker 服务的启动

2.4 Docker服务信息

2.5 Docker使用初体验

第三章 Docker 核心组件

3.1 Docker架构

3.2 Docker的核心要素

3.3 镜像

3.4 容器

3.5 仓库

第四章 Docker 使用示例

4.1 Docker 安装MySQL

4.2 Docker 安装Nginx

4.3 Docker 安装Zookeeper

4.4 Dockers安装ActiveMQ(消息中间件)

第五章 Docker自定义镜像

5.1 Dockerfile文件

5.2 Dockerfile的基本结构

5.3 Dockerfile 指令

5.4 Dockerfile自定义镜像

5.5 镜像发布到仓库

第六章 Docker应用部署

6.1 部署一个SpringBoot 项目

6.2 Docker部署jar包SpringBoot程序


第一章 docker 概述

1.1 传统应用部署

  • 购买一台硬件服务器

  • 在服务器上安装配置操作系统

  • 在操作系统上配置运行环境

  • 部署并运行应用

缺点:

  • 部署应用非常慢

  • 需要花费的成本非常高,(时间成本、服务器成本)

  • 应用迁移麻烦,又得重新重复部署应用的操作

解决------出现虚拟化技术

1.2 虚拟化技术

是一种计算机资源管理技术,将计算机的各种资源,比如服务器,cpu,内存及存储等,予以抽象和转换后呈现出的一套新的硬件资源环境。

1.3虚拟化技术的分类

  • 硬件虚拟化(hardware-level-virtualization)

  • 操作系统级虚拟化 (os-level-virtuallization)

1.3.1 硬件虚拟化

  • 核心技术:Hypervisor,

  • 代表:VMWare 桌面版虚拟机使用该技术

1.4 虚拟化技术的优缺点

优点:一台物理服务器,可以虚拟化出来多个虚拟的服务器,充分利用计算机资源。

缺点:

  1. 每创建一个虚拟机的时候,都会创建一个操作系统,会大大浪费资源

  2. 环境兼容性问题,开发时,环境运行正常,部署到虚拟机环境测试时候可能会发生错误。

1.5 容器技术发展

基于硬件级别的虚拟化技术存在的缺陷和不足,发展出新的虚拟化技术:操作系统级虚拟化技术。

操作系统级虚拟化技术:是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,该技术也称为容器化技术

容器化技术:Docker是目前最流行的一种实现。Docker基于LXC技术,Linux Container,内核虚拟化技术。可以提供轻量级的虚拟化,以便隔离资源和进程。和 宿主机使用同一套内核,性能损耗小,Docker技术的面世,将LXC技术发扬光大。

1.6 Docker是什么

  1. Docker是一个开源的应用容器引擎,它基于Google公司推出的Go语言实现,项目代码托管在github

  2. Docker技术让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,打包好的容器可以发布到任何流行的Linux服务器上运行。这样可以解决开发环境和运行环境不一致的问题。

  3. Docker彻底释放了虚拟化的为例,减低计算机资源供应的成本,Docker重新定义程序开发测试、交付、和部署的过程、Docker提出了构建一次,到处运行的理念,让应用的开发、测试、部署和分发都变得前所未有的高效和轻松。

总结:Docker是对软件和其依赖环境的标准化打包,应用之间相互隔离,共享一个os kernel(解决资源浪费问题),可运行在许多主流的操作系统上。

注意:Docker本身不是容器,只是操作容器的引擎。

1.7容器和虚拟机的区别

容器:是代码和其依赖环境打包出来的一个集合。

虚拟机:从物理层面上,分出来的一个操作系统。

  • 多个容器可以运行在同一台物理服务器上,并共享一个操作系统的内核资源。

  • 多个虚拟机也可以运行在同一台机器上,但每个虚拟机都需要有一个自己的完整的操作系统。

容器是本地操作系统上实现虚拟化,直接复用本地主机的操作系统,不需要单独安装操作系统,而传统的虚拟化技术,需要单独安装每个虚拟机的操作系统。

特性容器虚拟机
启动秒级分钟级
硬盘空间一般为几十MB一般10GB
性能接近原生弱于原生
系统支持量单机支持上千个容器一般几十个
操作系统与宿主机共享操作系统宿主机os上运行虚拟机os

1.8 为什么使用Docker

  • Docker容器的启动要比虚拟机快得多,可以在秒级实现

  • Docker对系统的资源利用率很高,一台主机上可以同时运行数千个docker容器

  • 容器除了运行其中的应用以外,基本不消耗额外的系统资源,使得系统的应用的性能很高。

  • Docker可以快速的交付和部署,大量地节约开发成本,测试,部署的时间,对于开发和运维人员来说,一次创建和配置,就可以在任意地方正常运行。

  • Docker容器的运行不需要额外的hypervior支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

  • 更轻松地迁移和扩展,Docker容器几乎可以在任意平台上运行,兼容性,可以让用户轻松地将一个应用从一个平台迁移到另外一个平台。

第二章 Docker 环境搭建

2.1 Docker的版本

  • DockerCE 免费社区版

  • DockerEE 付费企业版

Docker官网:Docker: Accelerated, Containerized Application Development

2.2 Docker的安装

Docker不是容器,只是一个管理容器的引擎。

使用Linnux的centos 7 ,学习Docker更推荐在Linux

2.2.1 遇到无法通过finalshell连接虚拟机问题

当前虚拟机centOs7,

用户:root

密码:root (linux下输入密码不可见*)

查看本机ip地址

 ipconfig

本地地址出现127.0.0.1问题

输入:dhclient -v 进行修复

再继续ipconfig

可以正确获取ip

打开本地电脑的cmd,输入

  ping 192.168.40.129

ping 通了了

登录finalshell 创建连接输入地址,用户名和密码就可以正常连接。

======================================================================

继续Docker的安装

(linux操作)

  1. 检查该虚拟机有无安装Docker

    •  yum list installed | grep docker
  2. 安装Docker

    •  yum install docker -y
    • 安装成功使用

       docker -verson 或者docker-v 查看docker是否安装成功
    • 卸载

       yum remove docker -y

2.3 Docker 服务的启动

安装之后启动Docker 服务

启动:systemctl start docker 或者 service docker start

停止:systemctl stop docker 或者 service docker stop

重启: systemctl restart docker或者 service docker restart

检查docker进程的运行状态:

systemctl status docker 或者 service docker status

查看docker进程:ps -ef | grep docker

2.4 Docker服务信息

docker info 查看docker系统信息

docker 查看所有的帮助信息

docker commond -help 查看某个命令的帮助信息

2.5 Docker使用初体验

2.5.1 Docker的运行机制

Docker的底层运行原理:

Docker服务启动->

下载镜像 ->

启动该镜像得到一个容器->

容器里运行着我们想要的程序;

2.5.2 第一个Docker容器

下载运行第一个Docker容器:

步骤:

  1. 将Docker服务启动;

     service docker start
  2. 下载一个镜像,Docker运行一个容器前需要本地存在对应得镜像,如果镜像不存在本地,Docker会从镜像仓库下载(默认是DockerHub公共注册服务器中的仓库 Docker)

centOS下如果下载(pull)镜像?

从docker hub搜索镜像,也可以使用命令行使用命令搜索要使用的镜像,比如docker search tomcat 进行搜索,然后下载所需要的镜像:

  • 下载镜像: docker pull tomcat

  • 运行镜像: docker run tomcat (前台运行,要后台运行加参数 -d)

  • 运行指定版本镜像: docker run tomcat:9.0.58

 docker run -d tomcat:9.0.58
  • 显示本地已有镜像: docker images

  • 查看镜像运行状态:docker ps

  •  ps -ef | grep  tomcat  检查tomcat镜像是否启动成功

2.5.3 进入Docker容器 - 端口映射

  • 关闭tomcat镜像

    • 查看CONTAINER ID ----- docker ps

       [root@localhost ~]# docker ps
       CONTAINER ID    IMAGE       COMMAND             CREATED             STATUS              PORTS               NAMES
       e2d171d47ebd    tomcat:9.0.58   "catalina.sh run"   39 minutes ago   Up 39 minutes    8080/tcp            sad_mccarthy
    • 关闭镜像 ---docker stop e2d171d47ebd

  • 端口映射 -做端口映射,就可以docker容器和宿主机进行通讯,本机浏览器可以访问tomcat

     docker run -d -p 8080:8080 tomcat:9.0.58

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 816d3d77fc0d tomcat:9.0.58 "catalina.sh run" 7 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp focused_leakey

端口映射:

linux端口得8080对应容器里面得8080

2.5.4 解决docker内tomcat容器启动成功后,无法访问tomcat页面(404)问题

如题,首先 tomcat镜像存在,并且外部映射启动成功,

通过 docker ps也可以查看到正在运行

 [root@localhost bin]# docker images
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 docker.io/tomcat    latest              ab37a470285a        10 days ago         474 MB
 docker.io/tomcat    9.0.58              1fd0bf15d6bd        9 months ago        680 MB
 [root@localhost bin]# docker ps
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
 56f4b8a5f8d6        tomcat:9.0.58       "catalina.sh run"   58 seconds ago      Up 57 seconds       0.0.0.0:8080->8080/tcp   sharp_visvesvaraya
 ​

通过 docker exec -it 容器id(即已启动的tomcat容器id) /bin/bash 命令进入容器内部,

然后输入ls 查看

 [root@localhost bin]# docker ps
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
 67989c421ec5        tomcat:9.0.58       "catalina.sh run"   2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp   infallible_raman
 [root@localhost bin]# docker exec -it 67989c421ec5 /bin/bash
 root@67989c421ec5:/usr/local/tomcat# ls
 BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
 ​

查了次发现webapps文件夹下为空,怪不得tomcat 404找不到

 root@67989c421ec5:/usr/local/tomcat# ls
 BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
 root@67989c421ec5:/usr/local/tomcat# ls webapps
 root@67989c421ec5:/usr/local/tomcat# ls webapps
 ​

下面把webapps这个空文件夹删除,把webapps.dist当做新的webapps文件

命令是 rm -rf webapps 强制删除

然后输入 mv webapps.dist webapps 把webapps.dist文件 当做新的webapps文件,

然后依次输入ls 和ls webapps查看新的webapps文件下是否有东西

 root@67989c421ec5:/usr/local/tomcat# rm -rf webapps
 root@67989c421ec5:/usr/local/tomcat# mv webapps.dist webapps
 root@67989c421ec5:/usr/local/tomcat# ls webapps
 ROOT  docs  examples  host-manager  manager
 root@67989c421ec5:/usr/local/tomcat# exit
 exit
 ​

这时 输入exit命令退出该目录,输入 docker ps 查看一下正在运行的容器

 [root@localhost bin]# docker ps
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
 67989c421ec5        tomcat:9.0.58       "catalina.sh run"   5 minutes ago       Up 5 minutes        0.0.0.0:8080->8080/tcp   infallible_raman
 ​

外部浏览器访问tomcat 成功

2.5.5 进入Docker 容器

进入容器

 docker exec -it 67989c421ec5(容器id)bash

i表示交互式得,保持标准输入流打开

t表示虚拟控制台

退出容器

exit

进入容器

[root@localhost bin]# docker exec -it 67989c421ec5 bash
root@67989c421ec5:/usr/local/tomcat# ls

ls -l c查看

root@67989c421ec5:/usr/local/tomcat# ls -l
total 128
-rw-r--r--. 1 root root 18970 Jan 15  2022 BUILDING.txt
-rw-r--r--. 1 root root  6210 Jan 15  2022 CONTRIBUTING.md
-rw-r--r--. 1 root root 57092 Jan 15  2022 LICENSE
-rw-r--r--. 1 root root  2333 Jan 15  2022 NOTICE
-rw-r--r--. 1 root root  3378 Jan 15  2022 README.md
-rw-r--r--. 1 root root  6898 Jan 15  2022 RELEASE-NOTES
-rw-r--r--. 1 root root 16507 Jan 15  2022 RUNNING.txt
drwxr-xr-x. 2 root root  4096 Feb 12  2022 bin
drwxr-xr-x. 1 root root    22 Nov 18 02:59 conf
drwxr-xr-x. 2 root root  4096 Feb 12  2022 lib
drwxrwxrwx. 1 root root   177 Nov 18 02:59 logs
drwxr-xr-x. 2 root root   159 Feb 12  2022 native-jni-lib
drwxrwxrwx. 2 root root    30 Feb 12  2022 temp
drwxr-xr-x. 7 root root    81 Jan 15  2022 webapps
drwxrwxrwx. 1 root root    22 Nov 18 03:05 work

应用一般放在webapps中

root@67989c421ec5:/usr/local/tomcat/webapps# ls -l
total 4
drwxr-xr-x.  3 root root  223 Feb 12  2022 ROOT
drwxr-xr-x. 15 root root 4096 Feb 12  2022 docs
drwxr-xr-x.  7 root root   99 Feb 12  2022 examples
drwxr-xr-x.  6 root root   79 Feb 12  2022 host-manager
drwxr-xr-x.  6 root root  114 Feb 12  2022 manage

第三章 Docker 核心组件

3.1 Docker架构

Docker采用客户端-服务器(CS)架构模式,使用远程api来构建和管理Docker容器。

Docker容器通过Docker镜像来创建。

镜像和容器的关系就像是类与对象

Docker面向对象
镜像
容器对象

3.2 Docker的核心要素

镜像(Images)、容器(Container)、仓库(Repository)

Docker不是容器是管理容器的引擎。

3.3 镜像

3.3.1 镜像的基本概念

Docker镜像就是一个只读的模板,可以用来创建Docker容器。

例如:一个镜像可以包含一个完整的centos操作系统,里面安装tomcat及其需要的其它应用程序。

如:tomcat镜像,里面就会包含java的运行环境。

 root@67989c421ec5:/# java -version
 openjdk version "11.0.14.1" 2022-02-08
 ​

3.3.2 镜像的组成结构

  • bootfs 引导文件系统

    • rootfs root文件系统(通常就是某种操作系统,centos、ubuntu)

    • 其它文件系统环境

3.3.3 镜像的日常操作

  1. 下载镜像:下载redis ,直接去官网找: Docker 默认下载最新版,可以指定版本:1.01.1,冒号后面接版本号

     docker pull redis:latest
  2. 列出已下载镜像

     docker images 或者 docker images redis
  3. 运行镜像

     docker run -d redis  -d表示后台运行
     ps -ef | grep redis  查看redis进程
  4. 查看容器镜像的状态

     docker ps
    docker exec -it (镜像id) bash 进入redis容器
  5. 删除镜像

    docker rmi redis:latest

    注意是rmi ,不是rm

    rm是删除容器。

3.4 容器

3.4.1 容器的基本概念

容器是镜像创建的运行实例,可以被启动、停止、删除;每个容器都是相互隔离的,保证安全的平台。可以把容器看作一个简易版的linux环境。

Docker利用容器来运行应用,镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

3.4.2 容器的日常操作

启动容器有俩种方式:

  • 基于镜像新建一个容器并启动

  • 将处于终止状态的容器重新启动

通过镜像启动容器:

docker run -d redis

加端口映射

docker run -d -p 6379:6379 redis

查看运行中的容器:

docker ps

查看所有的容器

docker ps -a

开启容器

docker start 容器id 或容器名称

停止容器

docker stop 容器id 或容器名称

开启容器

docker start 容器id 或容器名称

因为docker容器太轻量级了,很多时候,用户可以随时创建和删除容器

删除容器

docker rm 容器id 或容器名称

删除时需要保证容器状态时停止状态,否则会报错

进入容器

docker  exec -it 容器id 或容器名称 bash

停止容器

docker stop 容器id 或容器名称

已经停止的容器可以使用命令docker start来启动

使用

docker inspect +  容器id 或容器名称

查看容器的信息

停止全部运行中的容器:

docker stop $(docker ps -q)

docker ps -q  仅仅把容器的id列出来

删除全部容器

docker rm $(docker ps -aq)

一条命令实现停用并删除容器

docker stop $(docker ps -q) & docker rm $(docker ps -aq)

3.5 仓库

3.5.1 仓库的概念

仓库是集中存放镜像文件的地点,有时候会把仓库和仓库注册服务器(Registry)看作同一事物。

实际上仓库注册服务器上往往存放多个仓库,

仓库里面存放多个镜像

每个镜像存放不同标签(tag)

仓库分为公开仓库public和私有仓库private

最大的公开仓库是Docker Hub Container Image Library | App Containerization

用户也可以本地网络创建一个私有的仓库。

当用户创建自己的镜像之后就可以使用push命令,将其上传到公有或私有的仓库,这样下次在另外一台机器上使用这个镜像的时候只需要从仓库pull即可。

3.5.2 仓库的日常操作

用户使用 docker search 命令来查找官方仓库中的镜像:如

docker search rabbitmq

第四章 Docker 使用示例

4.1 Docker 安装MySQL

  • 下载MySQL镜像(mysql )

    docker pull mysql
    docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

    -e 是指定环境变量

  • 进入MySQL容器

    docker exec -it 732d8fd42a3d bash
  • 进入mysql

    bash-4.4# mysql -uroot -p123456
  • 修改密码

    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'

    此时若存在远程访问连接数据库失败的情况,检查数据库远程访问权限是否开启,MySQL8.0之后的版本默认开启。

4.2 Docker 安装Nginx

  • 下载Nginx 镜像

    docker pull nginx
    docker run -p 80:80 -d nginx
  • 进入容器

    docker exec -it f86d2ef2ca21 bash

  • 浏览器访问Nginx

     http://192.168.40.129:80

  • Nginx部署静态网站

4.3 Docker 安装Zookeeper

  • 下载Zookeeper镜像

     docker pull zookeeper
     docker run -p 2181:2181 -d zookeeper
  • 进入容器

     docker exec -it f86d2ef2ca21 bash
  • 客户端访问

4.4 Dockers安装ActiveMQ(消息中间件)

在docker-hub 上没有官方版本

  • 下载ActiveMQ镜像

      docker pull webcenter/activemq
     docker run -p 8161:8161 -d activemq

    报错:

     [root@localhost ~]# docker run -p 8161:8161 -d activemq:latest
     Unable to find image 'activemq:latest' locally
     Trying to pull repository docker.io/library/activemq ... 
     /usr/bin/docker-current: repository docker.io/activemq not found: does not exist or no pull access.
     See '/usr/bin/docker-current run --help'.
    docker run -p 8161:8161 -d webcenter/activemq
    

  • 进入容器

    docker exec -it f86d2ef2ca21 bash
  • 浏览器访问ActiveMQ

第五章 Docker自定义镜像

5.1 Dockerfile文件

Dockerfile用于构建Docker镜像,是一行行命令语句构成的,基于这些语句就可以构建一个镜像。

Dockerfile样例:

5.2 Dockerfile的基本结构

一般分为四部分:

  • 基础镜像信息:

  • 维护者信息:

  • 镜像操作指令:

  • 容器启动时执行的指令:

5.3 Dockerfile 指令

  • FROM

    格式为

    FROM<image> 或 FROM <image>:<tag>

    Dockerfile 文件第一条指令必须为FROM指令。如果在同一个Dockerfile中创建多个镜像的话,FROM指令需要一一对应,每个镜像一个

  • MANITAINER

    格式:

    MANITAINER<name>

    指定维护者信息

  • ENV

    格式:

    ENV<key><value>

    指定一个环境变量,被后续的run指令执行,并在容器运行时保持。

  • ADD

    格式:

    ADD<src><dest>
    复制指定的<src>到容器中的<dest>
  • EXPOSE

    格式:

    EXPOSE<port>[<post>...]

    告诉Docker服务器容器暴露的端口号,供互联系统使用,在启动容器时候需要通过-p 映射端口,Docker主机会自动分配一个端口转发到指定端口。

  • RUN

    格式:

    RUN<command>

    run 指令是当前镜像基础上执行指令,并提交新的镜像,当命令行比较长的时候可以使用\换行

  • CMD

    指定启动容器时执行的命令,每个Dockerfile 只能有一条CMD命令,多条会被最后一条所覆盖。

5.4 Dockerfile自定义镜像

5.4.1 自定义JDK镜像

FROM centos:latest
MAINTAINER zhoushurui
ADD jdk-8u281-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_281
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version

  • 在根目录下创建docker文件夹

  • 放入jdk的tar压缩包

  • vim 编写Dockerfile

    • 将上面Dockerfile内容写入

  • 构建镜像

    docker build -t zhoushurui_jdk1.8.0281 .

    最后有个点.

    代表当前目录下的Dockerfile文件,代表通过找寻Dockerfile来构建镜像

  • 构建过程

     [root@localhost docker]# docker build -t zhoushurui_jdk1.8.0281 .
     Sending build context to Docker daemon 143.7 MB
     Step 1/7 : FROM centos:latest
     Trying to pull repository docker.io/library/centos ... 
     latest: Pulling from docker.io/library/centos
     a1d0c7532777: Pull complete 
     Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
     Status: Downloaded newer image for docker.io/centos:latest
      ---> 5d0da3dc9764
     Step 2/7 : MAINTAINER zhoushurui
      ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
      ---> Running in b2517f341a68
      ---> 3bd79502430a
     Removing intermediate container b2517f341a68
     Step 3/7 : ADD jdk-8u281-linux-x64.tar.gz /usr/local
      ---> 9f0d3a39bf3e
     Removing intermediate container 1fbba7d4bb96
     Step 4/7 : ENV JAVA_HOME /usr/local/jdk1.8.0_281
      ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
      ---> Running in 91e6df1b742f
      ---> 62245728c59d
     Removing intermediate container 91e6df1b742f
     Step 5/7 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
      ---> Running in 159fccd9dcc1
      ---> d44ae4ca4fa6
     Removing intermediate container 159fccd9dcc1
     Step 6/7 : ENV PATH $PATH:$JAVA_HOME/bin
      ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
      ---> Running in c33697638c6e
      ---> 5af8613b7e00
     Removing intermediate container c33697638c6e
     Step 7/7 : CMD java-version
      ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
      ---> Running in 9fe88c6880df
      ---> 913bbe29d3d1
     Removing intermediate container 9fe88c6880df
     Successfully built 913bbe29d3d1
     ​

    创建成功的镜像编号913bbe29d3d1

    通过docker images 查看本地镜像

  • 运行容器

     docker run -d 913bbe29d3d1

5.4.1.1出现问题WARNING: IPv4 forwarding is disabled. Networking will not work.

是没有开启转发,docker网桥配置完后,需要开启转发,不然容器启动后,就会没有网络,配置/etc/sysctl.conf,添加net.ipv4.ip_forward=1

解决:

 vim /etc/sysctl.conf
 ​
 net.ipv4.ip_forward=1    #添加此行配置
 ​

重启network和docker服务

 systemctl restart network && systemctl restart docker

查看是否修改成功

  sysctl net.ipv4.ip_forward

  • 运行成功

     [root@localhost docker]# docker run bad754e2fa78
     java version "1.8.0_281"
     Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
     Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
     ​

5.4.2 自定义Tomcat镜像

  • 新定义Dockerfile文件(老的dockerfile改名Dockerfile-JDK)

    FROM zhoushurui_jdk1.8.0281 
    MAINTAINER zhoushurui
    ADD apache-tomcat-9.0.58.tar.gz /usr/local
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.58
    ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    EXPOSE 8080
    CMD /usr/local/apache-tomcat-9.0.58/bin/catalina.sh run
  • 构建镜像

    docker build -t zhoushurui-tomcat-9.0.58 .

    最后有个. 不能少

  • 运行镜像

    docker run -d -p 8080:8080 e1619a85a006 

5.4.2 自定义MySQL镜像

  • 定义Dockerfile文件

     FROM centos:centos6
     MAINTAINER zhoushurui
     RUN yum install  mysql-server mysql -y
     RUN /etc/init.d/mysqld start &&\mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456' WITH GRANT OPTION;"&&\mysql -uroot -p123456 -e "show databases;"
     EXPOSE 3306
     CMD /usr//bin/mysqld_safe
     ​
     FROM centos
     RUN ["echo", "start"]
     # 编译redis工具
     RUN yum install -y gcc gcc-c++ net-tools make
     # 切换工作目录(容器目录)
     WORKDIR /usr/local/redis
     # 复制并解压redis源码包
     ADD redis-6.0.16.tar.gz .
     WORKDIR /usr/local/redis/redis-6.0.16/src
     RUN make && make install
     WORKDIR /usr/local/redis/redis-6.0.16
     # 复制本地配置到redis中
     ADD redis.conf ./demo.conf
     WORKDIR /usr/local/redis/redis-6.0.16/src
     CMD ["./redis-server", "../demo.conf"]
     ​

  • 构建镜像

     docker build -t zhoushurui-mysql .
  • 运行镜像

    docker run -d -p 3306:3306 

5.4.3 自定义redis镜像

  • Dockerfile

     FROM centos:latest
     MAINTAINER zhoushurui
     ADD redis-6.0.16.tar.gz /usr/local
     ​
     EXPOSE 6379
     CMD /usr/bin/redis-server
  • 构建镜像

     docker build -t zhoushurui-reids .
  • 运行镜像

     docker run -d -p 6379:6379 dasd531dad1a3

5.5 镜像发布到仓库

5.5.1 阿里云容器仓库

网址:容器镜像服务 (aliyun.com)

5.5.2 注册阿里云镜像仓库

支付宝登录

5.5.3 发布镜像阿里云镜像仓库

进入管理中心-镜像仓库菜单-没有仓库需要创建镜像仓库-对自己的镜像仓库点击管理链接。

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

推送:

imageId:e1619a85a006

  • 上传

  docker tag e1619a85a006 registry.cn-hangzhou.aliyuncs.com/zhoushurui/zsrtest:latest
  docker push registry.cn-hangzhou.aliyuncs.com/zhoushurui/zsrtest:latest

  • 上传成功

 REPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZE
 registry.cn-hangzhou.aliyuncs.com/zhoushurui/zsrtest   latest              e1619a85a006        3 hours ago         604 MB
 zhoushurui-tomcat-9.0.58                               latest              e1619a85a006        3 hours ago         604 MB
 zhoushurui_jdk1.8.0281                                 latest              bad754e2fa78        4 hours ago         588 MB
 docker.io/mysql                                        latest              3842e9cdffd2        4 days ago          538 MB
 docker.io/redis                                        latest              3358aea34e8c        5 days ago          117 MB
 ​

5.5.4 镜像加速

Docker-Hub 镜像加速

/etc/docker/daemon.json

加上

  "registry-mirrors": ["https://m42v7hv8.mirror.aliyuncs.com"]

第六章 Docker应用部署

6.1 部署一个SpringBoot 项目

  1. 将开发好的springboot程序打包成jar包或者war包 (jar包代表java程序,war包代表web程序)

    • maven 打包jar包和war包

  2. 将打好的jar包或者war包上传到Linux的某个目录下:/root/docker

  3. 定义Dockerfile文件,用于创建项目的镜像

6.2 Docker部署jar包SpringBoot程序

6.2.1 定义jar包程序Dockerfile文件

 FROM zhoushurui_jdk1.8.0281
 MAINTAINER zhoushurui
 ADD dongming-api.jar/opt
 RUN chmod +x/opt/dongming-api.jar
 CMD java-jar /opt/dongming-api.jar

  • 构建镜像

  docker build -t dongming-api-jar .
  • 运行容器

 docker run -d ab108f0849c0

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值