一、介绍Docker

 1.引言

问题1:开发人员告诉测试说自己的项目已经做好了,给你一个发布包,你去测试吧。

## 测试人员,为什么我运行会报错?

## 开发人员说,我本地运行没有问题呀!

  解答***环境问题

问题2:一台linux服务器,多个同事一起使用,突然有个同时在程序不小心写了一个死循环,导致linux卡死!

解答**多用户使用linux时,隔离问题

      问题3:天猫双十一,用户爆发性增长,需要扩展很多台服务器。

如果双十一部署几百台、几千台服务器,公司运维一台台部署,调试环境,可以累死,运维成本高。

解答****docker可以实现弹性伸缩,快速扩展。降低运维成本,一个命令,快速部署上百台服务器。

  2.Docker概述

 2.1 Docker的由来

        一帮年轻人,开了一家公司,2010年的时候做pass平台。

当时所罗门这个公司发展的特别好。

到了2013年,亚马逊,谷歌,微软也开始做pass平台,

业务被互联网巨头抢走了,所罗门为了不让自己三年的技术白费,讲pass平台的核心技术进行开源,这个技术就是docker

后来,开源的docker被业界人士认可,后期得到了融资,于是该团队专门做docker的维护与升级工作。

这个是docker的作者之一,

后来docker的主要作者离开了团队,原因是朋友的公司却少CEO

当时这个作者想的是 docker维护的非常好了,有我没我都一样了,于是就走了。就如目前的python创始人一样,

现在python社区也是很棒的。

 3 Docker的思想

1.集装箱

将所有需要的环境,全部放到一个集装箱中,谁需要使用这个环境,直接拿到这个集装箱就可以了。

集装箱的专业术语就是镜像,可以理解为把代码打包成一个压缩包

2.标准化

一、运输的标准化:docker有一个超级码头,所有的集装箱都放在这个超级码头里面,谁需要直接去获取即可。

         超级码头理解成一个仓储,里面有很多镜像

               二、运行方式标准化:docker提供了统一的命令,可以直接通过命令去码头搬运自己需要的集装箱。

三、提供了REST的API:docker有一个REST API,可以实现图像化界面操作,Rancher就是一种。

3.隔离性

docker在运行集装箱的内容时,在linux内核中开辟了一个独立的空间,用来运行集装箱的内容。

 二、安装Docker

1.安装依赖

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

2.设置下载docker的镜像源,提高速度

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

# yum makecache  fast

3.安装docker社区版

# yum install -y  docker-ce

4.启动docker并设置开启自动启动

# systemctl   start  docker

# systemctl   enable   docker

5.运行docker的hello-world镜像进行测试 是否安装成功。

# docker  run  hello-world  如果电脑网络不好,会导致拉取失败。因为本地没有这个镜像,需要去外网拉取

 三、Docker的镜像操作

         1、注册中心的选择

                         http://hub.daocloud.io           https://hub.docker.com        .....拉取镜像的网站

          2、拉取镜像到本地

                         docker pull  镜像[:tag]    # 拉取镜像

docker pull daocloud.io/daocloud/helloworld-go:latest    #去daocloud.io 拉取的方式

如果公司有私服,可以去公司的地址下载

docker pull  192.168.1.11:5000/.net-core:2.2.26

如果在公司拉取镜像失败,可以手工创建一个daemon.json

                         vim /etc/docker/daemon.json

{

"registry-mirrors":["https://registry.docker-cn.com"],

"insesure-registries":["192.168.1.11:5000"]

}

#成功后并重启

systemctl  daemon-reload

systemctl  restart docker

3、镜像的操作

docker images  #查看全部的镜像

docker  rmi  镜像id     #删除镜像id

4、镜像的导入导出

                     docker save  -o /usr/local/mysite.tar  mysite:1.0  # 导出mysite:1.0到 /usr/local/下的mysite.tar 注意导出的格式是tar

docker load -i mysite.tar  # 可以将此tar发给其他人,然后通过此tar包,完成镜像的加载,等价于 "docker  pull   ....."

5、Daocloud

这个地址是国内的,网速很快。访问官网并注册,然后在terminal中下载daocloud中的镜像:

