Docker | Docker 简介、安装与入门

网友投稿 582 2022-05-30

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

Docker | Docker 简介、安装与入门

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)

参考:

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

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

Docker 容器

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:常见几种加密算法的Python实现
下一篇:JVM是如何分配管理内存的?
相关文章