Docker学习笔记3


title: Docker学习笔记3
date: 2020-08-22 20:04:39
tags: /学习
categories: /学习

第一章 Dockerfile

构建步骤:
1.编写一个Dockerfile文件
2.docker build构建成为一个镜像
3.docker run运行镜像
4.docker push发布镜像

1.1 Dockerfile构建过程

1.1.1 基础知识

1.每个保留关键字(指令)都必须是大写字母
2.执行按照从上到下的顺序执行
3.#表示注解
4.每一个指令都会创建提交一个新的镜像层,并提交

1.2 Dockerfile指令

FROM #基础镜像
MAINTAINER #镜像作者,姓名+邮箱
RUN #镜像构建时候需要运行的命令
ADD #步骤:tomcat镜像,tomcat的压缩包就是添加内容
WORKDIR #镜像工作目录
VOLUME #挂载卷
EXPOSE #暴露端口
CMD #指定容器启动时候要运行的命令,只有最后一个生效,可被替代
ENTRYPOINT #指定容器启动时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承Dockerfile这个时候会运行ONBUILD指令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建时设置环境变量

1.3 测试创建centos

1.编写dockerfile文件
FROM centos
MAINTAINER xtt1131467202@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

2.通过文件构建镜像
docker build -f dockerfile文件路径 -t 镜像名:[tag]

3.测试运行
如图所示,更改配置生效:

在这里插入图片描述

1.4 CMD和ENTRYPOINT的区别

测试CMD
1.编写dockerfile文件
[root@iZ2ze7pphwwibnvinufi8yZ dockerfile]# vim dockerfile-cmd
FROM centos
CMD [“ls”,"-a"]
2.构建镜像
docker build -f dockerfile-cmd -t cmdtest .
3.运行,cmd生效
[root@iZ2ze7pphwwibnvinufi8yZ dockerfile]# docker run 9fdc34b7e696
.

.dockerenv
bin
想追加-l ls -al
docker run 9fdc34b7e696 -l
因为cmd -l替换了[“ls”,“-a”]所以报错
应该使用docker run 9fdc34b7e696 ls -al
测试ENTRYPOINT
1.编写dockerfile文件
[root@iZ2ze7pphwwibnvinufi8yZ dockerfile]# vim dockerfile-cmd
FROM centos
ENTRYPOINT [“ls”,"-a"]
2.构建镜像
docker build -f dockerfile-entry -t entry .
3.运行
docker run f41108a9a205
.

.dockerenv
bin
追加-l,直接拼接在ENTRYPOINT命令后面
docker run f41108a9a205 -l
total 56
drwxr-xr-x 1 root root 4096 Aug 27 07:30 .
drwxr-xr-x 1 root root 4096 Aug 27 07:30 …
-rwxr-xr-x 1 root root 0 Aug 27 07:30 .dockerenv
lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x 5 root root 340 Aug 27 07:30 dev
与cmd出现明显区别

1.5 Tomcat镜像实战

1.准备镜像文件 tomcat压缩包和jdk压缩包
2.编写dockerfile文件
vim Dockerfile

FROM centos
MAINTAINET xtt1131467202@qq.com

COPY read.txt /usr/local/read.txt
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.55.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.55
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.55
ENV PATH P A T H : PATH: PATH:JAVA_HOME/bin: C A T A L I N A H O M E / l i b : CATALINA_HOME/lib: CATALINAHOME/lib:CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.5.55/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.55/bin/logs/catalina.out

3.构建镜像,使用官网名字Dockerfile可以不用加-f
docker build -t diytomcat .
4.启动镜像
docker run -d -p 9090:8080 --name xtttomcat -v /home/xtt/build/tomcat/test:/usr/local/apache-tomcat-8.5.55/webapps/test -v /home/xtt/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.5.55/logs diytomcat
5.访问测试
curl localhost:9090
6.发布项目(由于做了卷挂载,在本地发布即可)

<?xml version="1.0" encoding="UTF-8"?>


<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>

