8-3.docker

目录

 1.docker入门

1.1 docker概述

1.2 docker安装

1.2.1 确定linux系统是centos7的版本 

1.2.2 安装方法

1.2.3 启动docker

1.2.4 查看版本

1.3 docker加速配置

 2.docker的三个基本概念

 2.1 Image(镜像)

2.2 Container(容器)

2.3 Repository(仓库)

3.容器数据卷

3.1什么是容器数据卷

3.2使用数据卷

3.2.1 方式一:直接使用 -v 命令挂载

3.2.2 方式二:使用Dockerfile添加

3.3 数据卷使用案例

3.3.1 mysql案例

3.3.2 tomcat案例

3.3.3 nginx案例

4.DockerFile

4.1 Dockerfile基础知识

4.1.1 Dockerfile是什么

4.1.2 DockerFile的三步构建步骤?

 4.1.3 DockerFile的语法规则

4.1.4 Dockerfile的关键字

4.2 制作Docker镜像

4.2.1制作镜像的相关材料

4.2.2 具体步骤

5.docker的网络模式

   5.1 docker的四种网络模式

    5.2部署项目案例


 1.docker入门

1.1 docker概述

        Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

1.2 docker安装

安装前提说明:目前,CentOS 仅发行版本中的内核支持 Docker,Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 或以上。

1.2.1 确定linux系统是centos7的版本 

#查看内核
#uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
[root@iZbp1ggv5mguiqofg5lm4aZ ~]# uname -r 
3.10.0-1160.42.2.el7.x86_64

1.2.2 安装方法

​
yum -y install curl

curl -sSL https://get.daocloud.io/docker | sh

​

1.2.3 启动docker

systemctl start docker

systemctl enable docker     //开机自启

1.2.4 查看版本

docker version

1.3 docker加速配置

Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是Docker Hub 公共注册服务器中的仓库)因为直接从dockerhub上下载镜像很慢,所以需要配置阿里云镜像加速

https://account.aliyun.com/login/login.htmoauth_callback=https%3A%2F%2Fcr.console.aliyun.com%2Fcn-hangzhou%2Finstances%2Fmirrors&lang=en 

8-3.docker_第1张图片

 2.docker的三个基本概念

  • Image(镜像)
  • Container(容器)
  • Repository(仓库)

 2.1 Image(镜像)

镜像:(镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。)

镜像常用命令:

docker pull  镜像的名字:版本  -------拉取镜像

docker images                       --------查看本地的所有镜像

docker rmi  镜像名字:版本      -------删除镜像

docker version                      ---------查看docker版本

docker info                           --------- 查看docker的具体信息

docker help                              -------docker帮助文档

2.2 Container(容器)

容器:(容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。)

容器常用命令:

docker run         -- 运行容器

          --name    -- 起一个名字 (每个容器的名字都是唯一的)

          -p            -- 端口映射

          -v            -- 文件挂载   可以将容器内部的文件 挂载到宿主机上

          -it           -- 交互式运行

          -e           -- 指定环境变量

          -d            -- 后台运行

          进项的名称:版本号

docker ps  -- 查看正在运行的容器  

docker ps -a  -- 查看所有的容器

docker rm -f  容器的名字或者是ID --- 删除容器

docker exec -it 容器的名称  bash     -- 进入容器内部 

find / -name 文件名称    -----linux的命令 查找文件的位置

ctrl + D        ------退出容器 不会让容器停止

docker cp 容器的名字:/路径   宿主机的路径名字     -- 拷贝

docker start | stop | restart

docker logs 容器名称  --- 查看日志

2.3 Repository(仓库)

仓库:Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。有时候会把仓库 (Repository) 和仓库注册服务器 (Registry) 混为一谈,并不严格区分。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。

仓库又可以分为两种形式:

public(公有仓库)

private(私有仓库)

Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry 。Docker 官方提供了 Docker Registry镜像,可以直接使用做为私有 Registry 服务。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

3.容器数据卷

3.1什么是容器数据卷

docker将应用和环境打包成镜像,如果数据在容器中,那么删除容器时,数据就会丢失,我们希望数据可以存储到本地,容器间可以共享数据!docker产生的数据可以同步到本地!这就是卷技术!通过将容器内的目录挂载到宿主机(Linux)上面来实现。

3.2使用数据卷

3.2.1 方式一:直接使用 -v 命令挂载

docker run -it -v 宿主机目录:容器内目录 -p 主机端口:容器内端口

