目录

一、Docker介绍

诞生背景

Docker介绍

虚拟机技术与容器虚拟化技术

虚拟机技术

容器虚拟化技术

官方网站

二、Docker安装

安装Docker

Docker管理命令

Docker底层原理

Docker结构图

工作原理

Docker为什么比Vm虚拟机快

三、Docker常用命令

仓库命令

怎么把镜像push进仓库?

从仓库搜索镜像

从仓库拉取镜像busybox

向仓库推进镜像

帮助命令

镜像命令

容器命令

基本命令

重要命令

四、通过Docker安装软件

MySQL

Redis

RabbitMQ

MongoDB


一、Docker介绍

诞生背景

操作系统的更新迭代、物理机器的损坏更新、不同环境版本的兼容,对于运维人员来说都是考验。

Docker之所以发展迅速,也是因为它对此给出了一个标准化的解决方案。

环境配置配置如此麻烦,但是当我们更换一台新的机器时,就要重新配置环境,费时费力,但这却又是我们不得不面临的问题。

那么能否从根本上解决问题,软件可以带环境安装?

在我们安装软件的时候,把原始环境一模一样的复制过来。

开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。

但是就算开发清楚的告诉运维部署团队全部的配置文件以及所有软件环境,任然常常会发生部署失败的状况。

Docker镜像的设计,使得Docker得以打破过去“程序即应用”的观念

通过镜像将作业系统核心除外,运作应用程式所需要的系统环境,

由下而上打包,达到应用程式跨平台间的无缝接轨运作。

Docker:“镜像即应用”

Docker介绍

Docker的主要目标是“Build、ship and run any app,anywhere”

也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,

使用户的APP(可以是web应用或数据库应用等等)及其运行环境能做到“一次封装,到处运行”

Linux容器技术的出现就解决了这样一个问题,而Docker就是在它的基础上发展过来的。

将应用运行在Docker容器上面,而Docker容器在任何操作系统上都是一致的

这就实现了跨平台、跨服务器只需要一次配置好环境,换到别的机子上就可以一键部署好。

总结:

Docker是解决运行环境和配置问题的软件容器,方便做持续集中并有助于整体发布的容器虚拟化技术

虚拟机技术与容器虚拟化技术

虚拟机技术

虚拟机(vm)就是带环境安装的一种解决方案。

它可以在一种操作系统里面运行另一种操作系统,比如Windows系统里面运行Linux系统。

应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样。

缺点:资源占用多、冗余步骤多、启动慢

容器虚拟化技术

容器:轻量级的虚拟化(共享同一系统内核),容器是由容器镜像来运行

优点:容器密度高,启动快,没有太多额外的开销

缺点:只能在linux操作系统

Linux容器(Linux Containers 缩写LXC)

Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。

有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。

容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置

系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

二者区别

1、传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需应用进程;

2、容器内的应用进程直接运行于宿主机(容器所在主机)的内核容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器比传统虚拟机更轻便。

3、每个容器之间互相隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。

官方网站

官方网址:https://www/docker.com

Docker社区:https://hub.docker.com/

二、Docker安装

安装Docker

Docker安装教程(CentOS 7)

Docker安装教程(CentOS 7)

Docker(CentOS 6)

Docker管理命令

# 重新载入后台启动进程

systemctl daemon-reload

# 启动docker容器 ,每次关闭虚拟机/运服务器时需要启动( 重要!!! )

sudo service docker start

# 查看Docker容器状态

sudo service docker status (should see active (running))

# 运行hello-world镜像/测试Docker是否可以使用

sudo docker run hello-world

Docker底层原理

Docker结构图

鲸鱼背上有集装箱

蓝色的大海里边——宿主机系统Windows10

鲸鱼———————docker

集装箱——————容器实例    from  我们的镜像模板

工作原理

Docker是一个client-Server结构的系统,Docker守护进程运行在主机上,

然后通过Socket连接,从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。

容器,一个运行时环境,就是我们上边所说的集装箱。

Docker为什么比Vm虚拟机快

(1)docker有着比虚拟机更少的抽象层。

由于docker不需要Hypervisor实现硬件资源虚拟化,

运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。

因此在CPU、内存利用率上Docker将会在效率上有明显优势。

(2)Docker利用的是宿主机的内核,而不需要Guest OS

因此当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。

因而避免了引寻、加载操作系统内核这个比较费时费资源的过程。

当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。

而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。

三、Docker常用命令

仓库命令

docker search 镜像名

