• docker


    一、docker安装

    • VMware
    • centos7
    # 卸载原有docker
    yum remove docker docker-common docker-selinux docker-engine -y
    # 安装yum工具包(方便配置安装源)和数据存储驱动包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    # 增加aliyun安装源
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 列出docker社区版本安装包
    yum list docker-ce --showduplicates | sort -r
    # 自动选择最快安装源
    yum makecache fast
    # 安装docker社区版本
    yum install docker-ce -y
    

    二、docker镜像加速配置

    # 配置阿里云镜像加速服务(需登录阿里云开通容器镜像服务)
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    三、docker常用命令

    docker pull 镜像名<:tags> - 从远程仓库抽取镜像 
    docker images - 查看本地镜像
    docker run 镜像名<:tags> - 创建容器,启动应用
    docker ps - 查看正在运行中的镜像
    docker rm <-f> 容器id - 删除容器
    docker rmi <-f> 镜像名:<tags> - 删除镜像
    #示例:-p 端口映射; -d 后台运行
    docker run -p 8080:8080 -d tomcat
    

    四、容器内部结构

    1.Tomcat容器内部结构

    2.容器中执行命令

    # 格式: docker exec [-it] 容器ID 命令
    # exec 在对应容器中执行命令
    # -it 采用交互方式执行命令
    
    #示例
    #获取容器ID
    docker ps
    #进入交互模式
    docker exec -it 0738ed2fe68b /bin/bash
    

    五、dockerfile-构建镜像

    1.操作说明

    Dockerfile是一个包含用于组合镜像的命令的文本文档
    Docker通过读取Dockerfile中的指令按步自动生成镜像
    docker build -t 机构/镜像名<:tags> Dockerfile目录
    

    2.Dockerfile

    FROM tomcat:latest
    MAINTAINER com.wod
    WORKDIR /usr/local/tomcat/webapps
    ADD docker-web ./docker-web
    

    3.docker-web/index.html

    <h1>hello docker by yhm!</h1>
    

    4.创建镜像

    #执行命令
    docker build -t com.wod/mywebapp:1.0 ./
    #输出:dockerfile中的每一行对应输出的每一步
    Sending build context to Docker daemon  3.584kB
    Step 1/4 : FROM tomcat:latest
     ---> 2ae23eb477aa
    Step 2/4 : MAINTAINER com.wod
     ---> Running in 4ae48a693627
    Removing intermediate container 4ae48a693627
     ---> dfa6df5cc13c
    Step 3/4 : WORKDIR /usr/local/tomcat/webapps
     ---> Running in f4e9e5ae4fe1
    Removing intermediate container f4e9e5ae4fe1
     ---> 870f60b9a094
    Step 4/4 : ADD docker-web ./docker-web
     ---> 1d415065d410
    Successfully built 1d415065d410
    Successfully tagged com.wod/mywebapp:1.0
    

    5.镜像创建分层的意义

    • dockerfile中的每一步对应一步输出,并且都会有一个临时容器id(形如 ---> Running in 4ae48a693627)

    • 此容器id会作为容器缓存,在再次创建镜像并且有相同步骤时自动使用缓存的容器id以加快创建操作

    形如:Step 2/3 : RUN ["echo","haha1"]
    ---> Using cache
    ---> 086593d87636

    六、dockerfile常用命令

    1.FROM - 基于基准镜像

    FROM centos #制作基准镜像(基于centos:lastest)
    FROM scratch #不依赖任何基准镜像base image
    FROM tomcat: 9.0.22-jdk8-openjdk
    尽量使用官方提供的Base Image

    2.LABEL & MAINTAINER - 说明信息

    MAINTAINER wod.com
    LABEL version = "1.0"
    LABEL description = "wod"

    3.WORKDIR - 设置工作目录

    WORKDIR /usr/local
    WORKDIR /usr/local/newdir #自动创建
    尽量使用绝对路径

    4.ADD & COPY - 复制文件

    ADD hello / #复制到根路径
    ADD test.tar.gz / #添加根目录并解压
    ADD 除了复制,还具备添加远程文件功能

    5.ENV - 设置环境常量

    ENV JAVA_HOME /usr/local/openjdk8
    RUN ${JAVA_HOME}/bin/java -jar test.jar
    尽量使用环境常量,可提高程序维护性

    6.EXPOSE - 暴露容器端口

    将容器内部端口暴露给物理机
    EXPOSE 8080
    docker run -p 8000:8080 tomcat

    七、dockerfile执行命令

    1.RUN & CMD & ENTRYPOINT

    RUN : 在Build构建时执行命令
    ENTRYPOINT : 容器启动时执行的命令
    CMD : 容器启动后执行默认的命令或参数

    2.RUN-构建时运行

    RUN yum install -y vim #Shell 命令格式
    RUN ["yum","install","-y","vim"] #Exec命令格式

    3.ENTRYPOINT启动命令

    ENTRYPOINT(入口点)用于在容器启动时执行命令
    Dockerfile中只有最后一个ENTRYPOINT会被执行
    ENTRYPOINT ["ps"] #推荐使用Exec格式

    4.CMD默认命令

    CMD用于设置默认执行的命令

    如Dockerfile中出现多个CMD,则只有最后一个被执行

    如容器启动时附加指令,则CMD被忽略

    CMD ["ps" , "-ef"] #推荐使用Exec格式

    5.ENTRYPOINT、CMD联合使用

    FROM centos
    RUN ["echo","haha1"]
    ENTRYPOINT ["ps"]
    CMD ["-ef"]
    
    • CMD可被替换

      docker run dockerrun -aux
      

    八、实例dockerfile

    FROM centos
    RUN ["yum", "install", "-y", "gcc", "gcc-c++", "net-tools", "make"]
    WORKDIR /usr/local
    ADD redis-5.0.5.tar.gz .
    WORKDIR /usr/local/redis-5.0.5/src
    RUN make & make install
    WORKDIR /usr/local/redis-5.0.5
    ADD redis.conf .
    EXPOSE 6379
    CMD ["redis-server", "redis.conf"]
    

    九、基于link进行容器间单向通信

    • 不使用IP通信:ip会变

    1.使用--name 容器名设置容器名

    docker run -d --name web tomcat
    docker run -d --name database -it centos /bin/bash
    

    2.ping测试

    #查看容器虚拟ip
    docker inspect database容器id
    # 找到NetworkSettings/IpAddress
    docker exec -it web容器id
    # ping database容器.IpAddress,发现可以ping通
    # ping database,不通
    
    # 先删除原web容器
    docker rm -f web容器id
    # 重新创建Web容器,并设置link
    docker run -d --name web --link database tomcat
    # 重新执行2步骤,发现ping database可以ping通了
    

    十、基于bridge容器间双向通信

    1.概念

    网桥bridge建立了docker与物理机之间的沟通桥梁

    2.操作

    # 查看网络明细,可以看到有一个默认的网桥bridge
    docker network ls
    # 创建一个bridge
    docker network create -d bridge my-bridge
    # 将两个容器连接到网桥
    docker network connect my-bridge web
    docker network connect my-bridge database
    # 分别进入两个容器内部测试网络是否互通
    ## database ping web
    docker exec -it database /bin/bash
    ping web
    PING web (172.18.0.2) 56(84) bytes of data.
    64 bytes from web.my-bridge (172.18.0.2): icmp_seq=1 ttl=64 time=0.068 ms
    64 bytes from web.my-bridge (172.18.0.2): icmp_seq=2 ttl=64 time=0.048 ms
    64 bytes from web.my-bridge (172.18.0.2): icmp_seq=3 ttl=64 time=0.052 ms
    
    ## database ping web 
    docker exec -it web /bin/bash
    ping database
    PING database (172.18.0.3) 56(84) bytes of data.
    64 bytes from database.my-bridge (172.18.0.3): icmp_seq=1 ttl=64 time=0.115 ms
    64 bytes from database.my-bridge (172.18.0.3): icmp_seq=2 ttl=64 time=0.061 ms
    64 bytes from database.my-bridge (172.18.0.3): icmp_seq=3 ttl=64 time=0.057 ms
    

    十一、容器间数据共享

    1.场景

    • 同集群多容器数据更新
    • 利用数据卷:Volume

    2.操作

    • -v选项挂载宿主机目录
    docker run --name 容器名  -v 宿主机路径:容器内挂载路径 镜像名
    # 实例:
    docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
    
    • 通过--volumes-from 共享容器内挂载点(name定位)
    # 创建共享容器
    docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
    # 共享容器挂载点
    docker run --volumes-from webpage --name t1 -d tomcat
    
    • 实例
    # 在宿主机创建/usr/webapps/volume-test/index.html
    echo "<h1>volume-test1</h1>" > /usr/webapps/volume-test/index.html
    # -v 创建挂载
    docker run -d --name web1 -v /usr/webapps/:/usr/local/tomcat/webapps -p 8000:8080 tomcat
    docker run -d --name web2 -v /usr/webapps/:/usr/local/tomcat/webapps -p 8001:8080 tomcat
    # 查看网页显示是否成功 
    # http://10.0.0.121:8000/volume-test/index.html
    # http://10.0.0.121:8001/volume-test/index.html
    
    # --volumes-from方式
    docker create --name webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/true
    docker run -d --name web3 --volumes-from webpage -p 8002:8080 tomcat
    # 查看网页显示是否成功 
    http://10.0.0.121:8002/volume-test/index.html
    

    十二、docker-compose容器编排工具

    1.多容器部署的麻烦

    2.容器编排工具docker-compose

    • 单机多容器部署工具
    • 通过yml文件定义多容器如何部署
    • WIN/MAC默认提供Docker Compose,Linux需安装

    3.安装

    sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    # 验证安装
    chmod +x /usr/local/bin/docker-compose 
    docker-compose -version
    

    4.使用docker-compose安装开源博客系统wordpress

    参考:https://docs.docker.com/compose/wordpress/

  • 相关阅读:
    JavaScript DOM 选择器 querySelector
    JavaScript call()函数的应用
    flex布局中 align-items 和 align-content的区别
    移动端WEB
    触发器与存储过程
    游标
    触发器---存储过程---存储函数
    mysql中check无效
    mysql唯一性约束和索引
    分页查询
  • 原文地址:https://www.cnblogs.com/wod-Y/p/13546324.html
Copyright © 2020-2023  润新知