0


大数据之Docker学习笔记

安装Docker

1.先卸载旧版

 yum remove docker \
     docker-client \
     docker-client-latest \
     docker-common \
     docker-latest \
     docker-latest-logrotate \
     docker-logrotate \
     docker-engine

2.配置Docker的yum库

首先要安装一个yum工具

 yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

最后,执行命令,安装Docker

 yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

配置开机自启和启动Docker

 # 设置开机自启 
 systemctl enable docker
 # 启动Docker 
 systemctl start docker

命名别名

Docker的有些命令特别复杂,我们可以给它设置别名简化输入,就不用每次都输入那么多了.

1.进入 .bashrc 中修改配置( .bashrc 是 root 下的隐藏文件)

 vim ~/.bashrc

2.source一下,让这个文件生效.

 source ~/.bashrc

常用命令

新建容器并启动

注意: docker,容器使用后台运行,就必须有一个前台进程,docker发现没有应用,就会自动停止

 docker run [可选参数] image
 ​
 # 参数说明
 --name="Name"       容器名字
 -d                  后台方式运行
 -it                 使用交互方式运行,进入容器查看内容
 -p                  指定容器的端口 
     -p  ip:主机端口:容器端口
     -p  主机端口:容器端口(常用)
     -p  容器端口
 -P                  随机指定端口
查看容器中的进程信息
 docker top 容器id

查看镜像的元数据
 docker inspect 容器id

进入当前正在运行的容器

方法1:

进入容器后开启一个新的终端,可以在里面操作(常用)

 docker exec -it 容器id /bin/bash

方法2:

进入容器正在执行的终端,不会启动新的进程.

 docker attach 容器id

从容器内拷贝文件到主机上
 docker cp 容器id:/容器中的文件路径 /主机的路径

容器数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中使用卷。

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

使用数据卷

直接使用命令来挂载 -v,这样之后主机的这个目录跟容器内的这个目录是绑定的,文件不管是容器内的还是主机上的进行修改后,对应的容器或者是主机目录的目录也会改变.

 docker run -it -v 主机目录:容器内目录
查看容器对应元数据

可以在Mounts节点查看建立的数据卷信息。

 docker inspect 容器id

安装MySQL

即使最后我们将docker rm mysql,删除了mysql的这个images,本地绑定的数据也不会丢失.

1.获取镜像

 docker pull mysql:5.7

2.运行容器进行挂载

安装启动mysql,需要配置密码.启动

-d 后台运行 -p 端口映射 -v 卷挂载 –name 容器名字

 [root@hadoop102 ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

具名和匿名挂载

匿名挂载

-v 容器内路径

 [root@hadoop102 data]# docker run -d -P --name nginx02 -v /etc/nginx nginx
查看本地所有的镜像
 [root@hadoop102 data]# docker volume ls

这里查看到一长串的就是匿名挂载,因为我们在-v的时候只写了容器内的路径,没有写容器外的路径.

具名挂载

通过-v, 卷名:容器内路径,大多数情况下使用具名挂载.

所有没有指定目录的情况下都是在/var/lib/docker/volume/xxx/_data目录下

 [root@hadoop102 data]# docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx
如何确定是具名挂载还是匿名挂载,还是指定路径挂载
 -v  容器内路径               # 匿名挂载
 -v  卷名:容器内路径           # 具名挂载
 -v  /宿主机路径::容器内路径    # 指定路径挂载

Dockerfile

Dockerfile就是构建docker镜像的构建文件,命令脚本.

1.创建一个dockerfile文件

名字可以随机,建议Dockerfile

这个挂载了两个目录.这里的每一个命令就是镜像的一层.

文件中的内容:

构建docker镜像
 docker build -f /home/docker-test-volume/doc

数据卷容器

容器数据共享

docker02是继承docker01的数据的,docker01创建的内容会同步到docker02上.

—volumes-from相当于Java中的继承,继承了docker01,只要通过这个就可以实现容器间的数据共享.

容器之间配置信息的传递,容器卷容器的生命周期一直持续到没有容器使用就结束了.

但是如果持久化本地,本地的数据是不会删除的.

 [root@hadoop102 ~]# docker run -it --name docker01 hcq/centos:1.0
 [root@hadoop102 ~]# docker run -it --name docker02 --volumes-from docker01 hcq/centos:1.0

DockerFile

Dockerfile就是构建docker镜像的构建文件,命令脚本.

构建步骤:
  1. 编写一个dockerfile文件
  2. Docker build构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub,阿里云镜像仓库)
