目录
** ✨✨✨大家好,我是会飞的鱼-blog,今天我来给大家介绍一下Mysql,有不足之处,请大家多多指教。感谢大家支持!!!**
前言
这学期,学校开了一门云计算大数据课程,老师要求从OpenStack、Hadoop、Docker等软件进行部署一个框架。 我去从中选择了一个Docker,来对这个作业进行实现。以下就是我对这次作业的实现过程以及注意事项,还有犯的错误总结。
1.1引言
以下时Docker可以解决的问题:
1.我本地运行没问题啊。 环境不一致 2. 哪个哥们又写死循环了,怎么这么卡 在多用户的操作系统下,会相互影响 3.淘宝在双11的时候,用户量暴增。 运维成本过高的问题 4.学习一门技术,学习成本过高 关于安装软件成本过高
1.2Docker的由来
一帮年轻人创业,创办了一家公司,2010年的时候专门做PASS平台,到了2013年的时候,像亚马逊、微软、Google都开始做PASS平台。2013年,将公司内的核心技术对外开源,核心技术就是Docker。
到了2014年的时候,得到了C轮的融资,$4000W。
到了2015年的时候,得到了D轮的融资,$9500W。
自此,他们全身贯注的维护Docker。
所罗门(docker)主要作者之一:
1.3docker的思想
集装箱:
会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以了。
标准化:
1.运输的表转化:Docker有一个码头,所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,就直接派大海豚搬运这个集装箱就可以了。 2.命令的标准化:Docker提供了一系列的命令,帮助我们去获取集装箱等等操作。 3.提供了REST的API:衍生除了很多的图形化界面,Rancher。
隔离性:
Docker在运行集装箱内的内容时,会在Linux的内核中,单独的开辟一片空间,这片空间不会影响到其他程序。
注册中心。(超级码头,上面放的就是集装箱)
镜像。(集装箱)
容器。(运行起来的镜像)
图解演示
将我的环境打包的集装箱运输到公共仓库:
假如别人需要使用我的环境,也可以通过docker从公共仓库运输我的环境打包的集装箱到别人的环境里面:
二、Docker的基本操作
2.1安装Docker
#1.下载关于Docker的依赖环境
yum -y install 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
设置完成:
#注意这一点,如果不配置,默认去国外下载(速度会很慢,因为服务器在国外)
#3.安装Docker
yum makacache fast
yum -y install docker-ce
安装完成
#4.启动Docker,并设置为开机自动启动、测试
# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker
启动成功:
测试:
docker run hello-world
拉取镜像,并且运行镜像成为一个容器(如果以上步骤没错,证明你也安装成功docker了)。
2.2Docker的中央仓库
#1.Docker官方的中央仓库
这个仓库是镜像最全的,但是下载速度比较慢。 网址:hub.docker.com
#2.国内的镜像网站
网易蜂巢、daoCloud....... 网易蜂巢:c.163.com/hub (需要登录,不推荐使用) daoCloud:hub.daocloud.io
#3.私服
在公司内部会采用私服的方式拉取镜像(添加配置)
# 需要在 /etc/docker/daemon.json
{
"resistry-mirros": "https://registry.docker-cn.com"],
"insecure-registries": ["ip:prot"]
}
# 重启两个服务
systemctl daemon-reload
systemctl restart docker
2.3镜像的操作
#1.拉取镜像到本地
docker pull 镜像名称 [:tag]
# 例子:(需要联网)
docker pull daocloud.io/library/tomcat:8.5.15-jre8
#2.查看全部本地镜像
docker images
#3.删除本地镜像
docker rmi 镜像的标识
#4.镜像的导入导出(不规范)
# 将本地的镜像导出
docker save -o 导出的路径 镜像id
# 加载本地的镜像文件
docker load -i 镜像文件
#5.修改镜像名称
docker tag 镜像id 新镜像名称:版本
2.4容器的操作
#1.运行容器
#简单操作
docker run 镜像的标识|镜像名称[:tag]
#常用的参数
docker run -d -p 宿主机端口: 容器端口 --name 容器名称 镜像的标识|镜像名称[:tag]
# -d:代表后台运行容器
# -p 宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
# --name 容器名称:指定容器的名称
#2.查看正在运行的容器
docker ps [-qa]
# -a:查看全部的容器,包括没有运行
# -q:只查看容器得到标识
#3.查看容器的日志
docker logs -f 容器id
# -f:可以滚动查看日志的最后几行
#4.进入到容器内部
docker exec -it 容器id bash
#5.删除容器(删除容器前,需要先停止容器)
# 停止指定的容器
docker stop 容器id
#停止全部容器
docker stop $(docker ps -qa)
#删除指定容器
docker rm 容器id
#删除全部容器
docker rm $(docker ps -qa)
#6.启动容器
docker start 容器id
思考:
1.Docker镜像本质是什么?
是一个分层文件系统
2.Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的ios文件要几个G?
Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
3.Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所以整个对外暴露的tomcat镜像大小500多MB
3.1dockerfile-镜像原理
Docker镜像是由特殊的文件系统叠加而成 最底端是bootfs,并使用宿主机的bootfs 第二层是root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统一文件系统(Union File System) 技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。 一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像可以成为基础镜像。 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器
![edae259e24074a48822d930d7d3dd937.png](https://img-blog.csdnimg.cn/edae259e24074a48822d930d7d3dd937.png)
3.2dockerfile-容器转为镜像
Docker 镜像如何制作?
#1.容器转换为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
3.3dockerfile-概述及关键字
#1.dockfile概念
1.dockerfile是一个文本文件 2.包含了一条条的指令 3.每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像 4.对于开发人员:可以为开发团队提供一个完全一致的开发环境 5.对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件 构建一个新的镜像开始工作了 6.对于运维人员:在部署时,可以实现应用的无缝移植
四、Dockerfile-案例-自定义centos
4.1案例:需求
自定义centos7镜像。要求: 1.默认登录路径为/usr 2.可以使用vim
FROM centor:8
MAINTAINER lihao <[email protected]>
RUN yum install -y vim
WORKDIR /usr
cmd /bin/bash
4.2案例:实现步骤
1.定义父镜像:FROM centos:8 2.自定义作者信息:MAINTAINER itheima <[email protected]> 3.执行安装vim命令:RUN yum install -y vim 4.定义容器启动执行的命令:CMD/bin/bash
创建目录,方便管理dockfile文件
mkdir docker-files
创建centor_dockerfile,写dockerfile:
vim centos_dockerfile
用了上面命令会打开,紧接着输入一下命令:
FROM centor:8
MAINAINER haoli <[email protected]>
RUN yum install -y vim
WORKDIR /usr
cmd /bin/bash
最后进行Esc,按:wq退出
通过dockerfile构建镜像文件:
docker build -f ./centos_dockerfile -t haoli:1 .
安装完成:
完成后可以使用命令查看镜像:
docker images
#最后跑这个镜像:
docker run -it --name=c2 haoli_centos:1
使用命令查看
vim a.txt
五、Docker部署C++程序
摘要:如何使用docker部署c/c++程序_docker c++_Coldestmonth的博客-CSDN博客
在我们用Docker部署C++程序之前,让我们先来回顾一下Docker的知识:
这里简要说一下docker中镜像和容器的关系:
Images (镜像)
Docker镜像是一个只读模板,包含创建Docker容器的说明。Docker镜像可以运行Docker镜像中的程序。
Container (容器)
容器是镜像的可运行实例。镜像与容器类似与面向对象中类与对象的关系。可通过Docker API或者CLI命令起停,移动,删除等。明白了docker中镜像和容器的关系之后,我们想要把程序执行起来,其实就是将程序放在镜像中,通过镜像启动一个容器,在容器中执行我们的程序。 那么我们运行一个c/c++程序到底该选择怎么样的镜像呢?其实也很简单,我们只要知道我们的程序如果不使用docker他是在什么系统或者说是环境中使用,那么我们就可以通过docker官方的仓库去下载这样的镜像来供我们创建包含我们程序的镜像了。 我们现在有这样的一段代码,功能就是给一个叫t.txt的文件中写hello world!!!。下面我们就通过这个简单的代码来示范如果把一个c/c++程序放到docker镜像中制作一个新的镜像
将下面代码写入txt.c文件中,方面后面执行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
FILE* file = fopen("t.txt","w+");
if (file == NULL)
{
return 0;
}
char buf[20]="hello world!!!\n";
int len = strlen(buf);
while(1)
{
fputs(buf,file);
fflush(file);
// printf("%s",buf);
sleep(1);
}
fclose(file);
return 0;
}
#1.镜像选择
c/c++程序我们都是直接运行在linux系统上,所以我们可以直接选择centos或者ubuntu镜像,在这里我们是要把.c文件编译成一个可执行程序,docker还有一个gcc或者g++的镜像,使用gcc或者g++镜像的话,我们就不需要在ubunt或者centos镜像中再安装gcc 、g++了。
这里我们采用Centos 8.2
推荐三种镜像:
- gcc 或者g++
- ubuntu
- centos
#2.下载镜像到宿主机
# 查看版本
docker search gcc
下面是执行结果:
然后现在进行安装镜像gcc:
# 下载镜像
docker pull pcc
安装好后,我们使用命令查看已经下载对的镜像
#3.使用gcc镜像制作我们自己的镜像
这个上面我有详细的例子,这里就不过多介绍,忘了的同学,可以往上看一看,复习一下。
在这里我们通过Dockerfile的方式创建自己的镜像:
使用命令写Dockfile:
vim DockerFile
下面是Dockerfile的内容:
FROM gcc:latest
RUN mkdir /usr/src/myapp
COPY test.c /usr/src/myapp
WORKDIR /usr/src/myapp
RUN gcc test.c
CMD ["./a.out"]
最后使用命令来构建一个镜像:
docker build -f ./Dockerfile -t mytest .
-f 指定Dockerfile文件路径
-t 设置新的镜像名称以及版本(要是没指定版本,为最新版)
这时候,我们可以执行命令查看是否创建了该镜像
docker images
# 我们从下面的截图中,可以看到已经创建好了容器mytest
镜像制作好了之后,我们运行容器,通过一下命令
docker run -d mytest
进入到容器之后我们执行top命令,查看a.out
查看当前目录发现已经生成了t.txt文件说明,a.tou程序执行正常:
总结
😊**✨✨✨**以上就是我学习的总结,希望大家一起探讨、探讨,一起加油,迈向更好的明天!!!
版权归原作者 会飞的鱼-blog 所有, 如有侵权,请联系我们删除。