docker的安装和dockfile指令,docker网络介绍

  • 1、安装docker并配置镜像加速。
  • 2、dockerfile常用指令总结。
  • 3、基于alpine制作tomcat镜像
  • 4、利用桥接实现不同宿主机间容器互联。


1、安装docker并配置镜像加速。

官网安装教程: 官网安装docker 阿里云安装docker教程 阿里云安装docker

yum安装方式(用阿里云的镜像安装)

mv /etc/yum.repos.d/* /root/                   删除老的yum源
下载阿里云源和docker的源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

下载docker源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo                

yum clean all                                 删除缓存
yum makecache                                 更新yum源

yum list docker-ce --showduplicates  查看全部可安装的docker版本

安装docker19.03
yum install docker-ce-19.03.12-3.el7 docker-ce-cli-19.03.12-3.el7  -y

systemctl start docker                 启动docker
systemctl enable docker                设置开机启动docker
docker run hello-world                 运行hello容器查看docker是否正常运行

docker安装chrome docker安装网心云_运维

docker镜像加速配置

官网注册阿里云地址 阿里云 注册账户,然后点击账户中心,左侧就可以看到搜索栏

搜索容器镜像服务

docker安装chrome docker安装网心云_docker安装chrome_02


左侧选择镜像加速器,右侧就是阿里云免费提供的镜像加速服务,按照提示输入即可

docker安装chrome docker安装网心云_docker安装chrome_03

vi /etc/docker/daemon.json

添加内容,设置加速,可自行去阿里云网站注册账户加速镜像下载。
{
        "registry-mirrors": ["https://registry.docker-cn.com"]
}

systemctl restart docker               重启docker

2、dockerfile常用指令总结。

dockerfile常用指令:
官网介绍:dockfile介绍

  • FROM:指定基础镜像来源,利用这个基础镜像生成新的镜像
示例:FROM centos:7.6.1810
  • LABEL:镜像备注或镜像简介
示例:LABEL version=centos:7.6.1810
  • RUN:相当于shell中的/bin/sh -c,在配置时执行命令
示例:RUN yum install -y httpd (需要原本的镜像支持yum)
  • ENV:设置环境变量,示例:变量名=变量值
示例:ENV VERSION=1.2.0
  • COPY:把真机的文件复制到镜像中,保留格式。
    注意:
    对于文件,真机的文件需要放在和dockfile文件平级目录下,比如dockfile在/docker目录下,那么真机的文件如index.html也必须要在这个/docker目录下。
    对于目录,如果在/dockerfile目录下有/dockerfile/aa目录,/dockerfile/aa目录下还有/dockerfile/aa/bb目录,实际只会复制源目录下的子目录/dockerfile/aa/bb和/dockerfile/aa/里面的其他文件和目录,不会复制aa目录本身。
    目标路径后面必须指定到/,如要复制到容器的/home目录,实际必须为/home/
示例:COPY index.html /home/
       COPY aa /home/
  • ADD:COPY的增强版,支持自动解压压缩包。可解压tar.gz包
示例:ADD nginx-1.18.0.tar.gz /data/nginx/
  • CMD:启动容器内的程序,一个镜像有且只有一个CMD,多个CMD只会运行最后一个CMD指令
示例:CMD ["nginx","-g","daemon off;"]
  • VOLUME:数据卷,将容器内的某个目录映射到真机的某个真实目录下,默认为容器内的目录如/data/映射到真机目录下的随机名字,删除容器后不会删除这个目录。可以配合docker -v真机目录:容器目录绑定目录使用。
示例:VOLUME [ "/data1" ]
  • EXPOSE:将容器内的端口映射到真机的随机端口或指定端口上,需要配合docker -P或docker -p 真机端口:容器端口绑定使用
示例:EXPOSE 80
  • WORKDIR:指定工作目录,设置初始化进入容器后的目录。如果想做镜像时把东西都放在同一个目录下,这里指定即可。
示例:WORKDIR /usr/local/
  • USER:指定使用容器的账户,默认镜像都是root账户,需要指定为其他账户时,这里指定。
示例:USER mysql
  • HEALTHCHECK:容器健康状态检查,每几秒检查下服务状态。
示例:HEALTHCHECK --interval=5s --timeout=3s
  • SHELL:默认shell版本为/bin/sh,可以在配置中指定运行版本shell的版本,可以多次重定向shell的版本
示例: SHELL [ "/bin/bash","-c" ]

创建镜像方式:

vi Dockfile         编辑文件,添加需要的命令
.代表当前目录,需要把COPY和ADD的文件都放在和dockfile文件同个目录下

docker build -t 镜像名:版本号 -f ./dockfile .

3、基于alpine制作tomcat镜像

  1. 按照上面方法安装docker
  2. 下载安装Java的源码包和tomcat源码包到/docker目录下
  3. Java包下载链接(需要注册账户才能下载) Java官网 tomcat下载链接 tomcat官网
mkdir /docker          新建目录,存放dockfile需要的文件
cd /docker/            进入目录

#alpine不支持Java的环境,需要安装glibc,要不然会出现找不到路径的问题/bin/sh: java: not found,下载下面的环境和安装包到/docker目录下
#详细介绍网站  https://github.com/sgerrand/alpine-pkg-glibc/
wget https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.34-r0/glibc-2.34-r0.apk

编辑repositories文件
#这个文件相当于centos的repo文件或Ubuntu的sources.list,改为国内源加速下载
vi repositories
添加
https://mirrors.aliyun.com/alpine/v3.6/main
https://mirrors.aliyun.com/alpine/v3.6/community

编辑tomcat的conf文件
vi tomcat.conf
添加Java路径
JAVA_HOME=/usr/local/jdk

编辑tomcat网页文件,可以不写,不写默认就是tomcat本身网页
echo "tomcat-web">/docker/index.html

ls    总共7个文件在/docker目录下
apache-tomcat-8.5.70.tar.gz  glibc-2.34-r0.apk  index.html  jdk-8u301-linux-x64.tar.gz  repositories  sgerrand.rsa.pub  tomcat.conf

docker安装chrome docker安装网心云_运维_04

  1. 编辑dockfile文件
cd /docker
vi dockfile
添加
FROM alpine:3.13
LABEL version=alpine3.13-tomcat8.5
#初始环境配置
COPY sgerrand.rsa.pub /etc/apk/keys/
COPY glibc-2.34-r0.apk /usr/local/
COPY repositories /etc/apk/
RUN cd /usr/local/ && apk add glibc-2.34-r0.apk
#安装Java
ADD jdk-8u301-linux-x64.tar.gz /usr/local/
RUN ln -s /usr/local/jdk1.8.0_301 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV PATH=$PATH:$JAVA_HOME/bin
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib
#安装tomcat
ADD apache-tomcat-8.5.70.tar.gz /usr/local/
RUN ln -s /usr/local/apache-tomcat-8.5.70/ /usr/local/tomcat
ENV PATH=$PATH:/usr/local/tomcat/bin
COPY tomcat.conf /usr/local/tomcat/conf/
COPY index.html /usr/local/tomcat/webapps/ROOT/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run" ]
  1. 利用dockfile生成镜像
docker build -t alpine-tomcat:v0.1 -f ./dockfile . 生成镜像
docker image ls

docker安装chrome docker安装网心云_docker安装chrome_05

  1. 利用生成的镜像alpine-tomcat:v0.1
docker  run -P -it --rm alpine-tomcat:v0.1   前台启动容器       
docker  run -P -it -d alpine-tomcat:v0.1     想要后台启动容器,用这个命令
docker ps -a                    查看容器启动,真机端口为32768

docker安装chrome docker安装网心云_docker安装chrome_06

  1. 访问网站,测试网页访问
curl http://192.168.116.145:32768

docker安装chrome docker安装网心云_docker安装chrome_07

4、利用桥接实现不同宿主机间容器互联。

拓扑图:

docker安装chrome docker安装网心云_运维_08

初始环境配置:
2台真机都安装docker服务,按上面做法安装docker
需要利用到iptables的nat策略:iptables介绍

系统

IP

centos 7.8/ 真机1

真机P:192.168.116.145,容器网段:10.0.0.0/24

centos 7.8/ 真机2

真机P:192.168.116.146,容器网段:20.0.0.0/24

真机1配置:

systemctl start docker               启动容器,初始化配置
vi /etc/docker/daemon.json           添加文件,设置网卡网段
添加
{
        "registry-mirrors": ["https://registry.docker-cn.com"],
        "bip": "10.0.0.1/24"
}
systemctl restart docker              重启网卡
ip a                                  确认网段被修改了

docker安装chrome docker安装网心云_运维_09

真机2配置:

systemctl start docker               启动容器,初始化配置
vi /etc/docker/daemon.json           添加文件,设置网卡网段
添加
{
        "registry-mirrors": ["https://registry.docker-cn.com"],
        "bip": "20.0.0.1/24"
}
systemctl restart docker              重启网卡
ip a                                  确认网段被修改了

docker安装chrome docker安装网心云_容器_10

容器创建

真机1创建容器

docker run -it --name docker1-a1 busybox
可以看到容器IP为10.0.0.2

docker安装chrome docker安装网心云_容器_11


真机2创建容器

docker run -it --name docker2-b1 busybox
可以看到容器ip为20.0.0.2

docker安装chrome docker安装网心云_centos_12

没加nat策略前

真机1测试:

ping 192.168.116.146        真机1和真机2的真机IP能互通
ping 10.0.0.2               真机1和自己的容器IP能互通
ping 20.0.0.2               真机1和真机2的容器IP不能互通

docker安装chrome docker安装网心云_运维_13


真机1的容器测试

ping 192.168.116.145            真机1的容器和真机1能通
ping 192.168.116.146            真机1的容器和真机2的真机IP能通
ping 20.0.0.2                   真机1的容器和真机2的容器不能互通

docker安装chrome docker安装网心云_容器_14

真机2测试:

ping 192.168.116.145            真机2和真机1的真机IP能互通
ping 20.0.0.2                   真机2和自己的容器IP能互通
ping 10.0.0.2                   真机2和真机1的容器IP不能互通

docker安装chrome docker安装网心云_centos_15


真机2的容器测试

ping 192.168.116.145            真机2的容器和真机2能通
ping 192.168.116.146            真机2的容器和真机1的真机IP能通
ping 20.0.0.2                   真机2的容器和真机1的容器不能互通

docker安装chrome docker安装网心云_docker安装chrome_16

添加nat策略后

真机1添加nat策略

ip route add 20.0.0.0/24 via 192.168.116.146    
iptables -A FORWARD -s 192.168.116.0/24 -j ACCEPT

真机2添加nat策略

ip route add 10.0.0.0/24 via 192.168.116.145    
iptables -A FORWARD -s 192.168.116.0/24 -j ACCEPT

最终测试

真机1容器测试

ping 20.0.0.2                   真机1的容器和真机2的容器能互通

docker安装chrome docker安装网心云_centos_17


真机2容器测试

ping 20.0.0.2                   真机2的容器和真机1的容器能互通

docker安装chrome docker安装网心云_容器_18