docker

简介

  • 官网:docker.com
  • 在操作系统层面实现虚拟化,直接复用本地主机的操作系统。占用体积小、启动速度快。
  • 对进程进行隔离,将软件运行所需的所有资源打包到一个隔离的容器中。

跨机器通讯

三要素

镜像(image)

  • 狭义:一个只读的模板,用来创建 Docker 容器,一个镜像可以创建很多容器(类似于Java的类,一个类可以用来new多个对象,docker容器实例类似于java中new出来的实例对象)。
  • 广义:程序和配置打包成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是镜像文件。

容器(container)

  • 类似于一个虚拟化的运行环境,独立运行一个或一组应用,应用程序运行在容器里面。

仓库(repository)

  • 集中存放镜像文件的场所。
  • 最大的公开仓库是 Docker Hub(https://hub.docker.com/)。国内的公开仓库有阿里云 、网易云等。

安装

  • 如果安装过卸载旧版本。
  • 设置仓库。
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 更新yum软件包索引,以后yum安装就会快一些。
yum makecache fast
  • 安装docker引擎
yum -y install docker-ce docker-ce-cli containerd.io
  • 启动
systemctl start docker
  • 查看是否启动成功
docker version
docker run hello-world
ps -ef|grep docker
  • 卸载
    1.systemctl stop docker
    2.yum remove docker-ce docker-ce-cli containerd.io
    3.rm -rf /var/lib/docker
    4.rm -rf /var/lib/containerd

配置镜像加速器

  • 阿里云-弹性计算-容器镜像服务-镜像工具-镜像加速器-操作文档-CentOS。
    在这里插入图片描述

命令

启动、帮助类

  • 启动docker: systemctl start docker
  • 停止docker: systemctl stop docker
  • 重启docker: systemctl restart docker
  • 查看docker状态: systemctl status docker
  • 开机启动: systemctl enable docker
  • 查看docker概要信息: docker info
  • 查看docker总体帮助文档: docker --help
  • 查看docker命令帮助文档: docker 具体命令 --help

镜像命令

  • 列出镜像:docker images
  • 搜素镜像:docker search 某个XXX镜像名字
  • 下载镜像:docker pull 某个XXX镜像名字
  • 查看镜像/容器/数据卷所占的空间:docker system df
  • 删除镜像:docker rmi 某个XXX镜像名字/ID

容器命令

  • 新建+启动容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
    1.后台守护式启动:docker run -d redis:6.0.8
  • 列出所有正在运行的容器:docker ps [OPTIONS]
  • 退出容器:
    1.exit(退出后容器停止)。
    2.ctrl+p+q(退出后容器不停止)。
  • 启动已停止运行的容器:docker start 容器ID或者容器名。
  • 重启容器:docker restart 容器ID或者容器名。
  • 停止容器:docker stop 容器ID或者容器名。
  • 强制停止容器:docker kill 容器ID或容器名。
  • 删除已停止的容器:docker rm 容器ID。
  • 查看容器日志:docker logs 容器ID。
  • 查看看容器内运行的进程:docker top 容器ID。
  • 查看容器内部细节:docker inspect 容器ID。
  • 进入容器(并以命令行交互):docker exec -it 容器ID /bin/bash
    1.exec 和 attach 的区别:attach exit退出,会导致容器的停止。
  • 从容器中拷贝文件到主机:
    1.从容器内拷贝文件到主机上:docker cp 容器ID:容器内路径 目的主机路径。
    2.导出容器:docker export 容器ID > 文件名.tar
    3.导入容器:cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
  • commit:基于当前容器创建一个新的镜像。

镜像发布云端

发布到阿里云

私有库

  • Docker Registry

数据卷

概念

  • 宿主机的一个文件夹,可以存在于一个或多个容器中,容器中的数据可以持久化到宿主机的磁盘(挂载目录)中。

特点

  • 卷可在容器之间共享或重用数据。
  • 卷中的更改会实时同步到容器中, 可以实时生效。容器中的数据更改也会同步到卷中。
  • 卷中的更改不会包含在镜像的更新中
  • 卷的生命周期一直持续到没有容器使用它为止。

继承

  • –volumes-from

mysql安装

  • /etc/mysql/conf 下新建 my.cnf 文件。
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
  • 启动命令
docker run -p 3306:3306 --name mysql --privileged=true -v /etc/mysql/log:/var/log/mysql -v /etc/mysql/data:/var/lib/mysql -v /etc/mysql/conf:/etc/mysql/conf.d  -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7

解释:
–name 自定义名称
-d mysql:5.7 后台允许xxx镜像
privileged=true
在这里插入图片描述

redis安装

  • 新建 redis.conf 文件。
    在这里插入图片描述
  • 启动命令
docker run -p 6379:6379 --name redis --privileged=true -v /etc/redis/redis.conf:/etc/redis/redis.conf -v /etc/redis/data:/etc/redis/data -d redis:6.0.8 redis-server /etc/redis/redis.conf

解释:
/etc/redis/redis.conf 启动时去读取此目录下的文件

mysql主从安装

redis集群配置

DockerFile

简介

  • 用来构建Docker镜像的脚本文件,由一条条构建镜像所需的指令和参数构成。

常用命令

构建镜像

  • 构建时将DockerFile文件和jar包放在一个文件夹下。
 docker build -t 镜像名字:版本 .

模板

FROM java:8
# 作者
MAINTAINER yzx
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为docker_boot.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar docker_boot.jar
# 运行jar包
RUN bash -c 'touch /docker_boot.jar'
ENTRYPOINT ["java","-jar","/docker_boot.jar"]
#暴露6023端口作为微服务
EXPOSE 6023

虚悬镜像

  • 仓库名、标签都是的镜像,俗称dangling image
  • 虚悬镜像一般没有价值,可以删除。

docker网络

简介

  • 用于容器间的通信。
  • docker容器内部的ip是有可能会发生改变的。一个容器停止了它的ip可能会给到另外一个新启动容器。
  • 可以通过服务名直接通信。

常用命令

网络模式

  • Docker启动时默认会创建一个名为docker0的网桥Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
  • Docker网桥是每个容器的默认网关。

bridge

  • Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
  • docker run 的时候,没有指定network的话默认使用的就是bridge,使用的就是docker0。

host

none

container

自定义网络

  • 先新建自定义网络。
    在这里插入图片描述
  • 新建容器加入上一步新建的自定义网络。
    docker run -d -p 8081:8080 --network zzyy_network --name tomcat81 billygoo/tomcat8-jdk8
    docker run -d -p 8082:8080 --network zzyy_network --name tomcat82 billygoo/tomcat8-jdk8
  • 互相ping测试。

容器编排(docker-compose)

简介

  • Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。
  • 需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后只要一个命令,就能同时启动/关闭这些容器。

安装

  • 尽量用3以上版本。
  • docker-compose和docker的版本要匹配。
    在这里插入图片描述

卸载

使用

  • 编写docker-compose.yml文件,一般和jar包、DockerFile放在一个文件夹下,执行命令时要在docker-compose.yml所在的文件夹下。可以写多个docker-compose.yml分批编排,但是要在不同的文件夹下。
  • 项目里面的mysql、redis连接地址要写成编排的服务名。
  • 编排前执行检查配置命令(有问题才会有输出): dokcer-compose config -q (会输出找不到命令,不知道为啥)
  • 启动命令: docker-compose up -d

文件模板(文件格式不对是个坑)

  • 标准模板
version: '3.9'
services:
  nginx:
    container_name: "nginx"
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - /docker-compose/www:/usr/local/nginx/www
      - /docker-compose/nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      app_net:
        ipv4_address: 172.16.238.2
        ipv6_address: 2001:3984:3989::2
    depends_on:
      - php

  php:
    container_name: "php"
    image: php:7.4-fpm
    ports:
      - "9000:9000"
    volumes:
      - /docker-compose/www:/docker/www
    networks:
      app_net:
        ipv4_address: 172.16.238.3
        ipv6_address: 2001:3984:3989::3

  redis:
    container_name: "redis"
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - /docker-compose/redis/redis.conf:/etc/redis/redis.conf
      - /docker-compose/redis/data:/data
    environment:
      appendonly: true
    networks:
      app_net:
        ipv4_address: 172.16.238.4
        ipv6_address: 2001:3984:3989::4

  mysql:
    container_name: "mysql"
    image: mysql
    ports:
      - "3306:3306"
    volumes:
      - /docker-compose/mysql/conf:/etc/mysql/conf.d
      - /docker-compose/mysql/logs:/logs
      - /docker-compose/mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    networks:
      app_net:
        ipv4_address: 172.16.238.5
        ipv6_address: 2001:3984:3989::5

networks:
  app_net:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: 172.16.238.0/24
          gateway: 172.16.238.1
        - subnet: 2001:3984:3989::/64
          gateway: 2001:3984:3989::1
  • 自己用的
version: '3.9'
services:
  microService:
    container_name: "docker_boot"
    image: docker_boot:1.0
    ports:
      - "6023:6023"
    volumes:
      - /usr/local/docker/docker_boot/data:/data
    networks:
      - atguigu_net
    depends_on:
      - redis
      - mysql

  redis:
    image: redis:6.0.8
    ports:
      - "6379:6379"
    volumes:
      - /etc/redis/redis.conf:/etc/redis/redis.conf
      - /etc/redis/data:/etc/redis/data
    networks:
      - atguigu_net
    command: redis-server /etc/redis/redis.conf
        
  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - /etc/mysql/conf:/etc/mysql/conf.d
      - /etc/mysql/log:/var/log/mysql
      - /etc/mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    networks:
      - atguigu_net
      
networks:
  atguigu_net:
  • 带注释(模板格式不对)
# compose的版本
version: "3"

services:
  # 服务名 
  microService:
    image: docker_boot:1.0
    # 容器名,不指定会自动生成,名为  docker-compose.yml所在文件夹_服务名_编号
    container_name: docker_boot
    ports:
      - "6023:6023"
    volumes: 
      - /usr/local/docker/docker_boot/data:/data
    networks: 
      - atguigu_net
    # 此服务要依赖下面的redis、mysql先启动 
    depends_on: 
      - redis
      - mysql
 
  redis:
    image: redis:6.0.8
    ports:
      - "6379:6379"
    volumes:
      - /etc/redis/redis.conf:/etc/redis/redis.conf
      - /etc/redis/data:/etc/redis/data
    networks: 
      - atguigu_net
    command: redis-server /etc/redis/redis.conf
 
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'docker'
    ports:
       - "3306:3306"
    volumes:
       - /etc/mysql/data:/var/lib/mysql
       - /etc/mysql/conf:/etc/mysql/conf.d
       - /etc/mysql/init:/docker-entrypoint-initdb.d
    networks:
      - atguigu_net
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

# 创建名为atguigu_net的网络 
networks: 
   atguigu_net:

监控工具

Portainer(轻量级)

CAdvisor+InfluxDB+Granfana(重量级)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值