Docker | Docker 简介、安装与入门

举报
DrugAI 发表于 2021/07/15 03:07:51 2021/07/15
【摘要】 Docker 官方原话: Docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries.         Docker 是一个开源的...

Docker

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

        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常用命令


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

 


参考:

1. https://www.cnblogs.com/zuoyang/p/9561009.html

2. https://www.linuxidc.com/Linux/2019-12/161823.htm

 

文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。

原文链接:drugai.blog.csdn.net/article/details/103698805

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。