Docker技术入门及实践

01 Docker技术介绍

  • Docker技术简介
Docker,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何支持docker安装的Linux机器上运行。Docker实现了虚拟化,安全隔离,容器是完全沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

1、Docker Client客户端

2、Docker Daemon守护进程

3、Docker Image镜像

4、Docker Container容器

5、Docker Registry仓库

  • Docker技术架构
Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker采用C/S架构,Docker Daemon作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。客户端和服务端既可以运行在一个机器上,也可通过socket或者RESTfulAPI来进行通信。

Docker Daemon一般在宿主机后台运行,等待接收来自客户端的消息。Docker客户端则为用户提供一系列可执行命令,用户用这些命令来实现跟Docker Daemon交互。

  • Docker技术优势
1、容器跨平台性与镜像。容器在linux容器的基础上设定了一套标准化的配置方法,将应用及其依赖的运行环境打包成镜像,真正实现了“构建一次,到处运行”的理念,大大提高了容器的跨平台性。
2、持续部署与测试。容器消除了线上线下的环境差异,保证了应用生命周期的环境一致性、标准化。开发人员使用镜像实现标准开发环境的构建,开发完成后通过封装完整环境和应用的镜像进行迁移。由此,测试和运维人员可以直接部署软件镜像来进行测试和发布,大大简化了持续集成、测试和发布的过程。
3、环境标准化和版本控制。基于容器提供的环境一致性和标准化,我们可以使用Git等工具对容器镜像进行版本控制,相比基于代码的版本控制来说,还能够对整个应用运行环境实现版本控制,一旦出现故障还可以快速回滚。相比以前的虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。
4、高资源利用率与隔离。容器没有管理程序的额外开销,与机器底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的应用实例,可以更充分地利用系统资源。同时,容器拥有资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。
5、应用镜像仓库。Docker官方构建了一个镜像仓库,组织和管理形式类似于Github,其上已累积了成千上万的镜像。因为Docker的跨平台适配性,相当于为用户提供了一个非常有用的应用商店,所有人都可以自由地下载微服务组件,这为开发者提供了巨大便利。

02 Docker安装配置

  • Linux平台安装Docker
目前,CentOS仅发行版本中的内核支持Docker。推荐使用CentOS7.0及以上版本,64位操作系统,系统版本内核为3.10及以上。Dokcer安装步骤如下:

1、查看系统版本是否符合要求

cat /etc/redhat-release

2、安装依赖包

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

3、添加软件源

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

4、安装Docker-CE

yum -y install docker-ce
若已安装docker,请先卸载yum list installed | grep dockersudo yum remove docker\                 docker-client\                 docker-client-latest\                 docker-common\                 docker-latest\                 docker-latest-logrotate\                 docker-logrotate\                 docker-selinux\                 docker-engine-selinux\                 docker-engine

安装指定版本的dockeryum list docker-ce --showduplicates|sort -ryum install docker-ce-18.03.1.ce-1.el7.centos

5、启动docker后台服务并添加开机自启

systemctl start docker 
systemctl enable docker

6、查看docker安装版本

docker version
  • 安装docker compose
7、安装docker-compose
curl -L  https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

8、赋执行权限
chmod +x /usr/local/bin/docker-compose

9、查看docker-compose安装版本
docker-compose --version
  • 配置镜像中心
10、创建daemon.json文件,添加镜像仓库地址
{
    "registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"],
    "insecure-registries":["47.88.149.108:61010", "hdwuhan.ddns.info:41857"]
}

11、重启docker systemctl restart docker

12、设置docker服务开机自启 systemctl enable docker

03 Docker镜像、容器、仓库

  • Docker镜像
Docker镜像(Image)类似于虚拟机镜像,可以理解为面向Docker引擎的只读模板。可以从DockerHub下载官方发布的应用镜像,比如Redis、Mysql、Nginx等,也可以从搭建的镜像中心来下载镜像。镜像常用操作如下:1、搜索官方镜像
docker search mysql
2、下载镜像
docker pull centos:7.0            不带仓库名称则默认从Docker Hub下载
docker pull ubuntu              不带版本号则默认下载latest版本
docker pull hdwuhan.ddns.info:41857/ubuntu       指定仓库下载
3、上传镜像
docker push hdwuhan.ddns.info:41857/ubuntu:v1.0        上传到指定仓库
docker push ubuntu:v1.0          上传到官方仓库
4、查看本地镜像
docker images

5、删除本地镜像 docker rmi dfs:0.2.0 通过镜像名删除 docker rmi db52f9bf0787 通过镜像ID删除 

6、提交容器镜像 docker commit db52f9bf0787 hdwuhan.ddns.info:41857/dfs:0.2.0 

7、给镜像打tag docker tag db52f9bf0787 hdwuhan.ddns.info:41857/dfs:0.2.0 

8、从容器导出、导入镜像 docker export db52f9bf0787 > dfs_0.2.0.tar cat dfs_0.2.0.tar | docker import - dfs:v0.2.0 

9、存出和载入镜像(推荐使用) docker save db52f9bf0787 > dfs_2.3.tar docker load < dfs_2.3.tar
  • Docker容器
