5.安装常用软件
总体步骤
- 搜索镜像
- 拉取镜像
- 查看镜像
- 启动镜像
- 停止容器
- 删除容器
5.1.Tomcat安装
5.1.1.搜索镜像
docker search tomcat
5.1.2.拉取镜像
最新版,这个版本有点问题,目前不建议使用
docker pull tomcat
8.0版本
docker pull billygoo/tomcat8-jdk8
5.1.3.查看镜像
docker images billygoo/tomcat8-jdk8
5.1.4.启动镜像
docker run -it -p 8080:8080 billygoo/tomcat8-jdk8;
5.1.5.访问镜像
5.2.Mysql安装
5.2.1.搜索镜像
docker search mysql
5.2.2.拉取镜像
最新版
docker pull mysql
5.7版本
docker pull mysql:5.7
5.2.3.查看镜像
docker images mysql:5.7
5.2.4.启动镜像
启动并且设置密码为:123456
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
5.2.5.测试启动
进入容器
docker exec -it ecbe48102416 /bin/bash
进入mysql
mysql -uroot -p
连接测试
当容器被删除后,mysql数据库的数据也会没有了!
5.2.6.实战版
①启动一个新的容器
docker run -d -p 3306:3306 --privileged=true -v /chenchen/mysql/log:/var/log/mysql -v /chenchen/mysql/data:/var/lib/mysql -v /chenchen/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
复制三个数据到主机,日志,数据和配置文件
②新建my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
用于设置字符编码为UTF-8
需要重新启动mysql
5.3.Redis安装
5.3.1.搜索镜像
docker search redis
5.3.2.拉取镜像
docker pull redis
5.3.3.查看镜像
docker images redis
5.3.4.启动镜像
docker run -d -p 6379:6379 redis
5.4.Redis集群配置
5.4.1.搭建集群
①搭建六台容器
docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis --cluster-enabled yes --appendonly yes --port 6661
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis --cluster-enabled yes --appendonly yes --port 6662
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis --cluster-enabled yes --appendonly yes --port 6663
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis --cluster-enabled yes --appendonly yes --port 6664
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis --cluster-enabled yes --appendonly yes --port 6665
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis --cluster-enabled yes --appendonly yes --port 6666
参数解释:--cluster-enabled yes
,开启redis集群
②进入一台容器
docker exec -it redis-node-1 /bin/bash
构建主从关系
redis-cli --cluster create localhost:6661 localhost:6662 localhost:6663 localhost:6664 localhost:6665 localhost:6666 --cluster-replicas 1
③查看集群状态
redis-cli -p 6381
cluster info
cluster nodes
5.4.2.数据读写存储
启动redis时添加一个参数,此时redis的操作就是集群的方式
redis-cli -p 端口 -c
5.4.3.主从扩容
新建两个节点(容器)并且启动,然后进入其中一台
将其中一台作为主机加入集群
redis-cli --cluster add-node ip地址:新主机容器端口号 ip地址:旧容器节点端口号
然后进行重新分配槽号
redis-cli --cluster reshard IP地址:旧容器节点端口号
给新增的主机分配从机
redis-cli --cluster add-node ip地址:新从机容器端口号 ip:新主机容器端口号 --cluster-slave --cluster-master-id 新主机节点(容器)ID
5.4.4.主从缩容
删除从机
redis-cli --cluster del-node ip:从机端口 从机节点ID
将主机的槽号清空并且重新分配
redis-cli --cluster reshard ip:要给哪个主机分配
删除主机
redis-cli --cluster del-node ip:主机端口 主机节点ID
6.DockerFile
6.1.介绍
DockerFile
是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
基础知识
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数指令
- 按照从上到下,顺序执行
-
:表示注释
- 每条指令都会创建一个新的镜像层并对镜像进行提交
6.2.构建过程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新容器
- 执行dockerfile中的下一条指令直到所有指令都执行完成
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
- Dockerfile是软件的原材料
- Docker镜像是软件的交付品
- Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
1.Dockerfile:需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
2.Docker镜像:在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务;
3.Docker容器,容器是直接提供服务的。
6.3.常用保留字指令
FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from。
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构建时需要运行的命令,RUN是在docker build时运行,有两种格式
- shell格式:RUN <命令行命令>
- exec格式:RUN ["可执行文件","参数1","参数2"]
EXPOSE:当前容器对外暴露出的端口
WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENV:用来在构建镜像过程中设置环境变量
- ENV MY_PATH /usr/mytest
- 这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样,也可以在其它指令中直接使用这些环境变量,
ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY:类似ADD,拷贝文件和目录到镜像中。
- 将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
- COPY src dest
- COPY ["src" , "dest"]
- <src源路径>:源文件或者源目录
- <dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:指定容器启动后的要干的事情,CMD是在docker run时运行
- CNMD指令的格式和RUN 相似,也是两种格式
- shell格式:CMD <命令>
- exec格式:CMD ["可执行文件","参数1","参数2"...]
- 参数列表格式: CMD ["参数1"","参数2"...]。在指定了
ENTRYPOINT
指令后,用CMD指定具体的参数。
- Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT:用来指定一个容器启动时要运行的命令
- 类似于CMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT 指令指定的程序
- 如果 Dockerfile 中如果存在多个ENTRYPOINT 指令,仅最后一个生效
- 在执行docker run的时候可以指定ENTRYPOINT运行所需的参数。
6.4.自定义镜像
6.4.1.要求
让centos7镜像具备vim、ifconfig、jdk8这三个功能
6.4.2.编写
准备好一个Dockerfile
文件,必须是大写的D,然后编写脚本
#从哪个镜像写
FROM centos
#作者以及邮箱
MAINTAINER chenchen<[email protected]>
#登录之后默认地址
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
#暴露端口
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
6.4.3.构建
docker build -t 新镜像名字:TAG .
注意,TAG的后面有个```空格.```
6.4.4.运行
docker run -it 新镜像名字:TAG
6.5.虚悬镜像
合库名、标签都是
查看虚悬镜像
docker image ls -f dangling=true
删除所有虚悬镜像
docker image prune
也可以使用删除镜像的方法删除
docker rmi -f 虚悬镜像id
虚悬镜像是没有任何价值,且会占用内存的垃圾文件
FROM ubuntu
MAINTAINER chenchen<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN apt-get update
RUN apt-get install net-tools
#RUN apt-get install -y iproute2
#RUN apt-get install -y inetutils-ping
EXPOSE 80
CMD echo $MYPATH
CMD echo "install inconfig cmd into ubuntu success--------------ok"
CMD /bin/bash
标签:容器,--,Dockerfile,redis,cluster,镜像,docker,安装,常用软件
From: https://www.cnblogs.com/Myvlog/p/17444845.html