中文教程地址:https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/java
1 sudo yum install -y yum-utils device-mapper-persistent-data lvm2mysql
2 设置 stable 镜像仓库。您始终须要使用 stable 镜像仓库,即便您还须要经过 edge 或 testing 镜像仓库安装构建也是如此。linux
sudo yum-config-manager \web
--add-repo \redis
https://download.docker.com/linux/centos/docker-ce.reposql
3 可选:启用 edge 和 testing 镜像仓库。这些镜像仓库包含在上述 docker.repo 文件中,但默认状况下处于禁用状态。您能够将它们与 stable 镜像仓库一块儿启用。docker
sudo yum-config-manager --enable docker-ce-edgeapache
sudo yum-config-manager --enable docker-ce-testing
更新 软件包索引。yum
$ sudo yum makecache fast
安装最新版本的 Docker CE,或者转至下一步以安装特定版本。
$ sudo yum install docker-ce
在生产系统中,您应该安装特定版本的 Docker CE,而不是始终使用最新版本。列出可用版本。此示例使用 sort -r
命令按版本号(从最高到最低)对结果进行排序,而且已被截断。json
注:此 yum list
命令仅显示二进制软件包。若是还须要显示 源软件包,请从软件包名称中省略 .x86_64
。vim
$ yum list docker-ce.x86_64 --showduplicates | sort -r
docker-ce.x86_64 17.06.0.el7 docker-ce-stable
此列表的内容取决于启用了哪些镜像仓库,而且将特定于您的 CentOS 版本(在本示例中,由版本中的 .el7
后缀表示)。选择一个特定版本进行安装。第二列为版本字符串。第三列为镜像仓库名称,它表示软件包来自哪一个镜像仓库并按扩展其稳定性级别列出。如需安装特定版本,请将版本字符串附加到软件包名称,并使用连字符 (-
) 分隔它们:
$ sudo yum install docker-ce-<VERSION>稳定版 yum install docker-ce-17.12.0.ce
5 启用阿里云镜像加速
配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您能够经过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://s5sx884j.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
检查加速器是否生效
查看配置文件/etc/docker/daemon.json
6 运行hello-world镜像验证docker是否安装成功
Docker run hello-world
7 docker的底层原理
8 docker经常使用命令
帮助命令:docker version,docker info,docker help
镜像命令:docker images(列出本地主机上的镜像),
Docker images –a 列出本地全部的镜像(含中间影像层)
Docker images –q 只显示镜像id
Docker search 某个镜像的名字
命令:-s 30 显示点赞数超过30的镜像
--automated:只列出自动构建的类型的镜像
docker search --filter=stars=30 --no-trunc tomcat
docker pull 某个镜像的名字 [:TAG] docker pull tomcat:latest
docker rmi 某个XX镜像名字
删除单个:docker rmi –f 镜像ID
删除多个:
容器命令:1 下载一个centos 镜像 docker pull centos
2 新建并启动容器 docker run [options] image [command][arg…]
Options 说明(经常使用):有些是一个减号,有些是两个减号
--name=”容器新名字”:为容器指定一个名称;
-d:后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,一般与-t同时使用;
-t:为容器从新输入一个伪输入终端,一般与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有如下四种格式
ip:hostPort:containerPort
ip:containerPort
hostPort:containerPort
containerPort
例子:docker run -it --name mycentos0115 centos
3查看docker里面运行的进程 (有哪些容器运行) docker ps
Options说明:-a 列出当前全部正在运行的容器+历史上运行过的
-l:显示最近建立的容器。
-q:正在运行的容器。
-n:显示最近n个建立的容器
--no-trunc:不截断输出。
4 退出关闭docker容器 两种方式
1 exit 一锤子买卖 容器中止退出
2 ctrl+p+q 容器不中止退出
5 启动容器 docker start 容器ID或者容器名
Docker restart 容器ID或者容器名
6 中止容器 docker stop 容器ID或者容器名 温柔中止
Docker kill 容器ID或者容器名 强制中止
7 删除已经中止的容器 docker rm ID
Docker rm –f Id 强制删除
重要 1 启动守护式进程 docker run –d centos 这个时候使用docker ps 查看并无后台进程运行 docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
2 查看docker日志:docker logs–t –f --tail 容器ID
-t:加入时间戳
-f:跟随最新的日志打印
--tail:数字 显示最后多少条
3 查看容器内的进程 docker top 容器ID
4 查看容器内部细节:docker inspect 容器ID
5 进入正在运行的容易并以命令行交互
1 从新进入 docker attach 容器ID
2 docker exec –t 容器ID bashShell
上述两个区别:1 attach 直接进入容器启动命令的终端,不会启动新的进程
2 exec 是在容器中打开新的终端,而且能够启动新的进程
例子:docker exec -it ead0244a0673 ls -l /tmp 在宿主机直接执行容器内命令并得到结果
docker exec -it ead0244a0673 /bin/bash 进入容器执行命令
6 从容器内拷贝文件到主机上
Docker cp 容器ID:/tmp/yum.log /root
9 docker 镜像 1 是什么 联合文件系统 UnionFS
10 docker commit 提交容器副本使之成为一个新的镜像
docker commit –m=”提交的描述信息” –a=”做者” 容器ID 要建立的目标镜像名:[标签名]
案例演示:1 从hub上下载tomcat镜像到本地并成功运行
Docker run –it –p 8080:8080 tomcat 前台交互式运行
Docker run –d –p 8080:8080 tomcat 后台方式运行
说明:-p:主机端口:docker容器端口
-P:随机分配端口
i:交互
t:终端
2 故意删除上一步 镜像生产tomcat容器的文档
3 也即当前的tomcat运行实例是一个没有文档内容的容器,以它为模板commit一个没有doc的tomcat新镜像atguigu/tomcat02
Docker commit –a=”szy” –m=”ceshi” 容器ID atguigu/mytomcat01:[tag]
4 启动咱们的新镜像并和原来的对比
11 docker容器数据卷
1 直接添加 docker run –it –v /宿主机绝对路径目录:/容器内目录 镜像名 docker run –it –v /myDataVolume:/dataVolumeContainer 镜像名 给容器添加数据卷
Docker run –it –v /宿主机绝对路径目录:/容器内目录:ro 镜像名
12 dockerfile添加
1 根目录下新建mydocker文件夹并进入
2 可在dockerfile中使用volume命令来给镜像添加一个或多个数据卷
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,------success1"
CMD /bin/bash
3 File构建
4 build后生成镜像 docker build –f /mydocker/dockerfile2 –t zzyy/centos.
5 运行生成的镜像 docker run –it 镜像id
13 容器间传递共享(--volumes-from)
1 先启动一个父容器dc01(docker run –it –name dc01 zzyy/centos),在dataVolumeContainer2新增内容 *.txt
14 dockerfile 体系结构(保留字指令)
FROM:基础镜像,当前新镜像是基于哪一个镜像的
MAINTAINER:镜像维护者的信息
RUN:容器构建时须要运行的命令
EXPOSE:当前容易对外暴露出的端口
WORKDIR:指定在建立容器时,终端默认登陆的进来的工做目录,一个落脚点
ENV:用来在构建镜像过程当中设置环境变量
ADD:拷贝加解压(将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包)
VOLUME:容器数据卷,用于数据保存和持久化工做。
CMD:指定一个容器启动时要运行的命令。
Dockerfile中能够有多个cmd指令,但只有最后一个生效,CMD会被docker run以后的参数替换
ENTRYPOINT: 指定一个容器启动时要运行的命令
ONBUILD:当构建一个被继承的dockerfile时运行命令,父镜像再被子继承后,副景象的onbuild被处罚。
15 dockerfile构建本身的tomcat9
1拷贝tomcat和jdk的压缩包到同一目录下
2 编写dockerfile
FROM centos
MAINTAINER zzyy<zzyy@163.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-7u51-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.0.M18.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工做访问时候的worddir路径,登陆落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.7.0_51
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.0.M18
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.0.M18
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
CMD /usr/local/apache-tomcat-9.0.0.M18/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.0.M18/bin/logs/catalina.out
3 构建镜像
docker build -f dockerfile4 -t szy/tomcat9 .
4 根据镜像运行容器
docker run -d -p 9080:8080 --name myt9 -v /mydocker/test:/usr/local/apache-tomcat-9.0.0.M18/webapps/test -v /mydocker/logs:/usr/local/apache-tomcat-9.0.0.M18/logs --privileged=true szy/tomcat9
16 docker运行mysql
1 搜索镜像 docker search mysql
在conf下建立my.cnf文件,内容以下:
· [mysqld]
· user=mysql
· character-set-server=utf8
· default_authentication_plugin=mysql_native_password
· [client]
· default-character-set=utf8
· [mysql]
· default-character-set=utf8
2 docker run -p 13306:3306 --name mysql --name mysql -v /szy/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /szy/mysql/logs:/logs -v /szy/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
3 docker宿主机备份mysql
docker exec -it 5ea455a83a98 sh -c 'exec mysqldump --all-databases -uroot -p"123456"' > /szy/all-databases.sql
4 docker search redis
5 docker pull redis:3.2
6 docker run -p 7001:6379 -v /szy/myredis/data:/data -v /szy/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
7 宿主机 vi /szy/myredis/conf/redis.conf/redis.conf 添加redis基本配置内容
8
17Docker下redis的主从、持久化配置
1拉取redis镜像
/library/redis:docker pull daocloud.iolatest
首先使用docker启动3个redis容器服务,分别使用到6379、6380、6381端口
run --name redis-6380 -p 6380:6379 -d daocloud.io/library/redisdocker
run --name redis-6381 -p 6381:6379 -d daocloud.io/library/redisdocker
run --name redis-6382 -p 6382:6379 -d daocloud.io/library/redisdocker
使用以下命令查看容器内网的ip地址等信息
docker inspect containerid
3个redis的内网ip分别为172.17.0.5:6379。172.17.0.4:6379。172.17.0.2:6379。
进入docker容器内部,查看当前redis角色(主仍是从)
1docker exec -it ee2326cabc2a /bin/bash 2redis-cli 3 info-replication
能够看到当前3台redis都是master角色,使用redis-cli命令修改redis-6381、redis-6382的主机为172.17.0.2:6379
SLAVEOF172.17.0.26379 host port // SLAVEOF
查看redis-6380是否已经拥有2个从机:
1docker exec -it ee2326cabc2a /bin/bash 2redis-cli 3 info-replication
至此,redis下的主从配置就ok了。
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行如下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运做正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 能够经过 API 向管理员或者其余应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工做时, Sentinel 会开始一次自动故障迁移操做, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其余从服务器改成复制新的主服务器; 当客户端试图链接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可使用新主服务器代替失效服务器。
接下来直接进入3台redis容器内部进行配置
docker exec -ti 容器id /bin/bash
进入根目录建立sentinel.conf文件
cd / && touch sentinel.conf
修改文件内容为:
sentinelmonitormymaster.17.0.2 172 6379 1
最后,启动Redis哨兵:
使用 redis-sentinel /sentinel.conf 启动Redis哨兵监控
grep使用 ps –ef | redis 命令,能够看到redis-server和redis-sentinel正在运行
至此,Sentinel哨兵配置完毕。
19 本地镜像推送到阿里云
1docker images查看本地镜像
2 docker run –it 镜像id 根据镜像运行容器
3 本地commit上一步生成的容器 docker commit –a szy –m “new centos with vim and inconfig” 容器id 新镜像名称
4 登陆阿里云官网 建立镜像仓库
仓库烈性 私有,代码源,本地仓库
5 将镜像推送到registry
点击管理里卖弄能够看到命令版本号
]