生产环境部署与协同开发 Docker(一)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 生产环境部署与协同开发 Docker(一)

一、Docker介绍和安装

1.1 什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

logo解释:

标志是一头鲸鱼携带着一堆容器。它正在向您发送这些信息的途中。Docker直译过来是码头工人,然而Docker给人的第一感觉是容器,容器技术英译为Linux Container, Container的直译有集装箱,容器两个意思。

什么是"集装箱技术"

我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响于是乎,IT领域借鉴了这一理念,大家就在想,有没有可能大家 只需要关注程序本身?

我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色, 「在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响」

Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。

重心:

Docker其实就是可以打包程序和运行环境,把环境和程序一起发布的容器。

1.2 为什么要使用Docker

Docker容器虚拟化的好处

开发者需要能方便高效构建应用,并且任何时间任何地点都可以获取。就比如我在本地将jdk和tomcat打包直接放到阿里云平台上,就不需要在阿里云上配置环境了。这样可以节省时间和降低风险,提高开发效率。

Docker在开发和运维中的优势

对开发和运维( DevOps)人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常地运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。

优势:

  • 更快速的交付和部署
  • 更高效的资源利用
  • 更轻松的迁移和扩展
  • 更简单的更新管理

Docker与虚拟机比较

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势。

特性 容器 虚拟机
启动速度 秒级 分钟级
磁盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个
隔离性 完全隔离 完全隔离

1.3 虚拟化与Docker

虚拟化技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化或通常说的服务器虚拟化。

简单的说,「虚拟化」,顾名思义,就是「虚拟」的,是「假」的,是形而上的,是观念上、逻辑上的划分。

举栗说明

假设你现在手头上有一套房子,并且你要把它给租出去,租金的市场价是2000元/月。那么有没有办法把它租得更贵,获得6000元的租金呢?你想到了两个办法:

  1. 找一个不差钱的傻X租户,让他每月交6000元,但是这种人不大好找。
  2. 把房子拆成4个小房子租给4个单身狗,租金为1500元/人/月。

这些房子其实就是一些电脑资源,例如服务器啊、内存啊、网络啊等等。虚拟化技术就是将一套房子划分为4个功能完善的小房子,提高资源的使用效率。

虚拟化分类:

  • 完全虚拟化(VMware)
  • 硬件辅助虚拟化
  • 部分虚拟化
  • 超虚拟机化
  • 操作系统虚拟化 (docker)

什么是物理机

什么是虚拟机

什么是Docker

1.4 Docker的核心概念

Docker技术的三大核心概念,分别是:

  • 镜像(Image)
  • 容器 (Container)
  • 仓库 (Repository)

Docker镜像

当我们使用 Docker 运行一个应用程序的时候,我们需要首先定义一个 Docker 镜像。Docker 镜像是一个只读模板,包含运行应用程序所需的所有内容,例如代码、库文件、运行环境等等。也可以把它看作是一个容易复制和分享的“快照”。

Docker 镜像是由一个或多个文件系统层构成,每个文件系统层都包含着一个应用程序运行所需的不同部分。例如一个镜像可能包含操作系统,另一个镜像可能只包含 Django 应用程序及其依赖项。这些文件系统层会形成一个完整镜像,供 Docker 环境使用。

镜像从何而来

  • 从Docker Hub下载 maven-> 中央仓库
  • 通过Docker file自己创建出来

Docker容器

相对于镜像,容器包含的内容要比镜像更丰富,容器除了有镜像的内容之外,还具有独立的文件系统、运行时状态和网络栈等信息。 具体来说,一个镜像只是一个只读的文件系统,其中包含了应用程序运行所需的各种文件和依赖,而容器则是一个可运行的实例,它在启动时会从镜像创建并启动,它有自己的文件系统、进程空间、网络和运行时状态,容器中的文件系统是可写的,并且可以在容器运行时随意修改。另外,容器还有独立的网络和环境变量等上下文信息。 因此,镜像和容器虽然有相似之处,但它们的作用不同,具有不同的特性和功能。镜像是一种打包和分发应用程序的标准格式,是一种“静态”的概念,而容器则是镜像的“动态”实例,是真正运行应用程序的载体。容器是镜像的运行时状态,拥有更完整的运行环境和更强的动态交互能力。

注意:

容器和镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,可以记住这个简单的公式:容器 = 容器镜像 + 可读可写层

Docker仓库

     Docker 仓库是一个集中存储、管理和分享 Docker 镜像的平台。它可以供开发者或组织存储和分享创建的 Docker 镜像,并可用作构建、测试和部署应用程序的中心化仓库。在 Docker 架构中,一个 Docker 镜像由多个层次组成的文件系统构成。而 Docker 仓库是用于存储这些 Docker 镜像的平台,并且支持创建私有或公共镜像。

     Docker 仓库分为两类:公共仓库和私有仓库。最著名的是公共 Docker Hub 仓库,它是基于互联网上的 Docker 镜像的公共服务,使得全球的开发者可以轻松地分享和获取 Docker 镜像资源,并且通过命令行很容易地访问公共仓库中的镜像。除此之外,Docker 还允许用户创建私有仓库,可以通过企业内部网络,来实现对项目特定的镜像访问和使用。私有仓库提供了更高的安全性和控制级别,让团队内部可以在不向公众公开应用和环境的情况下,更好地管理 Docker 镜像。

      总的来说,Docker 仓库是构建一个完整的 Docker 生态系统中非常重要的一环,可以方便地存储和共享 Docker 镜像,提高开发效率和部署速度。

 

注意:

Docker利用仓库管理镜像的设计理念与Maven非常相似

