安装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镜像的构建文件,命令脚本.
构建步骤:
-
编写一个dockerfile文件
-
Docker build构建成为一个镜像
-
docker run 运行镜像
-
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
退出容器重新执行文章来源:https://www.toymoban.com/news/detail-769116.html
docker exec -it ip addr
文章来源地址https://www.toymoban.com/news/detail-769116.html
到了这里,关于大数据之Docker学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!