docker login daocloud.io  #在终端登录

docker pull  镜像名:tag   # 在daoclod官网中搜索镜像,复制镜像名和tag,就可下载镜像

   四、Docker容器的操作

                  一个镜像可以启动多个容器,每个容器都独立运行,容器间互相隔离。

即,一个运行成功的镜像,叫做容器。一个镜像可以多次运行,产生多个容器

1、运行镜像

docker run 镜像id  #直接运行容器,并占满整个界面

docker run -d 镜像的id   #后台运行

docker run -d -p 宿主机端口:容器端口  镜像id #运行容器的同时,让容器的端口映射宿主机的端口

docker run -d -p 宿主机端口:容器端口  --name 容器名称  镜像id #运行容器的同时,指定容器名称

2、查看容器

docker ps            #查看正在运行的容器

docker  ps -a            #查看全部的容器,包括没有在运行的

docker ps -qa                           #查看全部容器的id

docker exec -it 容器id bash     #进入容器的命令行中。

进入 之后的状态  root@c766775hgj87:/usr/local/iis/webapps/# ls

docker cp  .net-core.tar  c766775hgj87:/usr/local/iis/webapps/ #把linux的 .net-core.tar 复制到容器里面。

 exit                                             #退出容器命令界面

3、查看容器日志

docker logs   -f    容器的id  #由于后台启动,无法查看日志,使用此命令,可以查看后台容器日志

4、容器的停止和删除

  docker stop 容器id                     #停止容器

  docker stop  $(docker ps -qa)  #停止全部容器

docker rm  容器id                       #删除容器

docker rm   $(docker ps -qa)     #删除全部容器

五、数据卷

通过exec进入到容器的terminal中后,发现容器中的Linux发行版和咱们使用的不一样。

因为容器是纯净的,进入之后,无法使用vim等命令,需要容器里面更新安装,这些很占内存,并且时间也很漫长。

数据卷的存在成功的解决了这个问题,讲宿主机的目录映射到容器的一个目录,然后宿主机的目录和容器中的目录是同步的,这就可以在宿主机进行文件的编辑。在容器中文件也会实时的变动。

#在启动项目时,直接指定数据卷  volume

   docker run -d -p 宿主端口:容器端口   --name  容器名称 -v 数据卷名称:容器指定的路径  镜像id   

#如果宿主数据卷不存在,默认存放到了 /var/lib/docker/volumes/数据卷名称/_data/

#如果数据卷存在的话,启动容器

docker run -d -p 宿主端口:容器端口   --name  容器名称 -v 数据卷全路径:容器指定的路径  镜像id   

#举个例子

    docker run -d -p 8080:8080 --name IIS -v    /var/lib/docker/volumes/数据卷名称:容器指定的路径  镜像id  

---------常用命令----------

#如果事先创建数据卷,会造成最开始容器目录和数据卷无法同步---尽量不要单独创建

docker volume create 数据卷名称  

#删除数据卷

docker  volume  rm 数据卷名称

#查看全部的数据卷

 docker volume  ls

#查看数据卷的详细信息

docker volume  inspect  数据卷名称

**数据库安装

   这里 我们安装一个Mysql 这个安装快捷

    docker  run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root  --name mysql  daocloud.io/library/mysql:latest

六、自定义镜像(Dockerfile)记住D是大写的

   为了部署项目,需要单独的启动一个dotcore的容器,并且手动将发布包复制到指定的数据卷位置。

部署完毕,需要执行命令运行dotcore项目,dotnet  webapp.dll

Dockerfile  -> 是自己创建的一个文件
form 依赖的镜像路径
copy 将你宿主机的内容复制到容器中一份
workdir 容器会在你指定的路径
cmd 需要执行的命令(在workdir中执行指定的命令,cmd可以写多个,但是以最后一个为准 )

1、部署netcore

准备一个发布包

2、编辑Dockerfile

from docker.io/microsoft/aspnetcore   #下载依赖的镜像文件
copy webapp /usr/local/ #当前根目录有个发布包 叫webapp 复制到容器里面的/usr/local/下
expose 8080 #表示暴露出来的端口号,和容器的端口号对应。这里默认是80。
workdir /usr/local/ #表示你的asp.net core web应用放在容器的哪个目录,这里是/usr/local目录,没有会自动创建
cmd ["dotnet","webapp.dll"] #表示执行的命令,即运行我们自己的asp.net core web程序