Docker容器(Container)是从镜像创建的应用运行实例,可以将其看作是简易版Linux系统环境及运行在其中的应用程序打包而成的应用盒子。容器常用操作如下:
1、新建并启动容器
docker run [OPTIONS] IMAGE [COMMOND]
OPTIONS:
 -t 让docker分配一个伪终端并绑定到容器的标准输入上
 -i 表示让容器的标准输入保持打开
-d 让docker容器在后台以守护态形式运行
-p 桥接模式,端口映射
--net=host host模式启动
--restart=always 一直重启
--privileged=true 高级权限
--log-driver=none 不打印容器级别日志
--name 容器命名

新建并启动仓库容器
docker run -d -p 5000:5000 --name registry_5000 --restart=always --privileged=true --log-driver=none -v /home/test:/tmp/registry registry

2、进入容器

docker exec -it containerName/ID /bin/bash

docker exec -it containerName/ID /bin/sh   alpine镜像

3、停止容器

docker stop containerName/ID

4、启动容器

docker start containerName/ID

5、重启容器

docker restart containerName/ID

6、删除容器

docker rm containerName/ID

7、关闭所有容器
  docker stop $(docker ps -q)

8、删除所有容器

docker rm $(docker ps -aq)

9、删除所有镜像
  docker rmi $(docker images -aq)

  • Docker仓库
Docker Registry是用于存储容器镜像的仓库。在Docker的运行过程中,Docker Daemon会与Docker Registry通信,并实现搜索镜像、下载镜像、上传镜像三个功能。

Docker可以使用公有的Docker Registry,如Docker Hub,但Docker获取容器镜像文件时,必须通过互联网访问Docker Hub。Docker也允许用户构建本地私有的Docker Registry,这样就可以保证容器镜像的获取在内网中就可以完成。

04 Docker配置文件

  • docker compose 介绍
Compose是Docker容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器。

Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动、停止、重启应用及其所依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

docker-compose默认的模板文件是docker-compose.yml,其中定义的每个服务都必须通过image指令指定镜像或build指令(需要Dockerfile)来自动构建。
如果使用build指令,在Dockerfile中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV等)将会自动被获取,无需在docker-compose.yml中再次设置。

使用Compose基本上分为三步:
1、Dockerfile 定义应用的运行环境
2、docker-compose.yml 定义组成应用的各服务
3、docker-compose up 启动整个应用
  • docker-compose配置说明
一份标准配置文件应该包含version、services、networks三大部分,其中最关键的就是services和networks两个部分。

docker-compose文件是一个定义服务、网络和卷的YAML文件。dfs 配置文件举例:

version: ‘3‘
services:
  emqx:
    image: emqx/emqx:v3.2.2
    container_name: emqx
    ports:
       - "333:1883"
    restart: always
  dfs:
    image: hdwuhan.ddns.info:41857/dfs/dfs:2.3
    container_name: dfs_2.3
    restart: always
    ports:
       - "9999:9999"
    volumes:
       - ./application.yml:/dfs/application.yml:rw

其上docker-compose运行配置文件中,包含2个服务的容器配置,分别是emqx服务和dfs服务。其中

image:镜像获取地址及版本号,整个地址即为镜像的tag

container_name:容器名称

ports:端口映射。规则:”外部映射端口号:内部服务端口号”,注,外部映射端口号可根据需要修改,但内部服务端口号不能修改

restart:表示服务故障自启

volumes:文件共享路径

主要配置项介绍:
1、version
Compose目前为止有三个版本分别为Version 1,Version 2,Version 3。Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1将来会被弃用。目前推荐使用 Version 3

2、services
配置管理多个容器的标签。所有容器及其配置项都是在services标签下定义的。

3、image

services:

dfs:

image: hdwuhan.ddns.info:41857/dfs/dfs:2.3

在 services 标签下的第二级标签是 dfs,这个名字是用户自己定义的,它就是服务名称。

image 则是指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

例如下面这些格式都是可以的:

image: redis

image: ubuntu:14.04

image: tutum/influxdb

image: a4bc65fd

4、container_name

Compose 的容器名称格式是:<项目名称><服务名称><序号> 虽然可以自定义项目名称、服务名称,但是如果你想完全控制容器的命名,可以使用这个标签指定: container_name: app 这样容器的名字就指定为 app 了。

5、depends_on

depends_on:

- db

- redis

在使用 Compose 时,最大的好处就是少打启动命令,但是一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。 例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了避免这种情况我们需要加入一个标签,就是 depends_on,这个标签解决了容器的依赖、启动先后的问题。

6、ports

ports: - "9999:9999"

映射端口的标签。 使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。

ports:

- "3000"

- "8000:8000"

- "49100:22"

- "127.0.0.1:8001:8001"

注意:当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误的结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。

7、volumes

volumes: - ./application.yml:/dfs/application.yml:rw

挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。 Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。 数据卷的格式可以是下面多种形式:

volumes:

- /var/lib/mysql    // 只是指定一个路径,Docker 会自动再创建一个数据卷(这个路径是容器内部的)

- /opt/data:/var/lib/mysql    // 使用绝对路径挂载数据卷

