day02-Docker

一、docker的概述

1.docker来解决依赖兼容问题,采用了两个手段:打包和隔离

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包

  • 将每个应用放到一个隔离容器去运行,避免互相干扰

2.Docker如何解决开发、测试、生产环境有差异的问题?

Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

3.Docker是一个快速交付应用、运行应用的技术,具备下列优势:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统

  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰

  • 启动、移除都可以通过一行命令完成,方便快捷

 二、docker架构

镜像:

  • 将应用程序及其依赖、环境、配置打包在一起

容器:

  • 镜像运行起来就是容器,一个镜像可以运行多个容器

Docker结构:

  • 服务端:接收命令或远程请求,操作镜像或容器

  • 客户端:发送命令或者请求到Docker服务端

DockerHub:

  • 一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry

 三、docker基本概念

docker run命令的常见参数有哪些?

  • --name:指定容器名称

  • -p:指定端口映射

  • -d:让容器后台运行

查看容器日志的命令:

  • docker logs

  • 添加 -f 参数可以持续查看日志

查看容器状态:

  • docker ps

  • docker ps -a 查看所有容器,包括已经停止的

  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程

  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建

  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine


 四、镜像基本命令

  • ① 新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile

  • ② 拷贝课前资料提供的docker-demo.jar到这个目录中

  • ③ 编写Dockerfile文件:

    • a )基于java:8-alpine作为基础镜像

    • b )将app.jar拷贝到镜像中

    • c )暴露端口

    • d )编写入口ENTRYPOINT

      内容如下:

      FROM java:8-alpine
      COPY ./app.jar /tmp/app.jar
      EXPOSE 8090
      ENTRYPOINT java -jar /tmp/app.jar
  • ④ 使用docker build命令构建镜像

docker build -t javaweb:1.0 .

  • ⑤ 使用docker run创建容器并运行

docker run --name web -p 8090:8090 -d javaweb:1.0


 五、容器基本命令

docker run的命令中通过 -v 参数挂载文件或目录到容器中:

  • -v volume名称:容器内目录

  • -v 宿主机文件:容器内文

  • -v 宿主机目录:容器内目录

数据卷挂载与目录直接挂载的

  • 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找

  • 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看


 六、目录挂载方式

案例-给nginx挂载数据卷

需求:创建一个nginx容器,修改容器内的html目录内的index.html内容

分析:上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置/usr/share/nginx/html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。

/etc/nginx/conf.d : 此目录下存放nginx的配置文件(default.conf--->nginx.conf)

提示:运行容器时使用 -v 参数挂载数据卷

步骤:

① 创建容器并挂载数据卷到容器内的HTML目录

docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

② 进入html数据卷所在位置,并修改HTML内容

# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html

案例-给MySQL挂载本地目录

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:

  • 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录

  • 直接挂载模式:宿主机目录 ---> 容器内目录

语法

目录挂载与数据卷挂载的语法是类似的:

  • -v [宿主机目录]:[容器内目录]

  • -v [宿主机文件]:[容器内文件]

需求:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

实现思路如下:

1)下载docker仓库中的mysql镜像,版本为5.7

2)创建目录/tmp/mysql/data

3)创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf

4)去DockerHub查阅资料,创建并运行MySQL容器,要求:

① 挂载/tmp/mysql/data到mysql容器内数据存储目录

② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件

③ 设置MySQL密码

拉取镜像:
    docker pull mysql:5.6
进入tmp目录,创建/tmp/mysql/data和/tmp/mysql/conf
  mkdir -p /tmp/mysql/data   // 存放生成的数据信息
  mkdir -p /tmp/mysql/conf   // 存放共享的配置文件信息
将课程资料中的hmy.cnf配置文件拷贝到/tmp/mysql/conf
        
        
        
创建mysql容器,并绑定对应的文件夹和文件:
  docker run \
  --name mysql \
  -e MYSQL_ROOT_PASSWORD=root \
  -p 3306:3306 \
  -d \
  -v /tmp/mysql/data:/var/lib/mysql \
  -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/my.cnf \
  --privileged \
  mysql:5.7
---------------------
      
      
      
      
      
  docker run \   // 创建容器
  --name mysql \ // 给容器起名
  -e MYSQL_ROOT_PASSWORD=root \ // 设置root账户密码
  -p 3306:3306 \ // 端口映射
  -d \ // 后台运行
  -v /tmp/mysql/data:/var/lib/mysql \ // 绑定宿主机上的文件夹
  -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/my.cnf \ // 绑定宿主机上的文件
  --privileged \ // 设置超级管理员远程访问权限
  mysql:5.7 // 镜像名称

你可能感兴趣的:(项目二前置课,docker,运维,容器)