hello,xtt Hello World!
<% System.out.println("...my test ..."); %>

在这里插入图片描述
项目部署成功,可以直接访问


第二章 发布镜像

2.1 发布到dockerhub

1.登陆dockerhub
docker login -u xiangtongtong
2.发布镜像
docker tag 8501cb300464 xiangtongtong/tomcat:1.0
docker push xiangtongtong/tomcat:1.0

2.2 发布到阿里云

使用容器镜像功能
docker login --username=相同同abc registry.cn-beijing.aliyuncs.com
docker tag 8501cb300464 registry.cn-beijing.aliyuncs.com/xiangtong/tomcat:2.0

docker push registry.cn-beijing.aliyuncs.com/xiangtong/tomcat:2.0


第三章 Docker网络

3.1 理解Docker0

在这里插入图片描述

图中2网络对应阿里云内网地址,3网络对应docker0地址
测试查看容器内部地址:
首先下载tomcat镜像:docker run -d -P --name tomcat01 tomcat
启动容器查看地址:docker exec -it tomcat01 ip addr
服务器可以ping通docker容器内部
安装了docker之后,就会有一个网卡docker0,每启动一个容器,docker就会给docker容器分配一个ip
桥接模式,使用的技术是veth-pair。
再启动一个容器,又增加一对网卡
veth-pair技术就是一对虚拟设备接口,一段连着协议,一段彼此相连,veth-pair充当一个桥梁,连接着各种虚拟网络设备
docker exec -it tomcat02 ping 172.17.0.2
容器之间可以ping通
所有的容器不指定网络的情况下,都是由docker0路由的,docker为容器自动分配一个默认的可用ip

3.2 --link

使用–link可以直接通过容器名互联,ping通
docker run -d -P --name tomcat03 --link tomcat02 tomcat
docker exec -it tomcat03 ping tomcat02
方向不能ping通

3.3 自定义网络(现在都用这种方式)

容器互联
网络模式:
bridge:桥接 docker默认
none:不配置网络
host:和宿主机共享网络
container:容器内网络连通
练习
创建网络:docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker run -d -P --name tomcat-net-01 --net mynet tomcat
使用自定义的网络可以直接ping容器名
不同的集群使用不同的网络,保证集群安全

3.4 网路连通

连接一个容器到一个网络
docker network connect mynet tomcat01
一个容器两个地址

3.5 部署redis集群

1.创建自定义网络
docker network create redis --subnet 172.38.0.0/16
2.使用脚本创建六个redis配置
for port in KaTeX parse error: Undefined control sequence: \ at position 12: (seq 1 6); \̲ ̲do \ mkdir -p /…{port}/conf
touch /mydata/redis/node- p o r t / c o n f / r e d i s . c o n f c a t < < E O F > / m y d a t a / r e d i s / n o d e − {port}/conf/redis.conf cat << EOF >/mydata/redis/node- port/conf/redis.confcat<<EOF>/mydata/redis/node{port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
3.启动容器
docker run -p 6371:6379 -p 16371:16379 --name redis-1
-v /mydata/redis/node-1/data:/data
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6372:6379 -p 16372:16379 --name redis-2
-v /mydata/redis/node-2/data:/data
-v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6373:6379 -p 16373:16379 --name redis-3
-v /mydata/redis/node-3/data:/data
-v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6374:6379 -p 16374:16379 --name redis-4
-v /mydata/redis/node-4/data:/data
-v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6375:6379 -p 16375:16379 --name redis-5
-v /mydata/redis/node-5/data:/data
-v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf

docker run -p 6376:6379 -p 16376:16379 --name redis-6
-v /mydata/redis/node-6/data:/data
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
4.进入容器,连接集群
docker exec -it redis-1 /bin/sh
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
在这里插入图片描述

redis-cli -c
这时候停用掉redis-3,在redis-3中存的数据可以在redis-3的从机reids-4取出,实现了集群的高可用
{% asset_img redis2.jpg This is an image %}

图中可以看出集群的3号节点被4号节点替代,4号节点成为新的master节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值