Docker | Docker 简介、安装与入门

简介: Docker | Docker 简介、安装与入门

Docker

官方原话: Docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries.

image.png

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


Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。


容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。


Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。



Docker原理

Docker是利用Linux内核虚拟机化技术(LXC),提供轻量级的虚拟化,以便隔离进程和资源。LXC不是硬件的虚拟化,而是Linux内核的级别的虚拟机化,相对于传统的虚拟机,节省了很多硬件资源。


NameSpace

LXC是利用内核namespace技术,进行进程隔离。其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统和hostname 隔离开。


Control Group

LXC利用的宿主机共享的资源,虽然用namespace进行隔离,但是资源使用没有收到限制,这里就需要用到Control Group技术,对资源使用进行限制,设定优先级,资源控制等。


Docker的组成

Docker Client 客户端

Docker Daemon 守护进程

Docker Image 镜像

Docker Container 容器


Docker基本概念介绍

镜像(Image)

这里面保存了应用和需要的依赖环境 比如运行runtime 和webapp


为什么需要多个镜像?当开发、构建和运行容器化应用程序时,我们通常会有不同优先级。通过为这些 独立的任务提供不同镜像


容器(Container)

镜像的实例。一个容器代表一个正在运行的应用程序、进程或服务。它由 Docker 镜像、执行环境和标准指令集组成。需要扩展服务时,我


真正将镜像跑起来的东西,镜像在容器里面。可以看作是一个完全隔离的盒子。


一个容器镜像实例 代表一个独立的进程。


Hub

远程存放镜像的平台, hub上已经有很多制作好的镜像 比如redis mongodb。


仓库 (repository)

仓库用来保存镜像的地方。


镜像构建完成后,可以直接在当前宿主上运行,但是 如果需要在其它服务器上使用这个镜像,就需要一个集中存储、分发镜像的服务。仓库就是这样的一个服务。


Docker应用场景

在非常低的额外开销的情况下,打造一个一致性的环境。


简化配置

代码流水线(Code Pipeline)管理

提高开发效率

隔离应用

整合服务器

调试能力Docker

多租户环境

快速部署

Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。


1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。


容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:


您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。

他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。

当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。

测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。


Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。


3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。


Docker CE安装

环境准备

cat /etc/redhat-release

CentOS Linux release 7.7.1908 (Core)

uname -r

3.10.0-1062.4.1.el7.x86_64

安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

设置稳定的仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

设置阿里云镜像源

因为docker默认官方的镜像源地址是国外的,速度很慢,这里将数据源设置为阿里云的镜像。

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装最新版Docker-ce

yum install -y docker-ce  

启动docker

systemctl start docker

开机启动docker

systemctl enable docker

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

查看是否启动成功

systemctl status docker

● docker.service - Docker Application Container Engine

  Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)

  Active: active (running) since Wed 2019-12-25 15:00:31 CST; 55s ago

  Docs: https://docs.docker.com

Main PID: 23749 (dockerd)

Tasks: 10

Memory: 37.7M

CGroup: /system.slice/docker.service

      └─23749 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock


Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.221850961+08:00" level=info msg="scheme \"unix\" not regist...le=grpc

Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.221867173+08:00" level=info msg="ccResolverWrapper: sending...le=grpc

Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.221889025+08:00" level=info msg="ClientConn switching balan...le=grpc

Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.321094530+08:00" level=info msg="Loading containers: start."

Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.514237489+08:00" level=info msg="Default bridge (docker0) i...ddress"

Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.572754563+08:00" level=info msg="Loading containers: done."

Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.636432385+08:00" level=info msg="Docker daemon" commit=633a...19.03.5

Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.636567302+08:00" level=info msg="Daemon has completed initialization"

Dec 25 15:00:31 drugai systemd[1]: Started Docker Application Container Engine.

Dec 25 15:00:31 drugai dockerd[23749]: time="2019-12-25T15:00:31.663111354+08:00" level=info msg="API listen on /var/run/docker.sock"

Hint: Some lines were ellipsized, use -l to show in full.


查看docker版本

docker version

Client: Docker Engine - Community

Version:           19.03.5

API version:       1.40

Go version:        go1.12.12

Git commit:        633a0ea

Built:             Wed Nov 13 07:25:41 2019

OS/Arch:           linux/amd64

Experimental:      false


Server: Docker Engine - Community

