Docker安装与使用教程
CentOS安装配置卸载Docker
前提
1.只能是64位CPU
2.内核3.8以上(RHEL/CentOS 6.5,Fedora Core 19以上),没办法,2014年才出现,2017年才开始有热度,注意:6.8的版本与7安装方式不太一样。


3.内核必须支持一种适合的存储驱动(Device Manager;AUFS;vfs;btrfs;)

如果没有的话,需要安装

4.内核必须支持并开启cgroup和nameSpace功能
YUM安装
一、安装依赖包

三、更新yum缓存
四、安装CE版

五、启动

六、检查

七、执行一个实例——hello world

镜像加速
登入自己阿里云账号https://dev.aliyun.com/search.html(作为计算机从业者是应该有的)


一、CentOS7
1.新建deamon.json

2.加载配置文件
3.重启服务
架构

常用命令
一、帮助命令
1.docker help

2.官方文档https://docs.docker.com/

二、镜像命令
1.列出本地镜像

2.查询镜像(查询是在https://hub.docker.com/,但是下载是在阿里云下载)


3.下载镜像


4.删除镜像

三、容器命令
前提:有镜像才能有容器
1.新建并启动容器

1)以CentOS为模板生成一个容器,其中的110850f96301是新生成容器的地址


2)使用镜像在后台模式启动一个容器
$> docker run -d centos
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。所以下面的方法就没问题。
$> docker run -d centos:7.6.1810 /bin/sh -c "while true;do echo 'YangBingxue is the most handsome man in NCEPU';sleep 2;done"

3)-P随机端口


4)-p指定端口

2.列出当前所有正在运行的容器


3.退出容器


回来



4.启动容器

但是有时会出错,启动mysql出问题,根据提示信息作出方案,kill端口。


5.重启容器

四、容器管理
1.查看容器日志信息



2.查看容器内运行的进程

3.查看容器内部细节

4.从容器拷贝文件到主机上


5.提交容器成为镜像

比如:我们打算把基于Nginx的诚实网站提交




6.提交到阿里云

镜像原理
1.什么是镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
2.UnionFS(联合文件系统):
Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
3.Docker镜像加载原理
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs 就行了。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
4.镜像分层
以pull为例,pull一个nginx需要同时下载多层。


镜像分层最大的一个好处就是:共享资源
eg:有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
容器数据卷
一、容器数据卷特点:
数据卷可在容器之间共享或重用数据
卷中的更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止
主机与容器间的数据共享
二、添加容器数据卷
1.命令添加
1) run -v

这时在host上在检查的时候,新生成一个新文件夹my_data_volume,contain上面也新生成一个新文件夹 data——volume_container。
2)检查是否挂载成功

3)读写操作
主机touch test,container立即出现test;
container vi test,Host cat立即出现结果
即使容器退出,主机依旧保存数据不变;
Host在container退出的时候touch test3,container在登入也会出现

我上面的出错了,应该是docker start bc654a0dcc2c,但是尽管docker ps是两个不同的进程,但是共享文件夹里面的是一样的内容。

可以挂载可读模式(仅对于container)

查看细节

2.DockerFile添加
1)建立文件夹,在DockerFIle使用volume给镜像添加一个或多个数据卷
FROM centos
VOLUME ["/data_volume1","/data_volume2"]
CMD echo "FInish,YangBingxue_is_the_most_handsome_man_in_NCEPU"
CMD /bin/bash
2)build

3)检查是否挂载成功

主机文件位置一般在/var/lib/docker/volumes/下面

4)读写操作

三、数据卷容器 --volumes-from
A容器挂载数据卷,其它容器(B,C)通过挂载这个A(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
下面的docker1就是父容器,docker2与docker3都挂载到docker1上面,是docker1的子容器。

由此可见,父容器的文件,在子容器当中会出现,子容器出现的文件在父容器也会出现,即使删除父容器,子容器的文件依然在

所以,容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
DockerFile
一、什么是DockerFile
1.DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
2.构建过程:
1)编写DockerFIle文件

2)docker build
3)docker run
3从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
Dockerfile是软件的原材料
Docker镜像是软件的交付品
Docker容器则可以认为是软件的运行态。

二、DockerFIle内容
1.基础常识
每条保留字指令都必须为大写字母且后面要跟随至少一个参数
指令按照从上到下,顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交
2.保留字

1)FROM基础镜像,当前镜像是基于那个镜像的
2)MAINTAINER:镜像维护者的姓名和邮箱
3)RUN:容器构建时需要运行的命令
4)EXPOSE:当前容器对外暴露的接口
5)WORKDIR:指定在创建容器后,终端默认登入进来的工作目录
6)ENV:用来在构建镜像过程中设置环境变量



7)COPY:拷贝文件和目录到镜像中
8)ADD:COPY的压缩文件+解压
9)VOLUME:容器数据卷,用于数据保存和持久化
10)CMD:指定一个容器启动时运行的命令
如果有多个CMD的话,只执行最后一个CMD,CMD也可以被docker run 之后的命令替换。
11)ENTRYPOINT:指定一个容器启东时运行的命令
全部ENTRYPOINT全部执行
12)ONBUILD:当构件一个被集成的DockerFile是运行命令,父镜像在被子镜像继承后父镜像的Onbulid被触发。
总结

如果有建议和看法,可以在文末留言,谢谢。
