docker俗称容器。

为什么需要容器:

在没有集装箱前,我们出口商品时,我们运煤、运车、运家电等都需要使用专用的船。为了提高每条船的运输能力,最后发明了集装箱,每个物品都装在自己的箱子里,这样既保证了货物的安全也保证了船只的运输量。同理:

现在应用系统架构越来越复杂,apache,ngnix,tomacat,weblogic,oracle,mysql等等。这么多的软件,支持他们运行的驱动文件更是变化无穷。以往想让这么程序都安全无误的运行起来,则需要将他们各自装在不通的服务器上,这样必然导致不够繁忙的业务存在系统硬件资源的浪费。为了实现将这些程序能在同一个台服务器上安全正确运行,我们想到了容器。

什么是容器

我们知道操作系统分为系统层和用户层,系统层面是与硬件交互,用户层面则是与应用软件和系统层交互。为了实现容器的原则,一个docker就是一个新的用户层。

我们知道docker也是一个软件,难道我们每次安装一个软件,如:apache,我就需要安装一个docker吗?

答案是不需要的。

docker是一个最底层的用户层。为了能最小化的安装一个软件。我们对apache、ngnix这些软件又各自独立地封装在了一个容器里,这些小容器里仅仅存放了与对应软件相关的东西,所以他们的体积很小。那么这些软件的容器又是怎么和docker这个底层容器怎么通信的呢?

答案是:通过叠罗汉的方式,docker上分别重叠apache,ngnix。如果需要在apache上开发一个软件,那么我们可以再apache上再构建一个容器,叠在apache上面。那么这样必然会存在文件重名的情况呀,比如:etc/a.log 可能在apache容器和docker容器中都有,怎么办呢?

答案是:文件从上层往下层访问,找到即停止。

容器的基本操作:

容器仓库:这个是行业里,大家公用的一个库,大家可以传开源的容器在里面,供大家下载使用。

1、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker --showduplicates | sort -r

2、安装docker
$ sudo yum install docker #系统会自动原则最新的版本进行安装

3、启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker

4、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version

镜像:同容器仓库一个意思。为了分享开源的容器软件。开发人员将某功能的容器进行镜像(个人理解就是:虚拟机的快照,或者压缩包),上传到容器库里供大家下载

5、搜索某镜像
$ docker search httpd

6、下载镜像,将镜像下载本机里
$docker pull  httpd

7.查看已经下载下来的所有的容器镜像包:

$docker images

8、安装镜像,安装后就直接进入httpd容器中,若退出该容器该容器就停止运行。
$docker run -it   httpd

9、下载镜像并安装,然后自动后台运行。因会创建一个后台进程(即守护进程)。
$docker run -d -p 80:80 --name=httpd  httpd

-d:后台运行

-p:端口映射。将容器的端口和物理机的端口进行映射(连接在一起),访问物理机80端口docker就会将端口内容传到容器的80端口上。80:80 第一个80是物理机的,第二个:虚拟机的

--name: 个人定义的容器名字,

最后的httpd: 搜索到的镜像名。

注意:docker run 具有下载,再自动安装的特点,所以不需要自己特意去下载。

10.查看运行中的docker

$ docker ps

11.查看所有的docker :包括运行中的和当前未运行的

$ docker ps -a

12.进入后台运行的容器,进入容器后,exit退出容器。

$ docker exec -it httpd /bin/sh

/bin/sh :进入容器时开启的一个终端。可能会报错。因为系统不同,开启终端的命令不同。可以尝试:bash 、/bin/bash等  

 

13、根据格式删除所有镜像,如下:删除所有当前未运行的容器
$docker rm $(docker ps -qf status=exited)

14.启动、停止容器

$docker start httpd

$docker stop httpd

15.容器的删除,已经安装了的容器

$docker rm httpd

16.删除镜像文件。

$docker rmi httpd

17.-v命令的解释:

我们常常看到以下的东西:

1.docker run  --volume=/:/rootfs:ro

2.docker run  --v "/:/rootfs:ro"

这个东西到底是在做什么呢?

--v其实就是为了给容器添加数据卷。容器中运行的软件,我们也会有时需要配置软件的文件。那我们怎么配置呢?

难道每次都运行了容器,然后再进入容器,进行修改文件,然后再重新运行容器吗?

为了解决这个麻烦,我们就想到了:我们就在当前系统中把文件写好,然后在安装容器的时候就指定这些文件拷贝到容器的对应目录下。--v就是解决这个麻烦的

--v "/:/rootfs:ro"为例:

第一个引号前的"/":代表了当前系统的文件

两个引号中间的内容"/rootfs":代表容器的文件目录或文件

最后一个引号后面的内容“ro”: 代表容器文件的权限更改(如果不填写这一项的话, 那么docker修改rootfs 就会修改主机根目录的文件)

总结:把系统的/目录的东西,拷贝到容器/rootfs中,然后给这个目录赋予ro权限

18.将文件从主机复制到docker中,

docker ps XX.log docker名或者id:/  

将主机当前目录下的xx.log复制到docker的根目录下

posted on 2018-06-25 18:46  进_进  阅读(1679)  评论(0)    收藏  举报