从仓库搜索镜像
docker pull 镜像名 从仓库拉出镜像,默认拉取的最新版
docker push 镜像名 向仓库推进镜像(hub.docker.com必须在网页注册一个账号,然后命令行使用docker login登录,进行镜像打标签,才能把镜像推到参仓库)

怎么把镜像push进仓库?

step1——找到本地镜像的ID:docker images ls
step2——登陆Hub:docker login --username=username --password=password --email=email
step3——镜像打标签tag:docker tag <imageID> <namespace>/<image name>:<version tag eg latest>
step4——push镜像:docker push <namespace>/<image name>

从仓库搜索镜像

[root@manager ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6061                [OK]
ansible/centos7-ansible            Ansible on Centos7                              130                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   116                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114
...................

从仓库拉取镜像busybox

[root@manager ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
76df9210b28c: Pull complete
Digest: sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

向仓库推进镜像

hub.docker.com必须在网页上注册一个账号,才能把镜像推到仓库

docker push 镜像名
docker login

帮助命令

# 查看docker版本信息
docker version# 查看docker所有安装信息
docker info# 查看docker帮助 ( 最为重要,学会利用帮助文档来学习 ,这是成为高手的必经之路!!! )
docker --help

镜像命令

# 1.列出本地镜像(图1)
docker images# option说明-a :列出所有镜像-q:只列出镜像id-digests :显示镜像的摘要信息
--no-trunc :显示相信信息# 2.搜索某个镜像名字 (会在docker社区搜索相关的镜像, 而我们配置的阿里源只是帮我们同步了docker社区的镜像,图2)
docker search # option说明- s显示收藏数不小于指定值的镜像--no-trunc :显示相信信息- automated :只列出automated类型的镜像# 3. 下载镜像(图3)
docker pull 镜像的名字:[TAG](不写默认为 lasted)# 4. 删除镜像
docker rmi  -f 镜像名/镜像id
docker rmi -f $(docker images -qa )
各个选项说明  
REPOSITORY 表示镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像ID
CREATED 镜像创建时间
SIZE 镜像大小

同一仓库源可以有多个TAG,代表这个仓库源的不同版本,我们

使用REPOSITORY:TAG来定义不同的镜像

如果你不指定一个镜像的版本标签,例如你只使用Ubuntu,

docker将默认使用ubunbu:latest镜像

图一

图二

图三

容器命令

基本命令

# 1. 新建并启动容器
docker run [OPTIONS] IMAGE [COMMOND] [ARGS...]# OPTIONS 说明--name="容器新名字": 为容器指定一个名称;-d: 后台运行容器,并返回容器ID,也即启动守护式容器;-i:以交互模式运行容器,通常与 -t 同时使用;-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;-P: 随机端口映射;-p: 指定端口映射,有以下四种格式ip:hostPort:containerPortip::containerPorthostPort:containerPortcontainerPort# eg: 使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash # 2. 查询当前正在运行的容器(类比虚拟中的查看进程)
docker ps [OPTIONS] # OPTIONS说明(常用):-a :列出当前所有正在运行的容器+历史上运行过的-l :显示最近创建的容器。-n:显示最近n个创建的容器。-q :静默模式,只显示容器编号。--no-trunc :不截断输出。# 3. 退出容器
exit  容器停止后退出
ctrl+p+q  容器不停止退出# 4 .启动容器
docker start 容器ID/容器名# 5. 重启容器
docker restart# 6. 停止容器
docker stop 容器ID/容器名# 7. 强制停止容器
docker kill 容器ID/容器名# 8. 删除已经停止的容器(如果没有停止,删除后悔停止)
docker rm 容器ID
删除多个容器(特别是第二种 ,先查询所有运行的进程, 然后通过管道传到后面的删除操作中)
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

重要命令

# 1. 新建并启动容器
docker run [OPTIONS] IMAGE [COMMOND] [ARGS...]# OPTIONS 说明--name="容器新名字": 为容器指定一个名称;-d: 后台运行容器,并返回容器ID,也即启动守护式容器;-i:以交互模式运行容器,通常与 -t 同时使用;-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;-P: 随机端口映射;-p: 指定端口映射,有以下四种格式ip:hostPort:containerPortip::containerPorthostPort:containerPortcontainerPort# eg: 使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash # 2. 查询当前正在运行的容器(类比虚拟中的查看进程)
docker ps [OPTIONS] # OPTIONS说明(常用):-a :列出当前所有正在运行的容器+历史上运行过的-l :显示最近创建的容器。-n:显示最近n个创建的容器。-q :静默模式,只显示容器编号。--no-trunc :不截断输出。# 3. 退出容器
exit  容器停止后退出
ctrl+p+q  容器不停止退出# 4 .启动容器
docker start 容器ID/容器名# 5. 重启容器
docker restart# 6. 停止容器
docker stop 容器ID/容器名# 7. 强制停止容器
docker kill 容器ID/容器名# 8. 删除已经停止的容器(如果没有停止,删除后悔停止)
docker rm 容器ID
删除多个容器(特别是第二种 ,先查询所有运行的进程, 然后通过管道传到后面的删除操作中)
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
# 2. 查看容器日志
docker logs -f -t --tail 容器IDeg :(图1)
docker run -d centos /bin/sh -c "while true;do echo hello testLogs;sleep 2;done"
docker logs -tf --tail 10 02c81778b0e0-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条# 3. 查看容器内运行的进程(图2)
docker top 容器ID# 4. 查看容器内部细节(图3)
docker inspect 容器ID# 5.进入正在运行的容器并进行交互(图4)
docker exec -it 容器ID bashShell# 6. 重新进入容器(图5)
docker attach 容器ID bashShell(不写的话默认 /bin/bash下)# 比较5与6的区别
attach 直接进入容器启动命令终端, 不会启动新的线程
exec 是在容器中打开新的终端, 并且可以启动新的线程

图1

图二

图三

图4

图5

四、通过Docker安装软件

MySQL

# 1. 以安装mysql5.6为例(不知道什么原因5.7下不来)
docker pull mysql:5.6

# 2. 运行镜像,启动容器(端口3306,root用户密码:root,运行镜像:mysql5.6)
docker run -p 3306:3306 --name mysql -v /datebase/mysql/conf:/etc/mysql/conf.d -v /datebase/mysql/logs:/logs -v /datebase/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6

# 3. 进入msql内部测试登陆
docker ps
## 进入mysql的当前目录下
docker exec -it MySQL运行成功后的容器ID/name     /bin/bash
## 输入账号密码
mysql -u 账号 -p(然后根据提示输入密码)

# 4.连接数据库的图形化界面
## Mysql 解决连接客户端时出现1251 client does not support ...问题
ALTER USER  'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql密码';
ALTER USER  'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql密码';

# 5. 备份数据库数据,之后我们可以通过直接读取这个sql文件恢复数据
docker exec myql服务容器ID sh -c ' exec mysqldump --all-databases -uroot -p"root" ' > /datebase/all-databases.sql

Redis

# 1.下载最新版redis镜像
docker pull redis

# 2.运行镜像(redis端口2333, -d后的redis不加参数默认为redis:latest)
# 注意本地数据卷与容器内数据卷目录的对应
docker run -p 2333:6379 -v /myuse/myredis/data:/data -v /myuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf  -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes

# 3.上传redis.conf到本地数据卷所在目录
本地数据卷坐在目录 : /myuse/myredis/conf
文件地址(太大了 ,这里放不下) : https://download.csdn.net/download/qq_43371556/11889084

# 4. 运行redis的cil----shell命令行
docker exec -it 运行着Rediis服务的容器ID redis-cli
# 远程连接 docker redis
docker exec -it redis_s redis-cli -h 192.168.1.100 -p 6379 -a your_password //如果有密码 使用 -a参数

RabbitMQ

# 1.下载镜像
docker pull rabbitmq:3.7.7-management

# 2.运行镜像
docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=/ -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin df80af9ca0c9

-d 后台运行容器;
--name 指定容器名;
-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
-v 映射目录或文件;
--hostname  主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

# 3.访问 (如下图)
http://ip:15672
账号 :admin
密码: admin

MongoDB

# 1.查看docker+MongoDB版本(图1)
docker search

# 2.下载最新的MongoDB
docker pull MongoDB

# 3.将镜像运行成容器
docker run -itd --name mongo -p 27017:27017 mongo --auth
## 参数说明:
-p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
--auth:需要密码才能访问容器服务。

# 4.使用以下命令添加用户和设置密码,并且尝试连接。
$ docker exec -it mongo mongo admin
# 创建一个名为 admin,密码为 123456 的用户。
>  db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
# 尝试使用上面创建的用户信息进行连接。
> db.auth('admin', '123456')

Docker——容器虚拟化技术相关推荐

  1. docker容器虚拟化技术_Docker,虚拟机和容器的全面介绍

    docker容器虚拟化技术 by shota jolbordi 通过Shota Jolbordi Docker has been a buzzword for tech people for the ...

  2. 实战:Docker容器虚拟化技术(使用DockerFile构建镜像并搭建 swarm+compose集群)5

    实战:Docker容器虚拟化技术 (使用DockerFile构建镜像并搭建 swarm+compose集群)5 要求: 使用DockerFile构建镜像并搭建 swarm+compose集群 在Swa ...

  3. Docker容器虚拟化技术---Docker运维管理(Docker Compose)4

    Docker容器虚拟化技术-Docker运维管理(Docker Compose)4 Docker Compose 通过前面的讲解我们知道使用一个Dockerfile模板文件,可以很方便地定义一个单独的 ...

  4. Docker容器虚拟化技术---Docker运维管理(Swarm集群管理)3

    Docker容器虚拟化技术-Docker运维管理(Swarm集群管理)3 Swarm集群管理 docker swarm是docker官方提供的一套容器编排系统,是Docker公司推出的官方容器集群平台 ...

  5. Docker容器虚拟化技术---Docker高级实战(DockerFile)2

    Docker容器虚拟化技术-Docker高级实战(DockerFile) DockerFile是一个文本格式的配置文件,用户可以使用DockerFile来快速创建自定义的镜像. 1. DockerFi ...

  6. Docker容器虚拟化技术---Docker安装和操作1

    一.Docker安装 Docker在主流的操作系统和云平台上都可以使用,包括Linux操作 系统(如Ubuntu.Debian.CentOS.Redhat等).MacOS操作系统和 Windows操作 ...

  7. Docker技术( 容器虚拟化技术 )

    Docker--容器虚拟化技术 第一章 Docker介绍 诞生背景 Docker 介绍 虚拟机技术与容器虚拟化技术 虚拟机技术 容器虚拟化技术 官方网址 第二章 Docker安装 前提条件 安装Doc ...

  8. 容器虚拟化技术Docker(一)简介、安装、常见命令、数据卷、安装常规软件

    容器虚拟化技术Docker(一)简介.安装.常见命令.数据卷.安装常规软件 1.Docker简介 1.简介 Docker的主要目标是"Build,Ship and Run Any App,A ...

  9. [由零开始] 容器虚拟化技术和自动化部署-Docker

    伴随着信息技术的飞速发展,虚拟化技术早已经广泛应用到各种关键场景中. 部署.交付.运行 传统来看,虚拟化(vm)既可以通过硬件模拟来实现,也可以通过操作系统软件来实现.而容器技术则 更为优雅,它充分利 ...

最新文章

  1. Xendesktop 可基于物理机及虚拟机的桌面控制交付
  2. rem布局在部分手机上显示不正常问题
  3. Windows保护模式学习笔记(二)—— 代码跨段跳转
  4. kettle kafka mysql_kettle使用kafka组件消费数据,保存到资源库无法打开问题
  5. 动画性能优化-requestAnimationFrame、GPU等
  6. 夸克浏览器怎么安装脚本_iOS 第一浏览器发布安卓版,除了真香我还能说什么...
  7. 重磅!GroupFace 人脸识别,刷新 9 个数据集SOTA
  8. input file HTML控件控制
  9. Linux格式化硬盘为nvme0n1,安装ubuntu16.04系统及解决/dev/nvme0n1p7:clean...block黑屏问题...
  10. [MySQL FAQ]系列 -- 新年新思想:MySQL也能并发导入数据
  11. SQLi LABS Less-20
  12. 怎么调出全局搜索_局部静态变量只能初始化一次?它是怎么实现的
  13. Hive Udf Rank
  14. 粒子群优化算法(PSO)python实践
  15. 雨林木风Ghost XP SP3 装机版 YN9.9 九月修正版 【雪豹】
  16. Python搭建聊天机器人微信订阅号
  17. C#编程学习27: C#操作Excel从入门到精通
  18. 请控制好你的情绪--职场情绪管理
  19. 程序员怎么做可以安全通过试用期
  20. 关于Invalid bound statement (not found)出现原因和解决方法

热门文章

  1. Python安装包 阿里源
  2. 国产视频编码技术终获国家科学奖,从此可甩掉H.265高额专利费
  3. OBD数据分析(一)
  4. vLayout使用注意事项
  5. 毛星云opencv之4.3基本图形的绘制(画出原子图和组合图)
  6. 构造后缀数组的DC3算法实现
  7. 写定时任务发送邮件报错(Could not connect to SMTP host:smtp.exmail.qq.com,port:465)
  8. 如何开搓饵不掉钩_搓饵技巧,没有你想象中那么简单
  9. 【详细】【转】C#中理解委托和事件 事件的本质其实就是委托 RabbitMQ英汉互翼(一),RabbitMQ, RabbitMQ教程, RabbitMQ入门...
  10. 面霸可以练成,程序员如何成功面试