在docker中集群redis
Docker
官网:https://www.docker.com/
官网文档:https://docs.docker.com/
DevOps(开发运维)
docker:打包镜像发布测试,一键运行
- image(镜像)
- 相当于一个模板,一个镜像可以创建多个容器
- container(容器)
- 独立运行一个或一组应用,可以理解为一个min简易的linux系统
- repository(仓库)
- 存储东西的(公有、私有,Docker Hub-》默认国外的—》配置镜像加速–阿里云)
安装Docker
环境查看
#系统内核查看
[root@node2 ~]# uname -r
4.18.0-193.6.3.el8_2.x86_64
#系统版本
[root@node2 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
安装
官方文档https://docs.docker.com/engine/install/centos/
卸载旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
需要的安装包
yum install -y yum-utils
设置镜像仓库
# 默认配置的是国外镜像,简易不执行
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#更换为阿里云镜像
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件索引
yum makecache fast
安装docker docker-ce社区 ee企业版
# 默认下载最新 也可以指定版本下载 官网
yum install docker-ce docker-ce-cli containerd.io
开始启动docker
# 启动
systemctl start docker
#查看Docker的版本
docker -v
# 测试hello-world--会检测是否下载了image-->如果没有自动下载
docker run hello-world
#设置docker开机自启动
systemctl enable docker
#查看docker镜像
docker images
卸载docker
卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
删除资源
rm -rf /var/lib/docker
#/var/lib/docker--->DOCKER的默认工作路径
设置镜像加速器 阿里云加速器
登录阿里云 =>控制台=>产品=>容器镜像服务=>镜像加速器=>
=>执行此命令
1、创建目录
sudo mkdir -p /etc/docker
2、配置镜像加速地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fc3ku5nq.mirror.aliyuncs.com"]
}
EOF
3、重启docker后台线程
sudo systemctl daemon-reload
4、重启docker系统
sudo systemctl restart docker
Docker 底层原理
Docker常用命令
帮助命令
# 查看docker版本
docker -v
#显示docker 的版本信息
docker version
#查看详细信息,包括镜像以及容器的数量
docker info
#帮助命令
docker --help
版主文档地址:https://docs.docker.com/reference/
镜像命令
查看镜像 docker images
-a, --all 显示所有镜像
-q, --quiet 只显示id
下载镜像docker pull 镜像名:tag
#下载mysql-->默认下载最新
mysql pull mysql
#指定版本下载 --所下版本一定在官网中找得到
mysql pull mysql:5.7
删除镜像 docker rmi id/docker rmi -f id
docker rmi -f id #删除指定的id镜像
docker rmi -f id1 id2 id3 #删除多个指定id
docker rmi -f $(docker images -aq) #删除全部的容器
容器命令
下载一个centos镜像
docker pull centos
新建容器并启动
命令参数
docker run [] image
#参数说明
--name="name" 容器名字 mysql1 mysql2 区分容器
-d 后代方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 常用
-p 容器端口
容器端口
-P 随机指点端口
测试,启动并进入容器
[root@node2 ~]# docker run -it centos /bin/bash
[root@98242d0391eb /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@98242d0391eb /]# exit #停止并退出容器
exit
列出所有容器
#docker ps 列出当前运行的容器
-a #当前运行的容器+历史运行过容器
-n=? #最近创建容器
-q #只显示容器id
退出容器
exit #停止并退出容器
Ctrl+P+Q #快捷键 容器不停止退出
删除容器
docker rm 容器id #正在运行的容器删除不了
docker rm -f 容id #强制容器删除
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器
启动停止容器
docker start 容器id
docker restart 容器id
docker stop 容器id
docker skill 容器id #强制停止当前容器
其他命令
查看日志
docker logs -tf --tail 10 容器id
-tf #显示日志
--tail num #显示多少条日志
查看容器中进程信息ps
docker top 容器id
[root@node2 ~]# docker top c50239f0d677
UID PID PPID C STIME TTY TIME
systemd+ 1791 1737 0 2020 ? 00:44:07
root 529687 1737 0 2020 ? 00:00:00
查看元数据
#可以得到 容器具体id 创建时间 运行状态等..
docker inspect
#查看最新redis镜像的元数据
docker image inspect redis:latest
进入当前运行容器
#方式一
docker exec -it 容器id /bin/bash
#方式二
docker attach 容器id
#docker exec 进入容器后开启一个新的终端,可以在里面操作-->常用
#docker attach 进入容器正在执行的终端.不会启动新的进程
容器文件copy到主机
docker cp 容器id:容器内目录 主机目录
#运行centos镜像
[root@node2 ~]# docker run -it centos /bin/bash
#进去容器后快捷键Ctrl+P+Q 运行并退出
[root@6eb13e0e16e2 /]#
[root@node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
6eb13e0e16e2 centos "/bin/bash" 36 seconds ago Up 34 seconds
#进去容器
[root@node2 ~]# docker attach 6eb13e0e16e2
[root@6eb13e0e16e2 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@6eb13e0e16e2 /]# cd home
#在home目录下创建test.java文件
[root@6eb13e0e16e2 home]# touch test.java
[root@6eb13e0e16e2 home]# ls
test.java
[root@6eb13e0e16e2 home]# exit
#容器文件copy到主机
[root@node2 ~]# docker cp 6eb13e0e16e2:/home/test.java /home
[root@node2 ~]# cd /home
[root@node2 home]# ls
kk test test1 test.java
docker 安装nginx
https://hub.docker.com/
#1.搜索镜像-->建议去官网上搜对应版本
#2.下载nginx镜像 docker pull nginx
#3.运行测试镜像
-d #后台运行
--name #给容器命名
-p #端口映射 暴露端口(主机端口:容器端口)
[root@node2 home]# docker run -d --name nginx01 -p 9990:80 nginx
7ebba8dbde47f8503dd65f5c92df9dcb320927de9aecea1ee4147142431f0d81
[root@node2 home]# curl localhost:9990
#进去容器
[root@node2 home]# docker exec -it nginx01 /bin/bash
root@7ebba8dbde47:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@7ebba8dbde47:/# cd /etc/nginx
root@7ebba8dbde47:/etc/nginx# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
安装部署 es+kibana
# --net somenetwork 网络配置
#es是十分消耗内存的
#下载并启动es
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#检测是否成功
[root@node2 home]# curl localhost:9200
#查看docker所有容器运行情况,也可以在后面加容器id 查看具体的-->包括cup、内存、IO啊。。。
docker stats
#-e 修改环境配置,默认内存消耗太大,自己手动根据需求设置
-e ES_JAVA_OPTS="Xms64m -Xmx512m"
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
可视化 portainer
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
commit镜像
容器数据卷
容器的持久化和用不操作 ! 容器间也是可以数据共享的
数据是双向绑定的 主机和容器内数据同步
使用数据卷
方式一
# -v 挂载
docker run -it -v /home/test:/home centos /bin/bash
#另外开一个tab在主机里
docker inspect 容器id
安装mysql
#下载镜像
docker pull mysql:5.7
#启动运行
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
#用客户端连接测试
具名和匿名挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
拓展
# ro readonly #只读
# rw readwrite #可读可写
#一旦设置全向,挂载的内容就限定了 一下是一个具名挂载
docker run -d -P --name nginx -v hello-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx -v hello-nginx:/etc/nginx:rw nginx
# 看到ro 说明只能通过宿主机来操作,容器内无法操作
DockerFile
就是构建docker镜像的构建文件
方式二实现数据卷
#在/home/docker-test-colume目录下创建一个dockerfile文件 名字随机
vim dockerfile1
#文件内容 指令(大写) 参数
FROM centos
VOLUME ["vo1","vo2"] #匿名挂载
CMD echo "----end----"
CMD /bin/bash
#构建 build
[root@node2 docker-test-colume]# docker build -f dockerfile1 -t mycentos:1.0 .
#查看生成的镜像
docker images
#运行启动
docker run -it mycentos:1.0 /bin/bash
实现多容器间数据共享
--volumes-from
#创建容器file1
docker run -it --name file1 mycentos:1.0 /bin/bash
# 创建file2 并且同步file1
docker run -it --name file2 --volumes-from file1 mycentos:1.0
#file1与file2实现数据同步共享
假设还要file3一样同步file1
这时候删除file1 file2和file3中的数据依然存在
mysql实现数据共享
DockerFile
构建步骤
1.创建dockerfile文件
2.docker build 构建
3.docker run 运行
4.docker push 发布镜像(dockerhub 阿里云镜像仓库)
构建过程
1.指令大写字符
2.执行由上到下
3.#表示注释
4.每个指令都会创建一个新的镜像层 ,并提交
指令
FROM #基础镜像 一切从这里开始构建
MAINTAINER #谁写的 姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #添加内容
WORKDIR #镜像的工作目录
VOLUM #挂载目录
EXPOSE #暴露端口配置 -p
CMD #指定这个容器启动的时候需要运行的命令 至最后一个会生效,可悲替换
ENTRYPOINT #指定这个容器启动的时候需要运行的命令 可以追加命令
ONBUILD #当构建一个呗基础dockerfile 这个时候就会运行 此命令 触发指令
COPY # 类似ADD 拷贝到镜像中
ENV #构建的时候设置环境变量
测试
#编写
[root@node2 home]# ls
docker-test-colume kk test test1 test.java
[root@node2 home]# mkdir dockerfile-test
[root@node2 home]# cd dockerfile-test/
[root@node2 dockerfile-test]# vim dockerfile
FROM centos
MAINTAINER hello<123@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
[root@node2 dockerfile-test]# cat dockerfile
#构建
[root@node2 dockerfile-test]# docker build -f dockerfile -t my01:01 .
#查看镜像
docker images
#测试运行
docker run -it my01 /bin/bash
#查看别人的镜像怎么做的
docker history 容器id
ENTRYPOINT和CMD区别
ENTRYPOINT #指定这个容器启动的时候需要运行的命令 可以追加命令
CMD #指定这个容器启动的时候需要运行的命令 至最后一个会生效,可悲替换
发布镜像到DockerHub
在https://hub.docker.com/注册账号
在主机上进行登录操作
发布到dockerhub上
[root@node2 ~]# docker login -u helloqiu666
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@node2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my01 latest 063c585538d7 17 hours ago 291MB
mycentos 1.0 aceb9f7ba10e 18 hours ago 209MB
centos latest 300e315adb2f 4 weeks ago 209MB
hello-world latest bf756fb1ae65 12 months ago 13.3kB
#push自己的镜像到服务器上
[root@node2 ~]# docker push my01
The push refers to repository [docker.io/library/my01]
d6b77e1898b6: Preparing
e8b09d94b6c7: Preparing
2653d992f4ef: Preparing
denied: requested access to the resource is denied #拒绝
#登出
[root@node2 ~]# docker logout
发布到阿里云镜像服务上
登录–>容器镜像服务–>创建命名空间–>创建仓库(私有–>本地仓库)–>浏览基本信息
下面有操作指南
—>操作完之后 在镜像版本 可以看到自己push的镜像