• docker安装、基本使用、实战(测试必备)


    Docker概念、作用、术语

    一张超级形象的图

    看到这张图,大家会想到什么?

    可以这么理解:大海是操作系统,鲸鱼是Docker,集装箱是在Docker 运行的容器! 

    概念

    百度百科:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    作用

    Docker简化了环境部署和配置,实现“一次构建,处处运行”,避免了因运行环境不一致而导致的异常

    常用术语

    Docker主机(Host):安装了Docker程序的主机,运行Docker守护进程

    Docker镜像 (Image)--类似面向对象中的类:将软件环境打包好的模板,用来创建容器的,一个镜像可以创建多个容器

    Docker容器(Container)--类似面向对象中的实例:运行镜像后生成的实例称为容器,每运行一次镜像就会产生一个容器,容器可以启动、停止或删除;容器使用是沙箱机制,互相隔离,是独立是安全的;可以把容器看作是一个简易版的Linux环境,包括用户权限、文件系统和运行的应用等;

    Docker仓库 (Repository):用来保存镜像的,仓库中包含许多镜像,每个镜像都有不同的标签Tag<版本>,官方仓库: https://hub.docker.com/

    使用Docker的步骤

    1.安装Docker
    2.从Docker仓库中下载软件对应的镜像
    3.运行这个镜像,此时会生成一个Docker容器
    4.对容器的启动/停止

    下面进入实操,建议通过云服务器来练习:https://www.cnblogs.com/uncleyong/p/12694334.html

    Docker安装及配置

    环境要求

    Docker要求CentOS7,必须是64位, 且内核是3.10及以上

    https://docs.docker.com/

    或者看这里:http://www.docker.org.cn/book/install/rhel-docker-dependance-28.html

    安装centos7(安装文件加Q群获取):https://www.cnblogs.com/uncleyong/p/10739997.html

    查看内核信息,满足docker安全要求

    uname -r

    安装

    卸载旧版本

    较旧的 Docker 版本称为 docker 或 docker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。

    sudo yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-engine

    另外,还要删除镜像/容器等:rm -rf /var/lib/docker

    否则,已有的镜像/容器删除不掉

    另外,如果误删了目录rm -rf /var/lib/docker

    systemctl restart docker,重启docker后会生成目录

    否则拉取镜像报错

    安装docker-ce

    https://docs.docker.com/install/linux/docker-ce/ubuntu/

    安装所需软件包

    设置镜像仓库

    如果报错

     改为

    生成缓存 

    安装

    查看版本

    可以看到是go语言写的

    docker version

    启动

    systemctl start docker

    查看状态

    systemctl status docker

    docker info

    停止

    systemctl stop docker

    重启

    systemctl restart docker

    设置开机启动

    systemctl enable docker

    验证

    验证是否正确安装了docker,方法是运行hello-world镜像

    本地没有hello-world镜像,就从远程拉

    docker run

    配置镜像加速器

    登录阿里云获取镜像加速器地址

    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

     

    配置自己的docker加速器

    最后执行重启命令:

    Docker操作(镜像、容器、更新构建镜像)

    镜像操作

    查找

    docker search 镜像名

    参数说明:
    
    NAME: 镜像仓库源的名称
    
    DESCRIPTION: 镜像的描述
    
    OFFICIAL: 是否 docker 官方发布
    
    stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
    
    AUTOMATED: 自动构建。
    

    也可以通过docker官网搜索mysql

    点击查看详情

    查看可以标签 

    拉取

    docker pull 镜像名:版本,如果版本不指定,默认就是latest

    拉取完成

    查看所有本地镜像

    docker images

    各个选项说明:
    
    REPOSITORY:表示镜像的仓库源
    
    TAG:镜像的标签(版本)
    
    IMAGE ID:镜像ID
    
    CREATED:镜像创建时间
    
    SIZE:镜像大小
    

     

    查看完整镜像id,可以加--no-trunc参数

    获取镜像详细信息

    docker inspect 镜像id

    上面id才是镜像的完整id

    版本

    端口

    msyql数据文件

    删除指定的本地镜像

    docker rmi -f 镜像id或者镜像名:tag,rmi全英文是remove image,-f表示强制删除

    容器操作

    运行容器

    只有200M,是精简版centos(linux),只包含系统运行最基本的内核和库

    @后面是容器的id

    退出并关闭容器 

    容器中,很多命令没有,比如ifconfig,可以这样安装:yum install -y net-tools

    查看容器

    docker ps -a

    可以看到状态是Exited

    -q,只显示容器id

    docker ps -aq

    启动容器

    docker start

    只显示运行的,docker ps

    停止容器

    docker stop

    删除容器

    docker rm

    一个镜像可以生成多个容器,启动时不指定名称,名称是是随机定义的

    批量删除容器

    docker rm -f $(docker ps -aq)

    示例(含docker commit方式更新镜像)

    不能访问,因为tomcat不是直接跑在虚拟机上的,而是跑在虚拟机上docker里面容器里的

    192.168.0.105:8080

    删除容器

    docker rm

    运行容器 

    可以访问,但是报404

    192.168.0.105:9999

    加入容器

    如果报错,可能版本是1.13.1 ,升级到ce版本可以解决,详见:本文安装docker部分
    也可以根据docker官方文档配置yum源,重新安装,https://docs.docker.com/install/linux/docker-ce/centos/

    下面两个图就是我之前安装的docker

    如果是ce版本,就没问题,如下图

    进入webapps文件夹,是空的(tomcat默认的欢迎页面实际上放在的路径应该是webapps/ROOT/index.jsp或者index.html),旁边还有个webapps.dist的文件,进入才发现原本应该在webapps文件中的文件都在webapps.dist文件中。所以将webapps.dist重命名为webapps。

    改名后

    更新镜像:docker commit

    将修改后的容器提交生成一个新镜像

    -m是描述,-a是作者

    通过新镜像,运行容器

    加上版本

    访问,成功

    192.168.0.105:8888

    tomcat后台运行,-d

    先删除容器

     

    返回了完整容器id

    查看,docker ps

    只显示12位容器id

    停止

    启动

    查看日志

    docker logs 容器id或者容器名称

    下面看到的就是tomcat的启动日志

    拷贝

    宿主机拷贝到容器中

    docker cp

    可以访问到

    192.168.0.105:8888

    容器拷贝到宿主机

    拷贝到当前目录

    在宿主机中可以看到

    挂载

    共享目录,运行下面的命令

    docker run 
    --name mytomcat2_con 
    -p 8888:8080 
    -v /root/docker_test/tomcat/mydata:/usr/local/tomcat/mydata 
    -d mytomcat2:v2
    

    mydata目录在容器中会自动创建,可以看到宿主机对应目录下的文件

    容器中新增2.txt,3.txt

    宿主机中可以看到容器中新增的文件

    获取元信息

    docker inspect 容器id

    默认是rw,表示读写,如果容器中不能改,可以改为只读ro

    -v /root/docker_test/tomcat/mydata:/usr/local/tomcat/mydata:ro

    包含了jdk

    创建镜像(含Dockerfile讲解、自定义镜像)

    创建镜像的方式

      更新镜像:使用docker commit命令,详见本文容器操作部分,可以文中搜索commit

      构建镜像:使用docker build命令,需要创建Dockerfile文件,下面讲解

    Dockerfile

    Dockerfile是用来构建Docker镜像的文件,是由一系列指令和参数构成的脚本,从FROM命令开始,紧接着各种命令、参数等,最终会生成一个新的镜像。

    第一条指令必须是FROM,指定Base Image基础镜像,指令按从上往下的顺序,依次执行,每条指令都会创建一个新的镜像层并提交

    常用指令

    FROM:指定基础镜像,即当前新镜像是基于哪个镜像的
    MAINTAINER:指定作者
    RUN:指定镜像构建过程中要运行的命令
    ENV:设置环境变量
    WORKDIR:指定默认的工作目录,即进入容器后默认进入的目录
    VOLUME:创建挂载点,也称容器数据卷,用于数据共享和持久化
    CMD:指定容器启动时要运行的命令,与RUN不同的是, 这些命令不是在镜像构建过程中执行的
    ENTRYPOINT:指定容器启动时要运行的命令
    COPY:拷贝文件/目录到镜像中
    ADD:拷贝文件到镜像中,且会自动解压缩
    EXPOSE:指定对外暴露的端口
    

    我们来看下官方tomcat的Dockerfile是如何写的

    指定基础镜像、环境变量

    暴露端口8080

    运行容器,就把tomcat启动起来

       

    自定义tomcat镜像

    有时候,官方提供的镜像不一定满足我们的需求,我们想用自己期望的jdk、tomcat版本,那么,我们可以基于一个精简版centos来制作

     FROM centos
     MAINTAINER qzcsbj
    
     # 拷贝文件
     ADD jdk-8u211-linux-x64.tar.gz /usr/local
     ADD apache-tomcat-9.0.19.tar.gz /usr/local
    
     # 配置环境变量
     ENV JAVA_HOME /usr/local/jdk1.8.0_211
     ENV CLASSPATH .:$JAVA_HOME/lib
     ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.19
     ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
    
     WORKDIR $CATALINA_HOME
    
     EXPOSE 8080
    
     # 镜像运行容器就把tomcat启动起来
     CMD ["catalina.sh", "run"]
    

     

    运行容器

    docker run 
    --name qzcsbj_tomcat 
    -p 8181:8080 
    -d qzcsbj/tomcat:1.0
    

      

    192.168.0.105:8181

    把自定义镜像推送到镜像仓库

    创建命名空间

    创建镜像仓库

    镜像推送到阿里云

    下面给了login、push、pull的命令 

    1. 登录阿里云Docker Registry
    $ sudo docker login --username=qzcsbj registry.cn-hangzhou.aliyuncs.com
    用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。您可以在访问凭证页面修改凭证密码。
    
    2. 从Registry中拉取镜像
    $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:[镜像版本号]
    
    3. 将镜像推送到Registry
    $ sudo docker login --username=qzcsbj registry.cn-hangzhou.aliyuncs.com
    $ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:[镜像版本号]
    $ sudo docker push registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:[镜像版本号]
    请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
    

    设置登录阿里云的docker仓库密码

    登录

    docker login --username=qzcsbj registry.cn-hangzhou.aliyuncs.com  

    指定镜像tag归入仓库

    docker tag ab8ba635b677 registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0

    将镜像推送到仓库

    docker push registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0

    push成功

    push的镜像

    层信息

     搜索镜像

    镜像信息

    也可以修改信息

     

    实战1:使用Docker搭建环境

    安装tomcat,部署war包

    拉取刚刚push的tomcat镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0

    war包在Q群文件

    运行容器

    docker run 
    --name qzcsbj_tomcat4 
    -p 8184:8080 
    -v /root/my_docker/qzcsbj_springboot_war.war:/usr/local/apache-tomcat-9.0.19/webapps/qzcsbj_springboot_war.war 
    -d registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0

    192.168.0.105:8184/qzcsbj_springboot_war/test

    war包对应的代码:

    安装mysql、nginx、redis

    安装方式都差不多(创建挂载目录,拷贝并修改配置文件)

    详细步骤略,如有问题,请联系作者。

    建议通过云服务器来练习:https://www.cnblogs.com/uncleyong/p/12694334.html

    实战2:Docker+JMeter+Grafana+Influxdb搭建可视化性能测试监控平台

    详见:

    https://www.cnblogs.com/uncleyong/p/11885192.html

    常用命令回顾

    具体含义见下图官方解释。

    docker version

    docker info

    docker search

    docker pull

    docker images

    docker rmi

    docker run 

    docker logs

    docker ps

    docker exec

    docker start

    docker restart

    docker stop

    docker status

    docker rm

    docker commit

    docker build

    docker inspect

    docker cp

    docker login

    docker tag

    docker push

    更多:

     

    最后记录一个问题

    运维角度用docker:https://www.cnblogs.com/uncleyong/p/10069429.html

    参考资料:https://www.runoob.com/docker/docker-tutorial.html

  • 相关阅读:
    Android布局尺寸思考
    正则表达式五分钟快速复习
    git gitignore文件失效处理
    华为手机Edittext光标(cursor)颜色修改
    AndroidStudio-OSX 常用快捷键整理
    OS X(EI Capitan)常用快捷键整理
    通过Foxit和坚果云实现iPad和PC的pdf同步阅读(修改,笔记)
    《程序员必读的职业规划书》职业生涯规划部分书摘及感想
    以神经网络使用为例的Matlab和Android混合编程
    写出优美代码的两个方式:一步到位VS迭代优化
  • 原文地址:https://www.cnblogs.com/uncleyong/p/8894133.html
Copyright © 2020-2023  润新知