Engine:

 Version:          19.03.5

 API version:      1.40 (minimum version 1.12)

 Go version:       go1.12.12

 Git commit:       633a0ea

 Built:            Wed Nov 13 07:24:18 2019

 OS/Arch:          linux/amd64

 Experimental:     false

containerd:

 Version:          1.2.10

 GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339

runc:

 Version:          1.0.0-rc8+dev

 GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657

docker-init:

 Version:          0.18.0

 GitCommit:        fec3683


Docker镜像管理

搜索所有centos的docker镜像

docker search centos

NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED

centos                             The official build of CentOS.                   5737                [OK]                

ansible/centos7-ansible            Ansible on Centos7                              126                                     [OK]

jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114                                     [OK]

consol/centos-xfce-vnc             Centos container with "headless" VNC session…   101                                     [OK]

centos/mysql-57-centos7            MySQL 5.7 SQL database server                   66                                      

imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              57                                      [OK]

tutum/centos                       Simple CentOS docker image with SSH access      44                                      

centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   39                                      

kinogmt/centos-ssh                 CentOS with SSH                                 29                                      [OK]

pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   10                                      

guyton/centos6                     From official centos6 container with full up…   9                                       [OK]

nathonfowlie/centos-jre            Latest CentOS image with the JRE pre-install…   8                                       [OK]

drecom/centos-ruby                 centos ruby                                     6                                       [OK]

darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]

mamohr/centos-java                 Oracle Java 8 Docker image based on Centos 7    3                                       [OK]

pivotaldata/centos                 Base centos, freshened up a little with a Do…   3                                      

pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   2                                      

miko2u/centos6                     CentOS6 日本語環境                                   2                                       [OK]

pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   2                                      

mcnaughton/centos-base             centos base image                               1                                       [OK]

indigo/centos-maven                Vanilla CentOS 7 with Oracle Java Developmen…   1                                       [OK]

blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]

pivotaldata/centos6.8-dev          CentosOS 6.8 image for GPDB development         0                                      

pivotaldata/centos7-dev            CentosOS 7 image for GPDB development           0                                      

smartentry/centos                  centos with smartentry                          0                                       [OK]


查看docker镜像

docker images

REPOSITORY(来自那个仓库) TAG(标签)           IMAGE ID(唯一ID)    CREATED(创建时间)   SIZE(大小)

Docker常用命令

docker ps --查看目前正在运行的所有容器 -a 显示包括已经停止的容器
docker pull --拉取镜像
docker rmi --删除镜像 后面可以直接根据镜像 名称或者tag 前首字母匹配
docker start  container_id --打开容器 (这里可以是容器id或名称)
docker stop container_id --停止容器 (这里可以是容器id或名称)
docker rm --删除容器(只有停止的容器才可以删除)
docker build --使用 Dockerfile 创建镜像
docker exec --容器中执行命令,例如:docker exec -it  container_id(容器名或id) /bin/bash  (bin/bash要执行的命令或工具)
docker logs --查看 容器日志 ,例如:docker logs -f -t --tail 10 container_id (容器名或id) 


目录
相关文章
|
10月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
9月前
|
运维 Kubernetes 开发者
解锁现代开发与部署:Docker入门指南
解锁现代开发与部署:Docker入门指南
284 100
|
7月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
764 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
8月前
|
关系型数据库 数据库 PostgreSQL
docker 安装 Postgres 17.6
本文介绍如何通过Docker安装和配置PostgreSQL 17.6。内容包括拉取镜像、导出配置文件、运行容器并挂载数据与配置文件目录,以及进入容器使用psql操作数据库的完整步骤,便于持久化管理和自定义配置。
1422 3
docker 安装 Postgres 17.6
|
7月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
805 6
|
7月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
635 2
|
10月前
|
NoSQL 安全 Redis
Docker Compose :从入门到企业级部署
Docker Compose 是用于定义和运行多容器应用的工具,支持服务、网络和卷三大核心要素。通过简洁的 YAML 文件,可实现应用的快速部署与管理,适用于开发、测试及生产环境。
768 1
|
10月前
|
Linux Docker Windows
windows docker安装报错适用于 Linux 的 Windows 子系统必须更新到最新版本才能继续。可通过运行 “wsl.exe --update” 进行更新。
适用于 Linux 的 Windows 子系统需更新至最新版本(如 wsl.2.4.11.0.x64.msi)以解决 2025 年 Windows 更新后可能出现的兼容性问题。用户可通过运行 “wsl.exe --update” 或访问提供的链接下载升级包进行更新。
3937 0

热门文章

最新文章