• Docker


    资料来自
    菜鸟教程
    鲁班教程视频
    狂神Docker
    Docker命令

    步骤

    • docker可以在window上运行,win78和win10的安装方法还不一样,自行百度,这里是在centos虚拟机上使用的笔记
    • 首先需要linux系统是centos-7以上
    • 在linux下载docker
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 这是外国的,建议百度搜索国内的镜像
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    # 更新一下插件
    yum makecache fast
    
    # 下载安装
    yum install docker-ce docker-ce-cli containerd.io
    # 有选择都输入 y + 回车
    docker version
    
    • 启动docker
    systemctl start docker
    
    • 配置docker镜像下载源,不然下载镜像太慢
    # 没有得自己创建
    cd /etc/docker
    # 没有得自己创建
    vim daemon.json
    # 添加上
    { "registry-mirrors": ["https://registry.docker-cn.com"] }
    # 如果买的是阿里的服务器一定要用阿里的镜像加速服务
    # https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
    
    # 重新加载配制
    systemctl daemon-reload
    # 重启服务
    service docker restart
    
    • 下载tomcat镜像
    docker search tomcat
    # 用最新的版本
    docker pull tomcat
    # 制定版本
    docker pull tomcat:5.7
    
    • 查看镜像
    docker image ls
    
    • 删除镜像
    # 停止才能删
    docker rmi -f 【id】
    
    • 执行镜像,生成容器,并启动容器,不同程序的命令不一样
    # -d 后台运行
    # -p 开放端口
    docker run --name -d -p 8080:8080 tomcat
    
    # -dit 守护进程,因为如果没有外界使用这个服务,docker会自动关闭
    # 这个只有一个容器是特例,比如centos,不是每个都这么用的
    docker run --name -dit -p 8080:8080 tomcat
    
    # 到这里访问外部的地址,就能看到内置的页面了
    
    • 查看日记
    # 查看最新的10条日志
    docker logs -tf --tail 10 【id】
    # 查看所有日志
    docker logs -tf 【id】
    
    • 查看容器
    # 列出所有正在运行的容器
    docker ps
    # 列出所有的容器,包括没有运行的
    docker ps -a
    # 查看容器的运行端口
    docker container port 【id】
    # 查看容器的资源管理器
    docker top 【id】
    
    • 进入容器,退出容器
    docker exec -it 【id】 /bin/bash
    # 退出,这个退出是不会关闭容器的
    exit
    
    • 关闭容器,开启容器
    # 停止容器
    docker container stop 【id】
    # 容器已经存在就不需要再次 run 命令去生成了
    docker container start 【id】
    
    # 停用全部运行中的容器
    docker stop $(docker ps -q)
    
    • 删除容器
    # 必须先把容器停止了再删除
    docker rm -f【id】
    
    # 删除全部容器:
    docker rm $(docker ps -aq)
    
    • 一条命令实现停用并删除容器
    docker stop $(docker ps -q) & docker rm $(docker ps -aq)
    

    从容器把文件取出来

    # 用来把数据库等数据拷贝出来的操作
    # 后面用文件挂载代替
    # docker cp 【id】:/【容器路径】 /【外部路径】
    docker cp  t123w1:/usr/xxx.txt /usr
    

    文件挂载
    因为容器里的文件很难操作,所以需要把文件映射到linux的普通的文件夹里,正常需要被挂载的文件有日志文件,data数据,配置文件,映射的文件是双向绑定的,下面用mysql做例子

    # 在外部创建文件夹
    mkdir /opt
    mkdir /opt/mysql
    mkdir /opt/mysql/conf.d
    mkdir /opt/mysql/data/
     
    # 创建my.cnf配置文件
    touch /opt/mysql/my.cnf
    
    # my.cnf添加如下内容:
    [mysqld]
    user=mysql
    character-set-server=utf8
    default_authentication_plugin=mysql_native_password
    secure_file_priv=/var/lib/mysql
    expire_logs_days=7
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    max_connections=1000
    
    [client]
    default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    
    # 创建容器,并后台启动
    docker run 
    -d -p 3306:3306 --name mysql
    -v /opt/mysql/data/:/var/lib/mysql
    -v /opt/mysql/conf.d:/etc/mysql/conf.d
    -v /opt/mysql/my.cnf:/etc/mysql/my.cnf
    -e MYSQL_ROOT_PASSWORD=123456 
    mysql
    
    # 参数说明:
    -d 后台运行
    -p 开放端口
    -v /opt/mysql/conf.d/my.cnf:/etc/my.cnf:映射配置文件
    -v /opt/mysql/data/:/var/lib/mysql:映射数据目录
    

    为什么要用docker
    因为docker里的镜像和容器可以打包移动,可以那个u盘存起来,换虚拟机不麻烦,还能保证程序的版本和配置

    • 导入导出镜像
    • 导入导出容器,需要把容器停止

    容器里的网络连接

    # 在docker里默认有个网络,如果我们启动容器不传--network的参数就是默认使用这个网络,这个网络之间的通信非常的困难,所以需要自己创建一个
    
    # 自定义网络,这个其实也是一个镜像,这个自定义的网络之间是可以相互通信的,比默认的更加自由
    docker network create -d bridge test-net
    
    # 重新启动
    # 一般来说容器的相互连接很少,除了数据库集群,还有elk
    docker run -itd --name nginx01 --network test-net nginx /bin/bash
    docker run -itd --name nginx02 --network test-net nginx /bin/bash
    
    # 如果连接了docker默认网络的容器想访问自定义网络的容器怎么办
    # 用默认网络的容器名连接自定义网络
    # 执行之后,【默认网络的容器名】就可以随意的和 nginx01,nginx02 通信了
    docker network connect test-net 【默认网络的容器名】
    

    为什么会有虚拟机的docker

    • docker本身是运行在虚拟机系统上的
    • 为什么有人会在docker里还安装虚拟机
    • 因为安装了虚拟机的docker后,可以把这个docker卖给别人用

    高端内容

    • 自制镜像,dockerfile,原理是先把压缩包和依赖准备好,比如tomcat需要jdk,然后创建一个dockerfile的命令文件,这里面写的就是两个压缩包的使用命令,比如解压,配置环境变量等等,然后把文件执行一下,成功之后就可以得到一个镜像,这个镜像可以生成容器,也可以发布给别人使用
    # FROM 指定基础镜像(FROM是必备的指令,并且必须为第一条指令)
    # RUN 后面接要执行的命令
    # ENV 命令主要用于设置容器运行时的环境变量
    # ADD 主要用于将宿主机中的文件添加到镜像中
    # EXPOSE:  暴露端口
    
    mkdir nginx
    cd nginx/
    wget http://nginx.org/download/nginx-1.9.9.tar.gz
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz
    vim Dockerfile    #必须大写
    
    # 文件内容
    FROM centos    :默认从本地
    
    MAINTAINER zi hao
    
    ADD pcre-8.42.tar.gz /usr/local/src
    ADD nginx-1.9.9.tar.gz /usr/local/src
    
    RUN yum install -y wget gcc gcc-c++ make openssl-devel
    RUN useradd -s /sbin/nologin -M www
    
    WORKDIR /usr/local/src/nginx-1.9.9
    
    RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.42 && make && make install
    RUN echo "daemon off;" >> /usr/local/nginx/nginx.conf
    
    ENV PATH /usr/local/ngix/sbin:$PATH
    EXPOSE 80
    CMD ["nginx"]
    
    # 保存退出
    :wq!
    
    # 执行
    # 这个过程里找到dockerfile配置里的依赖本地没有就会自动去下载
    docker build -t nginx:centos .
    # 查看打包的镜像
    docker image ls
    # 使用
    docker run -d -p 80:80 --name nginx nginx:centos
    

    image.png

    • dockerfile发布springcloud
    # 先打包出两个image,一个是eureka:v1,另一个是order:v1
    # 启动eureka:v1
    docker run --name eureka -d -p 7001:7001 eureka:v1
    # 启动order:v1,link连接eureka
    docker service create --link eureka:v1  --replicas 1 --name order -p 9001:9001 order:v1
    
    • docker-redis集群
    docker pull redis
    
    # 在路径/home下创建一个文件夹redis-cluster
    # 在路径/home/redis-cluster下创建一个文件redis-cluster.tmpl
    mkdir redis-cluster
    cd redis-cluster
    touch redis-cluster.tmpl
    vim redis-cluster.tmpl
    
    port ${PORT}
    masterauth 123456 (设置集群节点间访问密码,跟下面一致)
    requirepass 123456 (设置redis访问密码)
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 172.19.0.1
    cluster-announce-port ${PORT}
    cluster-announce-bus-port 1${PORT}
    appendonly yes
    
    :wq!
    
    # 循环生成
    for port in `seq 7000 7005`; do 
      mkdir -p ./${port}/conf 
      && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf 
      && mkdir -p ./${port}/data; 
    done
    
    # 创建网络
    docker network create redis-net
    
    # 循环开启
    for port in `seq 7000 7005`; do 
      docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} 
      -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf 
      -v /home/redis-cluster/${port}/data:/data 
      --restart always --name redis-${port} --net redis-net 
      --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; 
    done
    
    # 随便进入一个
    docker exec -it redis-7001 bash
    
    redis-cli -a 123456 
    --cluster create 192.168.96.171:7001 192.168.96.171:7002 
    192.168.96.171:7003 192.168.96.171:7004 192.168.96.171:7005 
    192.168.96.171:7006 --cluster-replicas 1
    
    # 使用
    redis-cli -c -a 123456 -h 192.168.96.171 -p 7001
    
    • dockor-compose,查看【Docker进阶】笔记
    • dockor-swarm,查看【Docker进阶】笔记
  • 相关阅读:
    PAT 05-树7 File Transfer
    PAT 05-树6 Path in a Heap
    PAT 10-2 删除字符串中的子串
    PAT 10-1 在字符串中查找指定字符
    PAT 10-0 说反话
    PAT 08-2 求矩阵的局部最大值
    PAT 07-3 求素数
    PAT 07-2 A+B和C
    PAT 07-0 写出这个数
    PAT 06-3 单词长度
  • 原文地址:https://www.cnblogs.com/pengdt/p/13062463.html
Copyright © 2020-2023  润新知