Docker | Docker 简介、安装与入门-阿里云开发者社区

开发者社区> DrugAI> 正文

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) 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
25923 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2524 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
9628 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
9054 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
10654 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
8129 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
6110 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
20978 0
+关注
497
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载