Docker 从入门到掉坑,学到就是赚到

Docker 介绍

简单的对docker进行介绍,能够把它理解为一个应用程序执行的容器。可是docker自己和虚拟机仍是有较为明显的出入的。我大体概括了一下,能够总结为如下几点:java

Docker 从入门到掉坑,学到就是赚到

docker自身也有着不少的优势,关于它的优势,能够总结为如下几项:mysql

Docker 从入门到掉坑,学到就是赚到

Java程序员加入Java技术剑能够领取一份【Java核心知识点整理】文档【涵盖Java架构师必会的29个技能解析】
linux

安装docker

从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。nginx

Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。程序员

首先咱们须要移除旧的docker版本:redis

$ sudo yum remove docker \
 docker-client \
 docker-client-latest \
 docker-common \
 docker-latest \
 docker-latest-logrotate \
 docker-logrotate \
 docker-selinux \
 docker-engine-selinux \
 docker-engine复制代码

接着咱们须要安装一些必要的系统工具:sql

sudo yum install -y yum-utils device-mapper-persistent-data lvm2复制代码

接下来咱们须要添加软件源信息:docker

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo复制代码

更新 yum 缓存:centos

sudo yum makecache fast复制代码

验证容器

上边的操做都是一些准备操做,若是步骤过程当中没有出现什么异常的话,后边就能够安装docker了缓存

sudo yum -y install docker-ce复制代码

安装完毕以后即是开启docker后台服务步骤:

sudo systemctl start docker复制代码

当咱们的docker镜像下载完毕以后,默认会有个helloworld的镜像用于测试:

测试运行 hello-world

因为本地没有hello-world这个镜像,因此会下载一个hello-world的镜像,并在容器内运行。

关于docker的镜像和容器介绍

容器的本质就是进程,不一样的容器有着本身独立的root文件系统,网络配置,一个隔离的空间。容器一旦消失,则里面包含的数据也会发生丢失。容器里面全部的存储信息都应该使用数据卷或者其余形式。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。所以,使用数据卷后,容器删除或者从新运行以后,数据却不会丢失。

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建以后也不会被改变。

docker安装nginx

初步安装完了docker以后便开始进入一些实战环节吧

首先咱们须要在docker里面pull相关的nginx镜像:

一开始宿主机并无启动docker容器,须要启动docker服务

而后pull镜像下来,而且启动

参数讲解:-d 后台启动 -p 宿主机的80端口映射容器的80端口。测试一下相关页面,成功则以下图:

Docker 从入门到掉坑,学到就是赚到

接下来咱们能够查看一下镜像标签

这个命令查询出来的只是镜像的id,可是咱们没法根据镜像id进入容器中,进入容器须要有容器的id才能够:

因而能够经过这个命令来查看容器的id:

而后进入容器修改信息
进入容器的命令有不少种,这里推荐可使用这种类型:

经过选择相应的tag-id进入容器,进入到容器里面以后,会发现里面仿佛就是一个新的linux操做系统:

Docker 从入门到掉坑,学到就是赚到

如何关闭docker容器?

比较简单,这里很少说,本身操做就懂了

docker kill 4591552a4185复制代码

文件拷贝

懂得了基本的docker容器操做以后,咱们来试试如何上传文件到docker容器中,这个须要和宿主机进行文件交换才能够。

首先咱们须要拿到容器id的全称:

而后将文件拷贝进入docker容器中:

接下来的操做就比较简单了,查看到移动的页面便可:

接下来的基本都是常规操做了,进入咱们的nginx配置中:

发现没有vi命令,须要下载安装

在使用docker容器时,有时候里边没有安装vi,敲vi命令时提示说:vi: command not found,这个时候就须要安装vi,但是当你敲apt-get install vi命令时,提示:

这时候须要敲:apt-get update,这个命令的做用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。等更新完毕之后再敲命令:apt-get install vi命令便可。

如今docker有了,nginx镜像也开启了,就能够对nginx的配置作修改了。

docker里面安装redis

首先仍是老规矩,pull镜像

拉取镜像结束以后,内容以下:

ok,基本镜像有了,那么就直接开启容器吧

这里咱们修改了宿主机的端口号为8879映射容器里面的6379哈。

参数解释

  • -p 8879:8879: 将容器的8879端口映射到主机的6379端口
  • -v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
  • redis-server —appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

启动完毕以后,一切都开始正常运行了。

进入容器,开始检测redis是否正常:

这里建议开启redis的时候最好在宿主机作一份redis配置文件,映射到容器里面,否则进入容器中根本找不到相应的redis配置文件,很痛苦。

docker里面安装MySQL

这部分的内容比较简单,只须要将镜像拉下来便可:

而后等待一段时间,终于咱们的MySQL容器安装好了:

Docker 从入门到掉坑,学到就是赚到


容器的内存资源消耗状况
因为我购买的是一台小型的服务器,相关的配置以下所示,因此在给各个运行的容器进行资源分配的时候须要考虑到每一个docker容器占用的资源状况。

Docker 从入门到掉坑,学到就是赚到

目前已经搭建了mysql容器,redis容器,还有一个nginx容器,若是再添加一个java应用的话,目测跑java容器须要至少500m左右的内存大小来支撑。

经过使用docker stats命令来看当前服务器的内存,因为平日的访问量并不高,能够给当前的mysql,redis分配小一些内存资源:

Docker 从入门到掉坑,学到就是赚到

这时候能够采用docker的update命令来对内存大小进行管理分配:

--memory-swap -1 参数是指不让容器和宿主机进行内存交换,若是须要则须要额外调整,
设置下内存的限制以后结果以下:

Docker 从入门到掉坑,学到就是赚到

docker容器启动失败分析实战

在配置docker新容器的时候,例如说给mysql配置my.cnf文件的某些属性,须要重启容器才能生效。可是有时候可能由于手误,致使配置出现异常,容器重启失败,这个时候该怎么办呢?

这个时候最简单粗暴的方式就是,将该容器先rm掉,而后从新安装,可是这样的操做过于暴力化,万一容器里面还有其余重要数据,直接rm操做不可取。

其实docker本质也是安装在宿主机里面的,因此相应的配置文件在宿主机里面也能找到痕迹,这里记录了以前我掉坑的一些补救方式:

经过该命令能够查看到容器的内部配置属性信息:

Docker 从入门到掉坑,学到就是赚到

这时候咱们能够查看到一个叫作MergedDir的目录文件夹,进入该文件夹的上一级目录,

接着咱们查看该目录下结构,会发现一个叫作diff的文件夹

Docker 从入门到掉坑,学到就是赚到

带着好奇心,一步一步地进入到文件夹的内部,就会找到以前在docker容器中配置的mysql文件了,手动将原先的配置修改回来,容器便重启成功了。

Docker 从入门到掉坑,学到就是赚到
相关文章
相关标签/搜索