咱们再来理解docker的两句口号就更好理解了

  • 「Build, Ship and Run (搭建,发送,运行)」
  • 「Build once,Run anywhere (搭建一次,到处运行)」

1.5 Docker安装

1、系统环境

序号 软件 版本
1 Centos 7.5
2 Linux内核 3.8之上

解释:

CentOS是一款基于Linux操作系统的免费、开源、企业级的操作系统,它是由Red Hat Enterprise Linux源代码编译而来的。CentOS具有可靠的性能、稳定性和安全性,因此被广泛应用于服务器和企业级应用。CentOS提供了许多功能性强大的服务和软件,比如Web服务器、数据库服务器、邮件服务器等。CentOS的开发和维护由社区志愿者组成的开发团队进行。

CentOS是一个基于Linux内核的操作系统,它是开源的且免费。

Linux是一个开放源代码的操作系统内核,更像是其他许多操作系统的“底层”。以下是CentOS和Linux之间的区别:

  1. CentOS是一种Linux操作系统,但Linux并不一定是由CentOS提供。Linux是一个底层内核,而CentOS是基于这个内核的衍生操作系统。
  2. CentOS是免费的,而其他一些Linux发行版可能需要支付许可费用。
  3. CentOS是由社区管理和支持的,而Linux由一个大型社区和几个大公司支持和开发。
  4. CentOS通常在企业环境中应用得更广泛,而Linux则更广泛地应用于许多设备和场景(例如, Android手机、智能电视、路由器、计算机等)。

总的来说,CentOS和Linux都是可靠和可定制的操作系统,具有广泛的应用领域。差异在于CentOS是一种特定的 Linux 发行版,而 Linux 更像是一个底层内核。

2、关闭防火墙

systemctl stop firewalld

3、关闭selinux

vim /etc/selinux/config
SELINUX=disabled

4、安装docker引擎

yum install -y  docker

5、启动docker

systemctl start docker

6、设置docker自启动

systemctl enable docker

7、测试是否安装成功

docker run hello-world

二、Docker核心命令

2.1 镜像命令

Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。

镜像下载

镜像是Docker运行容器的前提。

语法格式:

docker pull 镜像名字:[tag]
docker pull centos   #下载最新的centos版本

注意:

如果不指定tag,则下载Docker Hub公共注册服务器中仓库的最新版本。

查看镜像

列出本地主机上已有的镜像。

[root@localhost ~]# docker images

镜像搜索

搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像。

docker search  [镜像名字]

删除镜像

docker rmi  -f  源名字
docker rmi  -f image id

2.2 容器命令

当我们有了镜像,才可以创建容器, 创建一个centos容器来学习

创建容器(create -it命令)

Docker的容器十分轻量级,用户可以随时创建或者删除容器。容器的创建依赖镜像。

docker create -it 镜像名字

注意:

使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。

列出容器 (ps 命令)

docker ps

参数:

  • -a: 显示未启动容器
  • -q:返回容器id号

开启容器(start命令)

docker start 容器id(或者是容器id前两位)

新建并启动容器(run命令)

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态( stopped)的容器重新启动。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。

docker run 镜像名字 /bin/echo '启动时显示的信息'

注意:这样创建的容器在输出信息后就销毁了。

Docker在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
  • 利用镜像创建并启动一个容器。
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
  • 从地址池配置一个IP地址给容器。
  • 执行用户指定的应用程序。
  • 执行完毕后容器被终止。

守护态运行

更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。用户可以通过添加-d参数来实现。

docker run -d 镜像名字 /bin/sh -c  "while true; do echo hello world ;sleep 1 ;done"

下面命令则启动一个bash端,运行用户交互:

docker run -t -i 镜像名字  /bin/bash

终止容器(stop命令)

docker stop 容器id

处于终止状态的容器,可以通过docker start命令来重新启动:

docker start 容器id

此外,docker restart命令会将一个运行态的容器终止,然后再重新启动

docker restart 容器id

进入容器(exec命令

docker exec -it 容器id  /bin/bash

注意:

进入容器的前提是容器是开着的。容器与外面的环境是完全隔离的,容器内的目录有些可能会和外面的目录相同。

退出容器

#如果docker容器在启动的时候没有加 -d 参数
exit # 会直接停止同期并退出
Ctrt + p + q # 容器不停止 并退出

删除容器(rm命令)

docker rm 容器id

参数:

  • -f, --force=false强行终止并删除一个运行中的容器。
  • -l, --link=false删除容器的连接,但保留容器。
  • -V,--volumes=false删除容器挂载的数据卷

2.3 其他命令

查看日志

docker logs [参数] 容器id

参数:

  • -f, --follow 跟踪实时日志
  • --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
  • --tail string 从日志末尾显示多少行日志, 默认是all
  • -t, --timestamps 显示时间戳
  • --until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

查看docker容器里面的进程

docker top 容器id

从容器拷贝文件到主机上

docker cp 容器id:容器内文件路径   目录路径

相关文章
|
1月前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
154 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
19天前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
22 2
|
25天前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
41 3
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
29天前
|
持续交付 开发者 Docker
掌握Docker容器化技术,加速软件开发与部署
掌握Docker容器化技术,加速软件开发与部署
46 0
|
29天前
|
运维 Kubernetes 持续交付
深入理解Docker容器化技术及其在生产环境中的应用
深入理解Docker容器化技术及其在生产环境中的应用
37 0
|
Docker 容器 API
Docker系列教程27-在生产环境中使用Docker Compose
编者按:这是一篇翻译,原文详见:https://docs.docker.com/compose/production/ 译文原文:http://www.itmuch.com/docker/27-docker-compose-in-production/,转载请说明出处。
1530 0
|
11天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
142 77
|
20天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
13天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
55 3
下一篇
DataWorks