Docker | 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.sockDec 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: falseServer: 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
文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。
原文链接:drugai.blog.csdn.net/article/details/103698805
- 点赞
- 收藏
- 关注作者
评论(0)