- ./cache:/tmp/cache   // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。

05 Docker应用案例

  • 案例:DFS应用
我们使用docker来管理程序的部署,首先是将我们的程序打包成镜像的方式并推送到宏电镜像中心,然后再拉取镜像到docker本地仓库,最后将镜像实例化并运行。
我们的DFS应用是由多个服务组成的,为方便安装服务,这里我们采用docker compose方式组合一次性地启动我们的容器服务,每个组成部分都对应一个单独容器,这样方便后续运维优化扩展工作。
DFS应用由以下几个服务组件组成:
。emqx
。mysql
。redis
。dfs_server
。dfs_client
。dfs_web

DFS部署安装成功后,每一个组件都对应一个运行的容器实例。

第一步:获取应用配置文件 从我司获取DFS服务的配置文件夹,形如docker-compose文件夹,包含如下文件:

  • 应用部署流程
第二步:安装应用

1、登录linux系统后,在home目录下创建docker文件夹

mkdir /home/docker

2、将平台配置文件夹上传到/home/docker目录

3、进入平台配置文件夹路径,如

cd /home/docker/docker-compose

4、查看配置文件列表

ll

5、运行docker-compose文件

docker-compose up -d

等待容器安装并启动平台相关组件服务,1分钟左右,取决于网速。安装完成后,可查看正在运行的容器。

6、查看当前正在运行的容器

docker-compose ps

7、访问web页面

平台地址:http://ip:41853 ip为部署平台的服务器地址

06 Docker常用运维命令

docker-compose 常用组合命令:
docker-compose up -d     //后台启动compose容器
docker-compose ps      //在配置文件目录下执行,查看compose容器
docker-compose stop     //关闭compose容器
docker-compose down     //关闭移除除compose容器,网络,镜像和数据卷
docker-compose pull     //更新compose 镜像
docker ps -a | grep wmmp   //查找容器
docker logs -f --tail 100 wedora_server     //查看容器日志docker exec -it wedora_server bash       //进入容器exit     //退出容器


原文地址:https://www.cnblogs.com/relustarry/p/12433246.html

时间: 2024-08-27 12:30:09

Docker技术入门及实践的相关文章

《Docker技术入门与实战》pdf

下载地址:网盘下载 内容简介  · · · · · · [编辑推荐] <Docker技术入门与实战>是中国首部docker著作,一线Docker先驱实战经验结晶,来自IBM和新浪等多位技术专家联袂推荐! <Docker技术入门与实战>结合企业生产环境,深入浅出地剖析 Docker 的核心概念.应用技巧.实现原理以及生态环境,为解决各类问题提供了有价值的参考. [内容简介] 在云计算时代,开发者将应用转移到云上已经解决了硬件管理的问题,然而软件配置和管理相关的问题依然存在.Docke

《Docker技术入门与实战第3版2018版》高清中文PDF下载

<Docker技术入门与实战第3版2018版>高清中文PDF下载资料简介:本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员.运维人员快速部署Docker应用.本书分为四大部分:基础入门.实战案例.进阶技能.开源项目,*部分(第1-8章)介绍Docker与虚拟化技术的基本概念,包括安装.镜像.容器.仓库.数据卷.端口映射等:第二部分(第9-16章)通过案例介绍Docker的应用方法,包括与各种操作系统平台.SSH服务的镜像.Web服务器与应用.

Docker技术入门与实战下载 &#182772;

下载地址: http://www.gqylpy.com/di/8 <Docker技术入门与实战.pdf>PDF高清完整版-下载 本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员.运维人员快速部署Docker应用.本书分为四大部分:基础入门.实战案例.进阶技能.开源项目,部分(第1-8章)介绍Docker与虚拟化技术的基本概念,包括安装.镜像.容器.仓库.数据卷.端口映射等:第二部分(第9-16章)通过案例介绍Docker的应用方法,包括与各种

Docker —— 从入门到实践

Docker —— 从入门到实践

赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 (作者) http://www.amazon.cn/Docker技术入门与实战-杨保华-戴王剑-曹亚仑/dp/B00SMJ0VFA/ref=sr_1_2?s=digital-text&ie=UTF8&qid=1435217727&sr=1-2&keywords=docker

《SaltStack技术入门与实践》—— 实践案例 &lt;中小型Web架构&gt;3 Memcached配置管理

实践案例 <中小型Web架构>3 Memcached配置管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Memcached介绍 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态数据库驱动网站的访问速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通

《Docker技术入门与实战》读书笔记与实践

创建支持SSH的服务的镜像 Dockerfile内容 FROM ubuntu MAINTAINER from www.mtian.net by mtiannet RUN echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted" > /etc/apt/sources.list RUN echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-updat

【转】Docker —— 从入门到实践

http://yeasy.gitbooks.io/docker_practice/content/index.html Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护. Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc.R

Docker从入门到实践笔记(二)

1. 挂载一个主机目录作为数据卷 使用-v标记也可以指定挂载一个本地主机的目录到容器中去. $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py 上面的命令加载主机的/src/webapp目录到容器的/opt/webapp目录.这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作.本地目录的路径必须是绝对路径,如果目录不存在