Docker的思想
集装箱
会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以了。
标准化
运输的标准化:Docker有一个码头,所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,就直接到码头搬运这个集装箱即可。
命令的标准化:Docker提供了一些标准化命令,帮助我们去获取集装箱等等操作。
提供了REST的API:衍生出了很多的图形化界面,例:Rancher
隔离性
Docker在运行集装箱的时候,会在Linux的内核中,单独的开辟一片空间,这片空间不会影响到其他程序。
1 2 3
| 注册中心(超级码头,上面放的就是集装箱) 镜像(集装箱) 容器(运行起来的镜像)
|
1 2
| 镜像,就是面向对象中的类,相当于一个模板。 容器,就是类创建的实例,就是依据镜像这个模板创建出来的实体。
|
Docker的基本操作
安装Docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 1,下载安装Docker的依赖环境 yum -y install yum-utils device-mapper-persistent-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服务 systemctl start docker 设置开机自动启动 systemctl enable docker 测试 docker run hello-world
|
Docker的中央仓库
1 2 3 4 5 6
| 1,Docker官方的中央仓库,这个仓库是镜像最全的,但是下载速度较慢 https://hub.docker.com/ 2,国内的镜像网站:网易蜂巢,daoCloud http://c.163yun.com/hub#/home http://hub.daocloud.io/ 3,在公司内部会采用私服的方式拉取镜像
|
1 2 3 4
| 需要在/etc/docker/demon.json { "registry-mirrors":["https://registry.docker-cn.com"] }
|
镜像(集装箱)的操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 1,拉取镜像到本地 docker pull 镜像名称 举个例子 docker pull daocloud.io/library/tomcat:8.5.15-jre8
2,查看全部本地镜像 docker images
3,删除本地文件 docker rmi 镜像的标识(前面两个字母)
4,镜像的导入导出(不规范) 将本地的镜像导入 docker save -o 导出的路径 镜像id
加载本地的镜像文件 docker load -i 镜像文件
修改镜像名称 docker tag 镜像id 新镜像名称:版本
|
容器的操作(运行起来的镜像)
1 2 3 4 5 6 7 8 9
| 运行容器 简单操作 docker run 镜像的标识 镜像名称 [:tag] -d:代表后台运行容器 -p:宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口 --name:容器名称:指定容器的名称
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[:tag] 例:docker run -d -p 8081:8080 --name b8
|
1 2 3
| docker ps 查看正在运行的容器 docker ps -a 查看全部的容器,包括没有运行 docker ps -q 只查看容器得到标识
|
1 2 3
| 查看容器的日志 docker logs -f 容器id -f :可以滚动查看日志的最后几行
|
1 2
| 进入到容器内部 docker exec -it 容器id bash
|
1 2 3 4 5 6 7
| 删除容器(删除容器前,需要先停止容器)
docker stop 容器id 停止指定的容器 docker stop $(docker ps -qa)停止全部容器
docker rm 镜像id 删除指定容器 docker rm $(docker ps -qa) 删除全部容器
|
Docker自定义镜像
中央仓库上的镜像,也是Docker的用户自己上传过去的
1 2 3 4 5 6
| 1,创建一个Dockerfile的文件,并且指定自定义镜像信息。 Dockerfile文件中常用的内容 from:指定当前自定义镜像依赖的环境 copy:将相对路径下的内容复制到自定义的镜像中 workdir:声明镜像的默认工作目录 cmd:需要执行的命令(在workdir下执行的,cmd可以写多个,以最后一个为准)
|
镜像就是上面说的集装箱,仓库就是超级码头,容器就是我们运行程序的地方.docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器.
build:构建,就是构建镜像.
ship:运输,运输镜像,从仓库和主机运输.
run:运行的镜像就是一个容器.
build,ship,run和镜像,仓库,容器是一一对应的.
DockerFile的构建过程
基础知识:
1,每个保留关键字(指令)都是必须是大写字母
2,执行从上到下顺序执行
3,#表示注释
4,每一个指令都会创建提交一个新的镜像层,并提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| FROM centos MAINTAINER zoey<2793988587@qq.com>
ENV MYPATH /usr/local WORKDIR $MYPATH
RUM yum -y install vim
EXPOSE 80
CMD echo $MYPATH CMD /bin/bash
docker bulid -f dockerfile文件路径 -t 创建的镜像名:[tag] .
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| [root@iz88m0zba2pfzdz dockerfile] Sending build context to Docker daemon 27.65kB Step 1/8 : FROM centos latest: Pulling from library/centos 7a0437f04f83: Pull complete Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:latest ---> 300e315adb2f Step 2/8 : MAINTAINER zoey<2793988587@qq.com> ---> Running in 6fed6811727f Removing intermediate container 6fed6811727f ---> 428884ab35bb Step 3/8 : ENV MYPATH /usr/local ---> Running in e3f315c1c37c Removing intermediate container e3f315c1c37c ---> ddbb9ad846b0 Step 4/8 : WORKDIR $MYPATH ---> Running in 35a1e3ceba27 Removing intermediate container 35a1e3ceba27 ---> d7d770769889 Step 5/8 : RUN yum -y install vim ---> Running in f119b2fc3459 CentOS Linux 8 - AppStream 2.2 MB/s | 6.3 MB 00:02 CentOS Linux 8 - BaseOS 1.2 MB/s | 2.3 MB 00:01 CentOS Linux 8 - Extras 9.2 kB/s | 8.6 kB 00:00 Dependencies resolved. From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Installed: gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64 vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch which-2.21-12.el8.x86_64
Complete! Removing intermediate container f119b2fc3459 ---> 492b0e9bfd9f Step 6/8 : EXPOSE 80 ---> Running in ea437f060be5 Removing intermediate container ea437f060be5 ---> 7b1ffe6341bf Step 7/8 : CMD echo $MYPATH ---> Running in 2a3e3fb9e634 Removing intermediate container 2a3e3fb9e634 ---> cadb8d02b5fc Step 8/8 : CMD /bin/bash ---> Running in 485a50d91473 Removing intermediate container 485a50d91473 ---> d7dde5695515 Successfully built d7dde5695515 Successfully tagged mycentos:0.1
|
Docker文件存储
docker文件存储格式,linux的一个存储技术,叫做联合文件系统,是一种分层的文件系统,可以将不同的目录挂到同一个虚拟文件系统下。
比如test1下有三个文件夹,test2下有两个文件夹,还有一个readme文件.联合文件系统就是可以在一个文件夹(test)中看到多个文件夹(test1,test2)中的内容.
docker镜像系统的每一层都是只读的,然后把每一层加载完成之后这些文件都会被看成是同一个目录,相当于只有一个文件系统.docker的这种文件系统被称之为镜像.