docker run -it -v 宿主机目录:容器内目录 -p 主机端口:容器内端口
# -it 交互式进入
# -v  volume卷技术
# -p  主机端口
实例:
docker run --name tomcat-car -p 8082:8080 -v /root/docker-v/tomcat/webapps/:/usr/local/tomcat/webapps/ -d tomcat
# docker run 启动容器
# --name tomcat-car 给容器起名为:tomcat-car
# -p 8082:8080 端口映射:容器端口:镜像默认端口
# -v 将容器内的/usr/local/tomcat/webapps/下的数据挂载到宿主机/root/docker-v/tomcat/webapps/下
# -d 后台运行
# tomcat:版本号 镜像名:版本号(忽略的话默认为最新版本)

3.2.2 方式二:使用Dockerfile添加

3.3 数据卷使用案例

  • 在根目录下创建docker-v 作为宿主机目录

            mkdir docker-v

  • 在docker-v目录下创建容器需要挂载数据文件存放的目录,分别创建        

        mkdir mysql

        mkdir tomcat

        mkdir nginx

3.3.1 mysql案例

①mysql存放数据的目录为/var/lib/mysql/data

②在宿主机/root/docker-v/mysql/目录下创建data目录

        mkdir data

③创建端口为3307的,名字是:mysql-v,密码是123456的mysql容器,启动并在后台运行。

docker run --name mysql-v  -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /root/docker-v/mysql/data:/var/lib/mysql/ -d mysql:5.7

3.3.2 tomcat案例

①tomcat容器存放数据的目录为:/usr/local/tomcat/webapps

②在宿主机:/root/docker-v/tomcat/目录下创建webapps目录

mkdir webapps

③创建端口为:8082的tomcat容器

docker run --name tomcat-car -p 8082:8080 -v /root/docker-v/tomcat/webapps/:/usr/local/tomcat/webapps/ -d tomcat 

3.3.3 nginx案例

①容器内配置文件目录为  /etc/nginx/conf.d/default.conf 容器存放静态资源的目录/usr/local/res/

②复制default.conf文件到宿主机/root/docker-v/nginx/下

docker cp nginx1:/etc/nginx/conf.d/default.conf default.conf

③更改default.conf配置文件下的存放静态资源的目录为   /usr/local/res/;

vi default.conf

8-3.docker_第2张图片

④在宿主机下创建/root/docker-v/nginx/usr/local/res/目录存放静态资源

⑤ 创建名称为nginx-v3,端口号为86的nginx容器,分别将配置文件default.conf与静态资源目录res挂载。

docker run --name nginx-v3 -p 86:80 -v /root/docker-v/nginx/default.conf:/etc/nginx/conf.d/default.conf -v /usr/local/res/:/usr/local/res/ -d nginx

4.DockerFile

4.1 Dockerfile基础知识

4.1.1 Dockerfile是什么

  •  Dockerfile是用来构建Docker镜像的构建文件,由一系列参数和命令构成的脚本
  •  文本内容:包含了若干的命令行,并支持#作为注释行
  •  文本格式:基础镜像FROM,维护者MAINTAINER,操作指令ADD,容器启动后指令等共计4部分。  

4.1.2 DockerFile的三步构建步骤?

 ①编写Dockerfile文件,必须符合file的规范,文件名为:Dockerfile

②在Linux里面使用docker build 命令构建镜像

③执行 docker run命令,创建运行镜像对应的容器


 4.1.3 DockerFile的语法规则

1,每条保留字指令都必须为大写字母后面要跟随至少一个参数

2,指令从上到下顺序执行

3#表示注释

4,每条指令都会创建一个新的镜像层,并对镜像进行提交

4.1.4 Dockerfile的关键字

FROM  基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER  镜像维护者的姓名和邮箱地址

RUN  容器构建时需要运行的命令

EXPOSE 当前容器对外暴露的端口[只是提示作用,]

WORKDIR 指定在创建容器后,终端默认登陆进来的工作目录

ENV 用来在构建镜像过程中设置环境变量

ADD 将宿主机目录下的文件拷贝进镜像并且ADD命令会自动处理URL和解压tar包

