Docker

21

1.docker的作用

  • 环境一致性问题
  • 实现快速部署
  • 降低学习成本
  • 避免单点故障

2.docker的安装等

  • 安装docker的依赖环境
    • yum -y install yum-utils device-mapper-persistent-data lvm2
  • 修改docker的镜像源
  • 开启自动启动
    • yum makacache fast yum -y install docker-ce
  • 启动Docker服务,并设置为开机自动启动
    • systemctl start docker
    • systemctl enable docker

3.docker的核心思想

  • 镜像
    • 讲具体的依赖与环境封装为一个镜像
  • 容器
    • 运行起来的镜像
  • 仓库
    • 本地仓库
    • 国内镜像站
    • 中央仓库

[wppay]

4.镜像操作

  • 搜索镜像 docker search 镜像名:tag
  • 拉取镜像 docker pull 镜像名:tag
  • 查看全部镜像 docker images
  • 删除镜像 docker rmi 镜像标识
  • 将容器导出为镜像文件 docker save -o 本地路径/文件名称 镜像标识
  • 将镜像文件导进docker docker load -i 镜像文件

Docker默认存放内容的位置在/var/lib/docker

5.容器操作

  • 运行容器
    • docker run -d -p 宿主机:容器端口 --name 容器名称 镜像标识
    • -d:后台运行容器-p:端口映射--name:容器的唯一标识(容器ID自动生成)-e:添加环境变量-v:映射数据卷
  • 查看容器的日志
    • docker logs -f 容器标识
    • -f:是否自动滚出输出
  • 查看运行中/全部的容器
    • docker ps [-aq]
    • -a:显示全部的容器-q:查看容器的ID
  • 停止&删除容器
    • docker rm 容器标识
    • docker stop 容器标识
    • 停止&删除全部容器docker stop/rm $(docker ps -aq)
  • 进入容器的内部
    • docker exec -it 容器标识 bash/sh
    • 退出容器exit
  • 常见的容器命令
    • docker start/stop/restart/rm 容器标识
    • 后面可以跟随多个
  • 复制内容到容器内部
    • docker cp 文件/目录 容器标识:容器路径

6.数据卷操作

数据卷(volume):将宿主机的一个目录/文件映射到容器中的一个目录/文件,双向同步。

数据卷常用命令:

  • 创建docker volume create 数据卷名称
  • 查看详细信息 docker volume inspect 数据卷名称
  • 查看全部 docker volume ls
  • 删除 docker volume rm 数据卷名称

Mysql映射数据卷的例子:

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -v /usr/local/mysql_data:/var/lib/mysql ba --lower_case_table_names

宿主机路径设置说明:

  • 相对路径
  • 绝对路径

7.自制镜像

依据现有的基础镜像自制镜像。

通过编写Dockerfile文件去制作自定义镜像。

基础命令:

  • FROM 基础镜像标识
  • COPY 宿主机内容 容器位置
  • WORKDIR 工作目录
  • RUN 执行命令
  • CMD 当前镜像启动时,执行的命令,CMD可以写多个,但是只有最后一个生效

案例:

FROM daocloud.io/library/tomcat:8.5.57-jdk8
WORKDIR /usr/local/tomcat/webapps
RUN mkdir ROOT
COPY air-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT/
WORKDIR /usr/local/tomcat/webapps/ROOT
RUN jar -xvf air-1.0-SNAPSHOT.war

运行命令创建镜像docker build -t 自定义镜像名 Dockerfile所在目录

8.容器编排工具

所解决的问题:

  • 简化容器的启动,使用配置文件维护
  • 批量管理多个容器

官方提供的工具:docker compose

  • 通过编写YML文件进行管理
  • 默认docker里面没有docker-compose命令需要下载包导入到docker里面
    • 将文件扔到Linux
    • 通过chmod命令给文件设置为可执行文件:chmod 777 docker-compose-Linux-x86_64
    • 修改以下文件名称,方便后期操作:mv docker-compose-Linux-x86_64 docker-compose
    • 文件复制到PATH路径:mv docker-compose /usr/bin
      • 可使用echo $PATH查看

关于YML文件的简单说明:键值对的方式编写,与properties文件可以互相转换,value后面追加一个空格。

spring:
  datasource:
    url: jdbc

docker-compose常用命令(在yml文件同级目录下运行):

  • 启动 docker-compose up -d
  • 关闭并且删除容器 docker-compose down
  • 查看日志 docker-compose logs -f

docker-compose可对全部容器的管理,但运行起来的容器可用docker对容器的命令进行管理。

version: '3.1'
services:
  tomcat:                       # 服务名称
    image: tomcat_air:v1.0      # 镜像标识
    container_name: tomcat_air   # 容器名称
    ports:                  # 端口号映射,可以写多个
      - 8080:8080
  mysql:
    image: ba7
    container_name: mysql
    ports: 
      - 3306:3306
    environment:               # 环境
      - MYSQL_ROOT_PASSWORD=root
    command:
      --lower_case_table_names=1    # 忽略表名大小写
    volumes:                  # 数据卷
      - ./mysql-data/:/var/lib/mysql/

9.私服的使用

  • 配置下载镜像的私服地址 vi /etc/docker/daemon.json
{
 "registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"],
 "insecure-registries": ["局域网ip:5000"]
}
  • 重启docker systemctl restart docker
  • 依据私服镜像名称与版本拉取镜像

[/wppay]