Docker 超详细版(基础+进阶)(二)

Docker 超详细版(基础+进阶)(一)

5. 部署应用

5.1 MySQL 部署

  • 拉取MySQL镜像

    docker pull mysql:5.7
    

    在这里插入图片描述

  • 创建容器

    docker run -id --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
    

    在这里插入图片描述

  • 登录容器

    docker exec -it mysql /bin/bash
    
  • 登录容器MySQL数据库

    mysql -uroot -proot --default-character-set=utf8
    

    在这里插入图片描述

  • 我的虚拟机的IP地址是 192.168.10.129,我们远程访问MySQL,可以看到访问成功

    mysql -uroot -proot -h192.168.10.129 -P3306
    

    在这里插入图片描述

注意:这里访问的是宿主机的IP和端口,宿主机映射的端口是哪个就访问哪个端口,比如容器的3306端口在宿主机的映射是33306,那么访问容器的MySQL就是宿主机IP:33306

5.2 Nginx 部署

  • 拉取nginx镜像
    docker pull nginx
    
    在这里插入图片描述
  • 创建守护方式容器
    docker run -di --name=nginx -p 80:80 nginx
    
    在这里插入图片描述
  • 通过浏览器访问一下:192.168.10.129:80
    在这里插入图片描述
  • 修改nginx配置的话一般通过目录挂载的形式,这里先通过cp命令将容器中nginx的配置目录拷贝到宿主机,然后再将宿主机我们之前创建的mydata目录挂载到容器
    docker cp nginx:/etc/nginx /usr/local/mydata/nginx/
    
    在这里插入图片描述
  • 由于挂载是创建容器时进行的,我这里将当前容器删除再重新创建一个(当前也有其他的方法,我们这里只是练习,简单一点就好)
    docker stop nginx
    docker rm nginx
    docker run -id --name=nginx -p 80:80 -v /usr/local/mydata/conf/:/etc/nginx nginx
    
    在这里插入图片描述

5.3 Redis 部署

  • 拉取redis镜像
    docker pull redis
    
    在这里插入图片描述
  • 创建redis镜像
    docker run -id --name=redis -p 6379:6379 redis
    

5.4 RabbitMQ 部署

  • 拉入Rabbitmq镜像
    docker pull rabbitmq:3.7.12
    
    在这里插入图片描述
  • 创建容器
    docker run -id --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:3.7.12
    
    在这里插入图片描述
  • 登录rabbitmq容器,并安装ui插件
    docker exec -it rabbitmq /bin/bash
    rabbitmq-plugins enable rabbitmq_management
    
  • 浏览器访问一下
    在这里插入图片描述
    在这里插入图片描述

5.5 Elasticsearch 部署

在Linux上安装7.0版本后,有许多注意的地方,比如

  • 不能用root用户启动
  • jdk必须是11版本
  • 虚拟内存大小等相应的限制
  • 拉取 Elasticsearch 镜像

    docker pull elasticsearch:7.5.0
    

    在这里插入图片描述

  • 修改虚拟内存区域大小,否则会因为过小而无法启动

    sysctl -w vm.max_map_count=262144
    
  • 创建容器

    docker run -id --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "cluster.name=elasticsearch" -v /usr/local/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.5.0
    
  • 安装中文分词器

    docker exec -it elasticsearch
    # 此命令需要在容器中运行
    elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip
    

    在这里插入图片描述

  • 重启容器

    docker restart elasticsearch
    

    在这里插入图片描述

  • 通过浏览器访问一下
    在这里插入图片描述

5.6 Zookeeper 部署

  • 拉取 Zookeeper 镜像
    docker pull zookeeper:3.4.13
    
    在这里插入图片描述
  • 创建容器
    docker run -id --name=zookeeper -p 2181:2181 zookeeper:3.4.13
    
    在这里插入图片描述

6. 迁移与备份

6.1 容器保存为镜像

