美文网首页
总结-docker入门

总结-docker入门

作者: xc2023 | 来源:发表于2019-03-15 13:51 被阅读0次

    docker基础

    docker是开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的[Linux]机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
    相关的核心技术
    cggroups:
    LXC:
    AUFS:

    安装docker(centos7)

    先暂时把防火墙关了,不然一会儿可能启动不了容器或者访问不了
    systectl stop firewalld
    相关依赖

    yum install -y yum-utils device-mapper-persistent-data lvm2
    

    添加稳定版仓库

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    

    安装docker-ce docker-ce社区版免费/docker-ee企业版收费

    yum install docker-ce
    

    相关命令

    systemctl start/stop/status docker  启动/状态/停止
    service docker start/stop/status/restart 
    docker version 版本
    #卸载
    yum remove docker 
    rm -rf  /var/lib/docker
    

    为docker添加国内镜像,下载仓库的镜像更快
    阿里云有免费的


    dock1.png

    安装完成,启动docker

    docker image

    docker image是一个极度精简版的Linux程序运行环境,可以独立运行,共享主机的内存和磁盘等资源,但是内部文件是沙箱环境,和外部安全隔离,占得资源少,启动快,根据镜像可以快速创建环境一致的容器,可以快速大规模部署
    相关命令

    docker pull 镜像地址:版本号 #不写默认会拉取最新版本号
    docker save -o 目标文件 镜像:版本     #导出镜像
    docker load  -i 镜像    #导入镜像
    docker rmi 镜像      #删除镜像
    docker images   #查询image
    docker inspect  镜像 #查看文件细节
    docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
    docker build -t 镜像名称:版本号  #根据dockerfile 创建镜像
    docker create  -d --name 容器名 :创建容器三是不运行
    docker run -d --name 容器名 镜像名:版本号  #创建并运行容器
    docker run -d --name 容器名(自定) 镜像id号
    docker run -d -p 虚拟机端口:镜像端口 --name 容器名 镜像名:版本号
    docker ps #查看活动的容器
    Docker ps -a/-all #查看全部容器
    docker exec -it 容器id/name bash #进入容器
    docker stop 容器Id号/name #关闭容器
    docker start 容器Id号/name #启动容器
    docker rm 容器Id号/name #删除容器
    #关闭并删除所有容器
    docker stop $(docker ps -q) & docker rm $(docker ps -aq)
    
    案例
    docker pull redis #下载redis镜像
    docker pull tomcat:8 #下载tomcat镜像
    docker pull mysql:5.7 #下载mysql镜像
    docker images
    
    dock2.png
    docker run -d --name redis7000 -p 7000:6379 redis
    

    -d:容器将以后台模式运行
    --name:容器名称
    redis:镜像名称
    -p: 暴露端口,访问外部虚拟机的7000端口会映射到镜像的6379端口(redis默认6379)

    image.png
    docker ps -a
    
    dock3.png

    测试(systemctl stop firewalld 暂时关闭防火墙)

    public class JedisTest {
    
        public static void main(String[] args) {
            Jedis jedis = new Jedis("192.168.116.150",7000);
            jedis.set("cai","li ke li");
            System.out.printf("redis:"+jedis.get("cai"));
        }
    }
    
    dock4.png
    docker stats #查看镜像的内存,可以看出占得资源非常少
    
    dock5.png

    创建自定义网络

    docker network create --subnet=172.18.0.0/24 dockernet
    

    docketnet :自定义网络的名称

    docker network ls #查看网络,默认有三个,容器不指定默认是桥接
    

    安装虚拟机,桥接模式虚拟机就会分配一个ip给操作系统
    同理,docker也可以类似虚拟化一个局域网,上面就创建了一个dockernet网络.容器之间可以在虚拟网络上进行交互,


    image.png

    创建mysql

    docker run --net dockernet --ip 172.18.0.11 --name=mysql-11  -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --character-set-server=utf8
    

    --net:选择网路
    --ip: 分配给mysql的ip地址
    --name: 镜像名字
    -i:interactive具有交互功能
    -t:提供伪终端
    -d: 后台运行
    -p:暴露的端口
    -e MYSQL_ROOT_PASSWORD=root :给root用户的初始密码
    --character-set-server=utf8:字符
    mysql:5.7:镜像名称
    外部访问mysql就用暴露的端口,容器之间用内网交互


    dock6.png

    新建mysql 容器

    docker run -itd -p 8080:8080 --net dockernet --ip 172.18.0.12 --name tomcat-12  tomcat:8 /bin/bash
    

    /bin/bash :进入容器内部使用bash脚本语言,就是一般的shell命令
    新建一个简单的ssm项目,访问我们上面的数据库 地址在文章末尾


    dock7.png
    dock8.png

    里面有条记录 是个图片标签
    打包我们的ssm项目,改名为ROOT.war
    进入mysql容器里面看看目录
    exit 退出容器

    docker exec -it tomcat-12 /bin/bash
    
    dock9.png

    可以看到webapps的目录在 /usr/local/tomcat 下.删除里面的ROOT文件
    上传打包的ssm的ROOT.war包到--虚拟机--的/usr/local/src目录下
    把文件拷贝的容器内部

    cd /usr/local/src
    docker ps ROOT.war tomcat-12:/usr/local/tomcat/webapps/
    
    dock10.png

    访问刚刚部署的项目(没起来可以把容器重启.会自动解压)


    dock12.png
    dock11.png

    显示是图片是因为window配了nginx


    dock13.png

    dockerfile制作镜像

    上面只是简单的入门,dockerfile自动化构建才是核心,dockerfile是个--脚本,指定镜像包含的软件,通过dockefile可以制作一个包含了上面三个软件的--镜像,并根据此镜像创建一致的--容器
    关键字(不区分大小写,建议大写,)
    FROM : 指定镜像来源
    MAINTAINER:作者
    ADD:复制文件,会自动解压 ,支持网络url
    WORKDIR:设置当前工作目录
    VOLUME:设置数据卷,挂载主机目录
    EXPOSE:指定对外暴露的端口
    RUN:执行命令 sh
    CMD:执行命令exec 一个dockerfile只能有一个
    COPY: 复制文件
    ENV: 设置环境
    ENTRYPOINT:环境
    在某个目录下新建一个dockerfile文件

    cd  /usr/local/src/docker/
    vim Dockerfile
    

    添加相关的文件


    dcok19.png
    #基础镜像 
    FROM centos:7 
    
    #配置jdk环境
    ADD jdk-8u51-linux-x64.tar.gz /usr/local/src #后面的表示容器内的路径,下同
    
    ENV JAVA_HOME=/usr/local/src/jdk1.8.0_51
    ENV PATH=$JAVA_HOME/bin:$PATH
    ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.ja
    
    #tomcat环境
    ADD apache-tomcat-8.5.38.tar.gz /usr/local/src
    ENV CATALINA_HOME /usr/local/src/apache-tomcat-8.5.38
    ENV PATH=$PATH:$CATALINA_HOME/bin
    
    #添加项目
    WORKDIR $CATALINA_HOME/webapps
    RUN mkdir docker 
    COPY ROOT.war $CATALINA_HOME/webapps/docker/ROOT.war
    WORKDIR $CATALINA_HOME/webapps/docker
    RUN jar xvf ROOT.war && rm ROOT.war
    #暴露端口
    EXPOSE 8080
    #执行命令.启动tomcat
    CMD ["/usr/local/src/apache-tomcat-8.5.38/bin/catalina.sh","run"]
    

    创建镜像

    docker build -t file:1 -f Dockerfile /usr/local/src/docker #镜像名:版本号
    
    dock14.png

    根据镜像创建容器

    docker run -tid --name=tom -p 8090:8080 file:1 
    
    dock16.png
    dock17.png

    可以进入容器查看目录

    docker exec -it tom /bin/bash
    
    dock18.png
    我们据此可以上传自己的镜像到仓库.并在任意一个docker程序内创建容器
    和java一样.一处构建,到处运行
    入门结束了,容器编排,持续集成,高级部分之后在学
    总结;
    docker :镜像.容器.dockrfile的基本操作
    hithub地址:https://github.com/cailonghao/zongjie

    相关文章

      网友评论

          本文标题:总结-docker入门

          本文链接:https://www.haomeiwen.com/subject/nfchmqtx.html