Java篇:Docker的介绍安装 和常用命令

摘要:
为什么dockerDocker会出现在文章目录中?容器映像库Docker安装。查看容器。删除图像。删除容器。部署应用程序。以MySQL为例。为什么docker出现在上图中?它解决了软件容器的运行环境和配置问题。容器虚拟化技术之前的虚拟机有助于持续集成并有助于整体发布,是一种安装环境的解决方案。

文章目录

为什么 出现docker

在这里插入图片描述

在上面这幅图,我们看到了,docker容器的优势,简单点数说,就是 解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

之前的虚拟机(virtual machine)就是带环境安装的一种解决方案。
它可以在一种操作系统里面运行另一种操作系统,比如在Windows 系统里面运行Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
graphic

虚拟机的缺点:

1 资源占用多 2 冗余步骤多 3 启动慢

便笺

由于前面虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

graphic

比较了 Docker 和传统虚拟化方式的不同之处:

*传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

*而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

  • 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

Docker的简介

在这里插入图片描述

Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将应用程序与该程序的依赖,打包在一个文件里面。这个文件就 Dockerfile运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。

在这里插入图片描述
特性 :
在docker的网站上提到了docker的典型场景:

  • Automating the packaging and deployment of applications(使应用的打包与部署自动化)
  • Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
  • Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
  • Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

这里我们先理解几个概念 :

容器(Container)

谈到容器这里可不是 装东西的容器,在这里容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
换句话说,镜像就是进程容器就是线程,线程是进程的最小的执行单元,而 容器就是镜像的最小执行单元, 容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
在这里插入图片描述

镜像(Image)

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

通过运行images启动容器,一个images是一个可执行的包,其中包括运行应用程序所需要的所有内容-代码,运行时,库、环境变量和配置文件。

以Java类为比喻,镜像就好比Java写好的类,容器就是Java类实例化后的对象,创建容器之前必须有镜像. 根据 镜像创建容器

仓库(Repository)

Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。 这里我们会讲到 Dockerhub
Docker hub是docker公司维护的公共仓库,用户可以免费使用,也可以购买私有仓库。在这里插入图片描述

Docker的安装

  1. Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

 uname -r
  1. 使用 root 权限登录 Centos。确保 yum 包更新到最新。
sudo yum update
  1. 卸载旧的 (如果安装过旧版本的话)
sudo yum remove docker  docker-common docker-selinux docker-engine
  1. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r

在这里插入图片描述

  1. 安装docker
sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce
  1. 启动加上开机自启动
sudo systemctl start docker
sudo systemctl enable docker

不想 自启动的话 那就

service start docker

查看是否安装成功

docker version

安装过后的配置文件

cat /etc/sysconfig/docker

在这里插入图片描述
现在 Docker的镜像拉取速度有点慢 我们改下配置

编辑该文件: vi /etc/docker/daemon.json 修改配置 // 如果该文件不存在就手动创建;说明:在centos7.x下,通过vi。
输入下面内容,如果存在就用逗号隔开,在加一个

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

常用操作

查看容器
docker ps 查看正在运行的容器
docker ps -a 查看所有的容器
docker ps -l 查看最后一次运行的容器
docker ps -f status=exited 查看停止的容器
删除镜像
docker rmi IMAGE_ID  删除指定镜像
docker rmi `docker images -q` 删除所有镜像
删除容器

(注意这里不要搞混, 根据镜像运行容器,一个镜像可以运行多个容器),当初我就是镜像容器傻傻分不清

docker rm $CONTAINER_ID/NAME   删除指定的容器(只能删除停止的容器)
docker rm $CONTAINER_ID/NAME -f  表示强制删除
docker rm `docker ps -a -q`   删除所有的容器
部署应用 以mysql为例

当然这里也可以指定版本 例如 docker pull mysql:latest 表示最新版
拉取镜像

docker pull mysql

查看镜像

docker images
docker run -di --name demo_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

上面命令 参数说明:

创建容器命令:docker run

  • -i:表示运行容器
  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
  • –name :为创建的容器命名。
  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

免责声明:文章转载自《Java篇:Docker的介绍安装 和常用命令》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HttpServletResponse和HttpServletRequest的简单实用SVProgressHUD下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vagrant package 打包自己的box镜像

关于如何在win下使用Vagrant和Virtual Box创建一台CentOS7虚拟机我的博客中有教程介绍:https://www.tiance.club/post/2370098709.html 搭建完毕后等虚拟机的细节都调整好后强烈建议打包成自己的镜像,以后需要在其他电脑安装虚拟机环境或者电脑的虚拟机出问题的时候可以直接一键还原,不然要重新搭建有点繁...

【Devops】 发布一个Python项目(Flask服务后端)到K8S环境

前言: 有一段时间没有更新博客了,今天给大家分享一下如何将一个python项目成功部署并运行到K8S环境,特做一个记录 准备工作 1. 编写一个python项目,我这边提供的一个Flask服务,提供接口的mock能力。(项目里面编写如下文件) dockerfile jenkinsfile deploy文件夹(内含: deploy.yaml   servi...

Node版本管理器NVM常用命令

NVM是什么?nvm (Node Version Manager) 是Nodejs版本管理器,可对不同的node版本快速进行切换。 为什么要用NVM?基于node的工具和项目越来越多,但是每个项目使用的node版本可能不一致,就会出现一些奇怪的问题。比如:自己电脑安装的是最新版的node,接手的项目使用的是低版本的node。那么我只有切换到低版本的node...

Android内核开发:理解和掌握repo工具【转】

本文转载自:http://ticktick.blog.51cto.com/823160/1653304 由于Android源码是用repo工具来管理的,因此,搞Android内核开发,首先要搞清楚repo是什么东西,它该怎么使用?作为《Android内核开发》系列文章的第二篇,我们首先谈谈对repo工具的理解和使用。 1. repo是什么? repo是一种...

Docker 安装 Python

Docker 安装 Python 方法一、docker pull python:3.5 查找 Docker Hub 上的 python 镜像: docker search python 这里我们拉取官方的镜像,标签为3.5 : docker pull python:3.5 等待下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为 py...

Composer 更换为国内镜像源(Packagist 镜像)

安装lavavel步骤: 安装composer (需要开启php_openssl扩展,否则报错) (https://getcomposer.org/) 到github下载laravel的最新发行版 (https://github.com/laravel/laravel/releases) 把下载的laravel-*.zip 解压缩到项目目录 通过comp...