Dockerfile的指令
 FROM            # 基础镜像,一切都是从这里开始
 MAINTAINER      # 镜像是谁写的,姓名+邮箱
 RUN             # 镜像构建的时候需要运行的指令
 ADD             # 步骤:tomcat镜像,这个tomcat压缩包,添加内容
 WORKDIR         # 镜像的工作目录
 VOLUME          # 挂载的目录
 EXPOSE          # 保留端口配置
 CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
 ENTRYPOINT      # 指定这个容器启动的时候要运行的命令,可以追加命令
 ONBUUILD        # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD 的指令,触发指令
 COPY            # 类似ADD,将我们文件拷贝到镜像中
 ENV             # 构建的时候设置环境变量
创建一个自己的centos

1.编写Dockerfile文件

2.通过这个文件构建镜像

命令 docker build -f dockerfile文件路径 -t 镜像名:[tag]

CMD 和 ENTRYPOINT 的区别

docker run后面的参数会将CMD指定的参数进行覆盖。

ENTRYPOINT与CMD的区别是不可以被docker run 后的参数覆盖,会把docker run后面的参数传递给ENTRYPOINT指定的参数。

 CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
 ENTRYPOINT      # 指定这个容器启动的时候要运行的命令,可以追加命令

发布自己的镜像

1.在服务器上登录

 [root@hadoop102 hcq]# docker login -u sooso

2.登录完毕后就可以提交镜像了docker push

注意:这里需要先将这里的文件使用tag打一个标签,然后再使用push推送,否则会出现权限不够的情况.

遇到的问题

CentOS 执行yum命令报错【错误:为仓库 ‘appstream‘ 下载元数据失败: ...】

CentOS 执行yum命令报错【错误:为仓库 ‘appstream‘ 下载元数据失败: ...】-CSDN博客

原因: 是因为centos版本是centos8,所以yum在线安装这些的时候需要配置yum源.

解决方法:

将源文件FROM 后面的基础centos系统的标签tag加上7

 FROM centos:7

Docker网络

清空环境

删除所有容器和镜像

 [root@hadoop102 ~]# docker rm -f $(docker ps -aq)
 [root@hadoop102 ~]# docker rmi -f $(docker images -aq)

原理

我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡 docker0桥接模式,使用的技术是evth-pair技术.每次启动一个docker容器都会就会多一对网卡.

- -link

这里无法识别这里的tomcat01或者是服务名不认识.但是已经开始不建议使用–link了而是使用自定义网络.

这里使用–link进行绑定tomcat02的网络

这里的原理是因为在/etc/hosts中tomcat03后面绑定转发的是tomcat02

自定义网络

查看所有的docker网络
 [root@hadoop102 ~]# docker network ls
创建一个自定义网络

--driver bridge 桥接网络

--subnet 192.168.0.0/16 子网地址

--gateway 192.168.0.1 网关地址

 [root@hadoop102 ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

connect网络连通

让mynet网络连接上tomcat01,联通之后就是将tomcat01网络放在mynet网络下.

 [root@hadoop102 ~]# docker network connect mynet tomcat01

使用[root@hadoop102 ~]# docker network inspect mynet 命令查看mynet网络发现下面多了一个tomcat01.

遇到的问题

OCI runtime exec failed: exec failed: unable to start container process: exec: "ip": executable file not found in $PATH: unknown

先进入容器内

 [root@hadoop102 ~]# docker exec -it tomcat01 /bin/bash

更新apt并安装iproute2

 root@97ac2452db22:/usr/local/tomcat# apt update && apt install -y iproute2

退出容器重新执行

 docker exec -it ip addr

标签: 大数据 docker 学习

本文转载自: https://blog.csdn.net/Oz_Mood/article/details/134963723
版权归原作者 Oz_Mood 所有, 如有侵权,请联系我们删除。

“大数据之Docker学习笔记”的评论:

还没有评论