COPY 类似ADD,拷贝文件和目录到镜像中 ,语法COPY src dest  COPY [''src","dest"]

VOLUME 容器数据卷,用于数据保存和持久化工作

CMD 指定一个容器启动时要运行的命令格式CMD['ls']   run -it cenos -lh

        shell:  CMD  <命令>

        exec  CMD ['可执行文件',"参数1","参数2"]

        DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

ENTEYPONT  指定一个容器启动时要运行的命令 ENTEYPORT ['ls']   run -it cenos -lh

            ENTRYPOINT的目地和CMD一样,都是在指定容器启动程序及参数

OBBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后触发父镜像的onbuild

4.2 制作Docker镜像

4.2.1制作镜像的相关材料

①项目的打包文件,war包或者jar包。

②镜像的构建文件:Dockerfile

③run.sh脚本文件,编写构造镜像的相关命令:docker build 

    注:可以不编写 .sh文件,直接在liunx中执行docker build命令来构建镜像。

4.2.2 具体步骤

war包格式:

①创建文件夹docker

②复制项目的war包到docker文件夹下

③编写Dockerfile文件:使用IDEA编写有提示

FROM tomcat:8       #镜像基于tomcat8
ENV WORKPATH /usr/local/tomcat/webapps  #设置环境变量
COPY ./car.war ${WORKPATH}   #复制当前文件夹下的car.war(项目的war包)到指定路径
WORKDIR ${WORKPATH}  #指定在创建容器后,终端默认登陆进来的工作目录
RUN unzip ./car.war -d ROOT #解压war包
RUN rm -f car.war       #删除war包
CMD ["catalina.sh","run"]  # 容器运行时,启动tomcat

④编写run.sh文件

cd ..&& docker build ./my-car -t my-car:1.0

当run.sh文件被执行时,执行以上命令,命令内容为:

        先切换到上一级目录下,然后执行构建命令,在当前目录下,构造名称为:my-car 版本为1.0的镜像。

⑤在liunx根目录下创建文件夹存放镜像

mkdir  my-images

  • 进入到 my-images目录下:

cd my-images/

  • 在 my-images目录下创建 my-car目录用于存放制作镜像的材料

mkdir my-car

  • 进入到my-car目录下:

cd my-car/

⑥将“war包、Dockerfile、run.sh”文件复制到Linux下的/root/my-images/my-car/中

⑦给run.sh文件授予权限

chmod 777 run.sh

⑧启动run.sh构造镜像

./run.sh

⑨运行镜像,创建端口为8088的容器

docker run --name mycar -p 8088:8080 -d mycar:1.0

jar包形式:

与war包形式步骤基本相同,Dokerfile文件内容不同

FROM openjdk:8  #基于openjdk8运行
ENV workdir /root/docker/jarapp
COPY ./test.jar ${workdir}/test.jar
WORKDIR ${workdir}
EXPOSE 8080
CMD ["java","-jar","test.jar"] #使用java -jar命令运行

5.docker的网络模式

   5.1 docker的四种网络模式

bridge模式:使用 –net =bridge  指定,默认设置;
host模式:使用 –net =host    指定;

none模式:使用 –net =none  指定;
container模式:使用 –net =container:NAMEorID  指定。

    5.2部署项目案例

8-3.docker_第3张图片

 具体步骤:

①先启动一台mysql容器,名称为 mysql-car ,端口为3308

docker run --name mysql-car -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

②将项目中的数据库连接地址,固定IP改为域名映射模式 ,将项目重新打包

118.178.105.2  ——》 mysql-serve    #当连接mysql-serve时,会连接到mysql-car

③将项目制作为自定义docker镜像 mycar:2.0,名称为mycar,版本为2.0

④启动三台mycar容器:名称分别为:car-1,car-2,car-3

docker run --name car-1 -p 8081:8080 --link mysql-car:mysql-server -d mycar:2.0

docker run --name car-2 -p 8081:8080 --link mysql-car:mysql-server -d mycar:2.0

docker run --name car-3 -p 8081:8080 --link mysql-car:mysql-server -d mycar:2.0

⑤启动一台nginx容器:

docker run --name nginx-car -p 81:80 --link car-1:car-1 --link car-2:car-2 --link car-3:car-3 -d nginx

⑥更改nginx的配置文件default.conf

cd docker-v/nginx/

vi default.conf

首行添加以下内容:

upstream www.car.com {

 server car-1:8080;

 server car-2:8080;

 server car-3:8080;

}

将local改为以下内容:

  location / {

   proxy_pass http://www.car.com;

        #root   /usr/local/res/;

        #index  index.html index.htm;

    }

⑦复制default.conf到容器nginx-car中

docker cp default.conf nginx-car:/etc/nginx/conf.d/default.conf

⑧重启nginx-car容器

docker restart nginx-car

你可能感兴趣的:(8-分布式,docker,机器学习)