• Docker的使用和常用命令


    部署项目前基础服务准备

    第一步:安装Docker环境
    第二步:开启Docker远程带证书访问(可选)
    第三步:拉取mysql,redis,nginx等等所需镜像
    第四步:运行(创建)容器
    
    # 本地远程调试需要在阿里云开放所需端口,比如:3306,6379,2379,80,443
    

    启动、停止、重启Docker服务

    systemctl start docker   # 启动docker
    systemctl stop docker    # 停止docker
    systemctl restart docker # 重启docker
    
    docker version # 查看Docker版本信息
    

    拉取镜像

    docker pull [name] 可以指定版本号
    
    docker pull nginx
    docker pull mysql
    docker pull redis
    

    镜像操作

    docker images         # 查看已经拉取的镜像
    
    docker search name    # 查询镜像
    
    docker tag 镜像id REPOSITORY:TAG(仓库:标签) # 镜像重命名
    
    # 删除某一个镜像,停止容器--》删除容器--》删除镜像
    docker rmi IMAGEID          # 根据镜像ID删除
    docker rmi REPOSITORY:TAG   # 根据仓库+标签删除
    
    # 删除所有的镜像
    docker rmi $(docker images | awk '{print $3}' |tail -n +2)
    
    # 在docker反复build后,会存留很多none镜像,删除所有none镜像
    docker rmi `docker images | grep  '<none>' | awk '{print $3}'`
    # 或
    docker rmi $(docker images -q -f dangling=true)
    

    容器操作

    docker ps      # 查看正在运行中的容器 
    docker ps -a   # 查看正在运行中的容器,包括未运行的
    docker ps --f"name=test-nginx"  # 带条件搜索容器
    
    docker start 容器名称/容器ID
    docker stop 容器名称/容器ID
    docker restart 容器名称/容器ID
    
    docker rename 容器名称/容器ID 新的名称  # 容器重命名
    
    docker rm 容器ID  # 删除某一容器
    
    # 启动所有的容器
    docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
    
    # 关闭所有的容器
    docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
    
    # 删除所有的容器
    docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
    
    # 删除所有停止的容器
    docker rm 'docker ps -qf status=exited'
    

    运行(创建)一个容器

    docker run -d -p 0.0.0.0:80:80 --name nginx nginx:1.21
    -d: # 让容器在后台运行
    -P: # (大写)当使用-P时,Docker会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
    -p: # 指定端口,能够指定要映射的IP和端口(ip:hostPort:containerPort)
    -e: # 指定环境变量
    -v: # 给容器挂载存储卷,挂载到容器的某个目录
    --name # 容器名称
    --restart="no"  # 指定容器停止后的重启策略:
               no         # 容器退出时不重启
               on-failure # 容器故障退出(返回值非零)时重启
               always     # 容器退出时总是重启
    nginx:1.21  # 镜像名称
    

    运行容器参考示例

    # 示例1:启动nginx并挂载目录:
    docker pull nginx:1.21  # 拉取镜像
    
    docker run --name nginx -p 80:80 -p 443:443
    -v /data/docker-nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    -v /data/docker-nginx/log:/var/log/nginx
    -v /data/docker-nginx/ssl:/etc/nginx/ssl
    -v /data/docker-nginx/wap:/usr/share/nginx/wap
    -v /data/docker-nginx/html:/usr/share/nginx/html
    -v /data/docker-nginx/extend:/usr/share/nginx/extend
    -v /data/docker-nginx/mp:/usr/share/nginx/mp
    -d nginx:1.21
    
    # 创建容器时挂载目录没有nginx.conf文件,需要手动上传到/data/docker-nginx/conf
    
    # 如果需要支持https方式访问,还需要在第三方平台(阿里云)配置二级域名,如下示例:
    www.***.com,wap.***.com,api.***.com
    
    # 下载各域名对应的证书,并在本地配置好nginx.conf文件内容,再上传到服务器目录:/data/docker-nginx/conf
    ssl_certificate /etc/nginx/ssl/www.***.com.pem;
    ssl_certificate_key /etc/nginx/ssl/www.***.com.key;
    
    # 示例2:Mysql
    docker pull mysql:5.7
    
    docker run --name mysql -p 3306:3306
    -v /data/docker-mysql/data:/var/lib/mysql
    -v /data/docker-mysql/my.cnf:/etc/my.cnf
    -e MYSQL_ROOT_PASSWORD=cn_2021_db
    -d mysql:5.7
    
    # 示例3:Redis
    docker pull redis:5.0
    
    docker run --name redis -p 6379:6379
    -v /data/docker-redis/redis.conf:/etc/redis.conf
    -v /data/docker-redis/data:/data
    -d redis:5.0
    /etc/redis.conf --requirepass "MyRedis#2022_" --appendonly yes
    
    # 示例4:项目工程
    # 停止并删除容器
    docker stop cn_shop && docker rm cn_shop
    # 运行(创建)容器,是否挂载目录看实际情况
    docker run --name cn_shop(容器名称) -p 8082:8082 -v /data/cert/pay:/data/cert/pay -d cn_shop(镜像名称)
    
    # 查看挂载目录:
    docker inspect cn_shop(容器名称) | grep Mounts -A 200
    
    # 单独创建容器做目录挂载
    docker run -it --name certpay(容器名称) -v /data/cert/pay:/data/cert/pay:rw centos(镜像名称) /bin/bash
    
    # 查看容器运行中日志
    docker logs -f cn_shop(容器名称)
    

    查看容器日志

    docker logs [options] 容器
    Options:
    	--details        显示更多的信息
    	--follow(-f)     跟踪实时日志
    	--since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
    	--tail string    从日志末尾显示多少行日志, 默认是all
    	--timestamps(-t) 显示时间戳
    	--until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
    # 例子:
    # 查看指定时间后的日志,只显示最后100行:
    $ docker logs -f -t --since="2018-02-08" --tail=100 cn_shop
    # 查看最近30分钟的日志:
    $ docker logs --since 30m cn_shop
    # 查看某时间之后的日志:
    $ docker logs -t --since="2018-02-08T13:23:37" cn_shop
    # 查看某时间段日志:
    $ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" cn_shop
    # 查找所有包含 “error” 的log:
    $ docker logs --since 2021-07-12 cn_shop | grep error
    # 查找所有包含 “Exception” 的log前后10行:
    $ docker logs --since 2021-07-12 cn_shop | grep -C 10 'Exception'
    # 把error日志都写到指定文件:
    $ docker logs -t cn_shop | grep error >> logs_error.txt
    

    进入容器系统

    docker exec -it nginx /bin/bash
    -d : # 分离模式: 在后台运行
    -i : # 交互模式 即使没有附加也保持STDIN 打开
    -t : # 分配一个伪终端
    /bin/bash : # 运行命令 bash shell
    
    # 示例1:进入Redis
    # 方式一:
    docker exec -it 容器名称/容器ID /bin/bash
    root@26a75a859ed3:/data# redis-cli
    # 方式二:
    docker exec -it 容器名称/容器ID redis-cli
    # 方式三:
    docker exec -it 容器名称/容器ID redis-cli -h 127.0.0.1 -p 6379
    
    config get requirepass  # 查看redis密码
    
    # 示例2:进入Mysql
    docker exec -it 容器名称/容器ID bash
    mysql -u用户名 -p密码
    
    # 方法一:这里的cn_2021_db是给新增权限用户设置的密码,%代表所有主机,也可以具体到你的主机ip地址
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'cn_2021_db';
    # 方法二:修改mysql库的user表,将host项从localhost改为%,%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip
    mysql> use mysql;
    mysql> update user set host = '%' where user = 'root';
    mysql> select host, user from user;
    # 重新加载权限数据
    mysql> flush privileges;
    
    #导入数据库:
    mysql> use 库名;
    mysql> source /var/lib/mysql/db.sql  (sql文件存放在挂载的docker-mysql/data目录下)
    
    # 导出数据库:
    docker exec -it 容器名称/容器ID mysqldump -u用户名 -p密码 库名 > /opt/db.sql
    
  • 相关阅读:
    接口测试基础07
    性能测试基础01
    接口测试基础06
    将java list转换为js的数组
    java 网络编程
    java分页
    单例模式
    适配器模式
    抽象工厂模式
    工厂模式
  • 原文地址:https://www.cnblogs.com/zhaojinhui/p/16658543.html
Copyright © 2020-2023  润新知