docker commit 容器名称/id 新镜像名称
  • 将前面创建的redis保存为一个新的镜像
    docker commit redis myredis
    
    在这里插入图片描述
  • 基于新生成的镜像创建一个容器myredis
    docker run -id --name=myredis myredis
    
    在这里插入图片描述

6.2 镜像备份

docker save -o 镜像文件 镜像名称
  • myredis镜像备份成一个文件
    docker save -o myredis.tar myredis
    
    在这里插入图片描述
  • 将当前宿主机的myredis镜像删除
    在这里插入图片描述

6.3 镜像恢复与迁移

# -i:输入的文件
docker load -i 镜像文件
  • 将上面生成的镜像文件myredis.tar进行恢复
    docker load -i myredis.tar
    
    在这里插入图片描述
  • 我们可以继续创建一个新的myredis容器
    docker run -id --name=myredis myredis
    

7. Dockerfile 常用命令

7.1 什么是 Dockerfile

  • Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用与基础镜像(操作级别的镜像,比如:centos镜像)并最终创建一个新的镜像
    • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
    • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作
    • 对于运维人员:在部署时,可以实现应用的无缝移植

7.2 常用命令

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程(基础镜像要存在,若不存在,会优先pull基础镜像)
MAINTAINER user_name 声明镜像的创建者(非必须)
ENV key value 设置环境变量(可以写多条)
RUN command 是 Dockerfile 的核心部分(可以写多条)
Add source_dir / file dest_dir / file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir / file dest_dir / file 和 ADD 相似,但是如果有压缩文件不进行解压
WORKDIR path_dir 设置工作目录

7.3 Dockerfile 构建 jdk1.8 镜像

JDK1.8下载路径:http://ruochen.net.cn:8080/JDK/jdk1.8

  • 创建目录
    mkdir -p /usr/local/dockerjdk8
    
  • 将jdk1.8 tar包放入刚新建的文件夹中
    mv jdk-8u202-linux-x64.tar.gz /usr/local/dockerjdk8/
    
    在这里插入图片描述
  • 编写Dockerfile文件
    vim Dockerfile
    
    FROM centos:7
    MAINTAINER ruochen
    WORKDIR /usr
    RUN mkdir /usr/local/java
    ADD jdk-8u202-linux-x64.tar.gz /usr/local/java
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
    ENV PATH $JAVA_HOME/bin:$PATH
    
    在这里插入图片描述
  • 执行 Dockerfile构建镜像
    # .是指当前目录(Dockerfile所在目录)
    # docker build -t='镜像名称' .
    docker build -t='jdk1.8' .
    
    在这里插入图片描述
    在这里插入图片描述

8. Docker 私有仓库搭建与配置

8.1 私有仓库搭建与配置

  • 拉取私有仓库镜像

    docker pull registry
    

    在这里插入图片描述

  • 启动私有仓库容器

    docker run -id --name=registry -p 5000:5000 registry
    

    在这里插入图片描述

  • 打开浏览器访问 http://192.168.10.129:5000/v2/_catalog看到{"repositories":[]}表示私有仓库搭建成功并且内容为空
    在这里插入图片描述

  • 修改 daemon.json

    vim /etc/docker/daemon.json
    
    {"insecure-registries":["192.168.10.129:5000"]}
    

    在这里插入图片描述

    此步骤用于让 docker 信任私有仓库地址

  • 重启 docker 服务

    systemctl restart docker
    
  • 重新运行registry容器

    docker start registry
    

    在这里插入图片描述

8.2 Docker 私有仓库镜像上传

  • 将前面创建的jdk1.8镜像上传到私有仓库

  • 标记此镜像为私有仓库的镜像

    docker tag jdk1.8 192.168.10.129:5000/jdk1.8
    

    在这里插入图片描述

  • 上传到私有仓库

    docker push 192.168.10.129:5000/jdk1.8
    

    在这里插入图片描述

  • 我们再回到网址刷新一下,可以看到多了一个jdk1.8
    在这里插入图片描述

(完)