3、在widows编辑好Dockerfile编辑好之后,扔到linux中

4、构建自定义镜像

docker build -t 镜像名:tag   #一定要在Dockerfile的当前目录下执行,并且asp.net core 也在当前目录

5、运行构建的镜像

docker run -d -p 宿主端口:容器端口  --name  名称  镜像id

七、Doker-Compose

  将运行容器时,需要的全部配置都写在一个固定的docker-compose.yml文件中

  Docker-Compose  可以批量管理容器

1、下载并安装DockerCompose

      1.去github上下载docker-compose可执行文件

wget https://github.com/docker/compose/releases/down/1.24.1/docker-compose-Linux-x86_64

2.修改名字

mv docker-compose-Linux-x86_64 docker-compose

3、修改docker-compose的权限

chmod 711 docker-compose

4、将docker-compose 移动到 /usr/local/docker-compose/bin

mkdir  -p /usr/local/docker-compose/bin

mv docker-compose   /usr/local/docker-compose/bin

5、配置环境变量

vi  /etc/profile

Shift +G    跳转到最后一行

export PATH=$JAVA_HOME/bin:/usr/local/docker-compose/bin:$PATH

保存并退出

输入 source /etc/profile  

          6、在任意目录输入 docker-compose

2、准备一个针对管理MYSQL的yml文件

建立一个目录,然后进入该目录,在该目录编辑yml文件

mkdir  compose_mysql

cd  compose_mysql

vim   docker-compose.yml

 注意问题:

1、yml文件是不允许编辑制表符  \t  tab键  可以敲空格键

                   2、容器越来越来多注意端口、容器服务器命名问题。

启动docker-compose管理的容器

                     docker-compose  up  -d    #启动docker-compose管理mysql

                     docker-compose  down     #关闭docker-compose管理mysql

 3、通过Dockerfile和docker-compose定义自定义镜像

       1、定义docker-compose.yml

version: '6.6'
services:
app:
restart:always
build:
context: ../ #指定Dockerfile所在的路径
dockerfile:Dockerfile #指定Dockerfile的名称
image:app:1.2 #指定镜像的名称
container_name:app #容器名称
ports:
- 80:80 #端口号
environment:
TZ:Asia/Shanghai

2、定义Dockerfile

from  docker.io/microsoft/aspnetcore
copy app /usr/local/
workdir /usr/local/
cmd ["dotnet", "app.Web.dll"]

3、将准备好的内容丢到LInux并执行命令

docker-compose  up  -d  #构建镜像并允许容器

4、docker-compose的常用命令

  docker-compose up  -d            #允许docker-compose管理的内容名

            docker-compose  down            #关闭,并删除容器

            docker-compose  stop              #停止允许容器

            docker-compose  start              #启动已经存在的容器

            docker-compose    ps              #查看docker-compose管理的全部容器

            docker-compose  logs  -f         #查看docker-compose管理的容器和日志

注释:上面的命令是你管理当前路径的yml目录的容器,如果你在其他路径建立的yml,需要进入到该路径进行运行。

以上命令,开发人员学会了,就可以了。不需要学习太深,更专业的底层交给运维人员去处理就行了。

