开发人员要学的Docker从入门到日常命令使用(通俗易懂),专业运维人员请勿点!
一、介绍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从入门到日常命令使用(通俗易懂),专业运维人员请勿点!的更多相关文章
- 编写一个BAT脚本协助运维人员遇到问题时候调测数据库是否有效连接成功的操作攻略
简单摘要: 1.内网系统出现故障需要排查 2.运维人员不熟悉数据库操作,没法通过连接数据库和执行SQL语句的方式排查数据库及数据是否正常 3.解决方案:编写一个bat脚本,运维人员双击运行即可. ...
- 运维人员:走好你的IT运维路
转自 http://os.51cto.com/art/201303/387120.htm 现阶段,大多数运维人员只是处于被动低效率手工救火的状态,企业对其重视程度不高,导致部分运维人员对自己的 ...
- [转]2016年linux运维人员必会开源运维工具体系
linux运维人员必会开源运维工具体系 说明:不同的技术人员,不同的阶段确定知识边界非常重要,否则,就像马拉车,不知道终点在哪,累死也达不到目标.例如拿8K要学多少,拿15K要学多少.一个新手也许只想 ...
- (转)2017年Linux运维人员必会开源运维工具体系
标签:操作系统 中间件 千里马 Linux 技能 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51ct ...
- linux运维人员成长
原文地址:https://blog.csdn.net/kwame211/article/details/78059331 初级篇 linux运维人员常用工具拓扑详见: 1rsync工具 很多地方经常会 ...
- Linux运维人员如何学习python编程
Linux运维人员如何学习python编程 从不会写代码,到自己独立能写代码解决问题 .这个问题很重要!盲目学习所谓的项目,最后 还是不会自己写代码解决问题.首先解决了独立能写代码解决问题,再通过项目 ...
- 一切从“简”,解放IT运维人员
运维人的神技 运维既是个技术活儿也是个苦差事,而运维人员被期望有着无限的技能:主机.存储.网络.操作系统样样精通,而且还要会写SQL.shell.开发语言java..net.python等等,对业务更 ...
- IP网络主动测评系统——IT运维人员的好帮手
一.前 言 随着计算机网络的普及和快速发展,互联网已经融入到人们的衣食住行等方方面 面,如工作.购物.音视频聊天.视频会议.朋友圈.抖音.在线网游.网络电影 电视等.毫不夸张地说,现如今大部分人的绝大 ...
- Linux运维人员共用root帐户权限审计
Linux运维人员共用root帐户权限审计 2016-11-02 运维部落 一.应用场景 在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度.不出问题还 ...
随机推荐
- HCIE笔记-第二节-数据封装+传输介质
数据传输的形式 1.电路交换 在通信之前,维护一条逻辑意义上的链路,这条链路仅仅可以传递两者的数据 2.报文交换 在数据之外,加上能够标识接收者.发送者的信息 3.分组交换(最主流) 依然进行报文交换 ...
- Linux的软件安装tomcat 以及jdk
因为tomcat的启动需要jdk,所以我们先安装jdk,安装完成后再安装tomcat 具体的文件大家可以到官网下载,下面介绍安装步骤 目录 jdk安装 1.通过xftp或者其他方式将安装包传到我们的L ...
- 一个实战让你搞懂Dockerfile
摘要 在认识Dockerfile的基础功能之后,即一个用基础镜像来构建新镜像的文本文件,就需要在实际工作中使用其灵活便利的操作来提升我们的工作效率了,这里演示在Tomcat里运行一个程序的过程,以此来 ...
- macOS 安装 Nebula Graph 看这篇就够了
本文首发于 Nebula Graph Community 公众号 背景 刚学习图数据的内容,当前网上充斥大量的安装文档,参差不齐,部署起来令人十分头疼. 现整理一份比较完整的安装文档,供大家学习参考, ...
- [AcWIng 799] 最长连续不重复子序列
点击查看代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int a[N], s[N]; int mai ...
- 再见 FTP/SFTP!是时候拥抱下一代文件传输利器了!
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 两台电脑之间该如何传送档案,其实方法有超多种的,像是 FTP 或透过 SSH 方式来传送档案, ...
- Flask01 第一个flask项目
参考地址:https://github.com/miguelgrinberg/microblog/tree/v0.1 flask环境[苹果M1] 添加虚拟环境 python3 -m venv venv ...
- sklearn机器学习-特征提取1
scikit-learn机器学习的特征提取部分较多nlp内容,故学到一半学不下去,看完nltk再来补上 scikit-learn机器学习的特征提取这一章感觉讲的不是特别好,所以会结合着来看 首先是Di ...
- 谈谈markdown
谈谈markdown 欢迎关注我的博客,️点他即可. 最近一年开始学习有关编程的内容了. 迷上代码的我开始接触到一些好玩的东西,我发现很多事情都可以由代码来完成,甚至是ppt.同学就经常说我疯掉了,连 ...
- 其实 Gradle Transform 就是个纸老虎 —— Gradle 系列(4)
前言 目前,使用 AGP Transform API 进行字节码插桩已经非常普遍了,例如 Booster.神策等框架中都有 Transform 的影子.Transform 听起来很高大上,其本质就是一 ...