开发人员要学的Docker从入门到日常命令使用(通俗易懂),专业运维人员请勿点!的更多相关文章

  1. 编写一个BAT脚本协助运维人员遇到问题时候调测数据库是否有效连接成功的操作攻略

    简单摘要: 1.内网系统出现故障需要排查 2.运维人员不熟悉数据库操作,没法通过连接数据库和执行SQL语句的方式排查数据库及数据是否正常 3.解决方案:编写一个bat脚本,运维人员双击运行即可.   ...

  2. 运维人员:走好你的IT运维路

      转自 http://os.51cto.com/art/201303/387120.htm   现阶段,大多数运维人员只是处于被动低效率手工救火的状态,企业对其重视程度不高,导致部分运维人员对自己的 ...

  3. [转]2016年linux运维人员必会开源运维工具体系

    linux运维人员必会开源运维工具体系 说明:不同的技术人员,不同的阶段确定知识边界非常重要,否则,就像马拉车,不知道终点在哪,累死也达不到目标.例如拿8K要学多少,拿15K要学多少.一个新手也许只想 ...

  4. (转)2017年Linux运维人员必会开源运维工具体系

    标签:操作系统 中间件 千里马 Linux 技能 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51ct ...

  5. linux运维人员成长

    原文地址:https://blog.csdn.net/kwame211/article/details/78059331 初级篇 linux运维人员常用工具拓扑详见: 1rsync工具 很多地方经常会 ...

  6. Linux运维人员如何学习python编程

    Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...

  7. 一切从“简”,解放IT运维人员

    运维人的神技 运维既是个技术活儿也是个苦差事,而运维人员被期望有着无限的技能:主机.存储.网络.操作系统样样精通,而且还要会写SQL.shell.开发语言java..net.python等等,对业务更 ...

  8. IP网络主动测评系统——IT运维人员的好帮手

    一.前 言 随着计算机网络的普及和快速发展,互联网已经融入到人们的衣食住行等方方面 面,如工作.购物.音视频聊天.视频会议.朋友圈.抖音.在线网游.网络电影 电视等.毫不夸张地说,现如今大部分人的绝大 ...

  9. Linux运维人员共用root帐户权限审计

    Linux运维人员共用root帐户权限审计 2016-11-02 运维部落 一.应用场景 在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度.不出问题还 ...

随机推荐

  1. 计算属性、侦听属性、局部与全局组件使用、组件通信(父子互传)、ref属性、动态组件和keep-alive、插槽

    今日内容概要 计算属性 侦听属性 局部组件和全局组件 组件通信之父传子 组件通信之子传父 ref属性(组件间通信) 动态组件和keep-alive 插槽 内容详细 1.计算属性 # 插值的普通函数,只 ...

  2. thinkphp6事件监听event-listene

    事件系统可以看成是行为系统的升级版,相比行为系统强大的地方在于事件本身可以是一个类,并且可以更好的支持事件订阅者. 事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业 ...

  3. 伪元素 Before & Aster

    1. html 结构 <label class="is-required" for="name">姓名</label> <inpu ...

  4. python基础练习题(题目 作用域、类的方法与变量)

    day29 --------------------------------------------------------------- 实例043:作用域.类的方法与变量 题目 模仿静态变量(st ...

  5. 记一次MySQL数据迁移到SQLServer全过程

    为什么要做迁移? 由于系统版本.数据库的升级,导致测试流程阻塞,为了保证数据及系统版本的一致性,我又迫切需要想用这套环境做性能测试,所以和领导.开发请示,得到批准后,便有了这次学习的机会,所以特此来记 ...

  6. DBSCAN算法概念【聚类】

    不用设值K个簇的值 需要设置两个值:minPts和半径r的值 可视化展示 核心对象,传销组织头头 传销方式发展下线,在某一个子组织内,一个不是首领的人没有任何下线,就称这个人为''边界点'' 圈圈圈圈 ...

  7. Linux网络重点知识总结性梳理

    一个执着于技术的公众号 1 OSI七层模型 层次 说明 功能/协议 应用层 应用程序及接口 提供应用程序的接口:FTP telnet http pop3等 表示层 对数据进行转换.加密和压缩 将上层的 ...

  8. 伪元素选择器,选择器优先级,CSS修改文字属性,CSS修改字体属性,CSS修改其他属性

    伪元素选择器 未使用元素选择器的效果 第一行:伪元素选择器:选择部分内容 第二行:伪元素选择器:选择部分内容 伪元素选择器:选择部分内容 伪元素选择器:选择部分内容 ::selection:选择指定元 ...

  9. mybatis xml 中 trim 多余的符号

    <if test="(mac != null and mac != '') or (roomNo != null and roomNo != '') or (bedNo != null ...

  10. 常见排序算法的golang 实现

    五种基础排序算法对比 五种基础排序算法对比 1:冒泡排序 算法描述 比较相邻的元素.如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素 ...