zoukankan      html  css  js  c++  java
  • docker 常用命令

    # 检查Docker信息
    docker info
    
    
    # 搜素镜像
    docker search [OPTIONS] TERM
    
    参数说明:
    Options:
      -f, --filter filter   Filter output based on conditions provided
          --help            Print usage
          --limit int       Max number of search results (default 25)
          --no-index        Don't truncate output
          --no-trunc        Don't truncate output
    
    -f, --filter filter: 过滤输出的内容;
    --limit int:指定搜索内容展示个数;
    --no-index: 不截断输出内容;
    --no-trunc:不截断输出内容;
    
    [root@VM_0_15_centos ~]# docker search mysql  --no-trunc  --limit=5 
    NAME                  DESCRIPTION                                                                                           STARS               OFFICIAL            AUTOMATED
    mysql                 MySQL is a widely used, open-source relational database management system (RDBMS).                    9570                [OK]                
    mysql/mysql-server    Optimized MySQL Server Docker images. Created, maintained and supported by the MySQL team at Oracle   702                                     [OK]
    mysql/mysql-cluster   Experimental MySQL Cluster Docker images. Created by the MySQL team at Oracle                         69                                      
    bitnami/mysql         Bitnami MySQL Docker Image                                                                            39                                      [OK]
    circleci/mysql        MySQL is a widely used, open-source relational database management system (RDBMS).                    19                                      
    
    
    # 下载镜像
    
    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    
    name 镜像名称后面可以跟上镜像标签或者镜像摘要
    如果没有指定镜像标签,docker默认使用:latest
    
    拉取Ubuntu 14.04镜像
    docker pull ubuntu:14.04
    
    14.04: Pulling from library/ubuntu
    5a132a7e7af1: Pull complete
    fd2731e4c50c: Pull complete
    28a2f68d1120: Pull complete
    a3ed95caeb02: Pull complete
    Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
    Status: Downloaded newer image for ubuntu:14.04
    
    docker已经帮我们打印出了该镜像的摘要:
    sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
    
    
    通过摘要方式拉取镜像:(只需要将摘要替换掉镜像标签tag即可)
    docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
    
     
    下面的示例命令就会拉取最新的镜像文件,等同于:docker pull debian:latest
    docker pull debian
    
    
    下载一个 Mysql 5.7 镜像
    docker pull mysql:5.7
    
    验证一下,本地是否存在 Mysql5.7 的镜像,运行命令:
    docker images
    
    
    从一个镜像地址:myregistry.local:5000,拉取镜像文件:testing/test-image 
    docker pull myregistry.local:5000/testing/test-image
    
    
    从阿里云的Docker Hub 上pull一个MySQL的image.
    docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7
     
     
    # Docker 查看镜像信息 
    
    列出本机已有的镜像:
    docker images
    
    或:
    docker image ls
    
    [root@VM_0_15_centos ~]# docker image ls 
    REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
    jumpserver/jms_all                                   latest              5f257513bfe3        5 days ago          1.48GB
    registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql   5.7                 ec7e75e5260c        4 years ago         360MB
    
    REPOSITORY: 来自于哪个仓库;
    TAG: 镜像的标签信息,比如 5.7、latest 表示不同的版本信息;
    IMAGE ID: 镜像的 ID, 如果您看到两个 ID 完全相同,那么实际上,它们指向的是同一个镜像,只是标签名称不同罢了;
    CREATED: 镜像最后的更新时间;
    SIZE: 镜像的大小
    
    
    # 使用 tag 命令为镜像添加标签
    
    为 registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql 镜像,添加新的镜像标签 andy_mysql:5.7 。
    docker tag registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7 andy_mysql:5.7
    
    [root@VM_0_15_centos ~]# docker image ls 
    REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
    jumpserver/jms_all                                   latest              5f257513bfe3        5 days ago          1.48GB
    andy_mysql                                           5.7                 ec7e75e5260c        4 years ago         360MB
    registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql   5.7                 ec7e75e5260c        4 years ago         360MB
    
    可以看到,本地多了一个 andy_mysql:5.7 的镜像。而且 andy_mysql:5.7  和 registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5.7 的镜像 ID 是一模一样的,说明它们是同一个镜像,只是别名不同而已。
    docker tag 命令功能更像是, 为指定镜像添加快捷方式一样。
    
    
    # 使用 inspect 命令查看镜像详细信息
    
    docker inspect andy_mysql:5.7 
    
    
    # 导出镜像
    直接导出镜像文件:
    docker save -o ubuntu_demo.tar chasonlee/ubuntu_demo
    
    -o参数后面接着输出文件名。
    chasonlee/ubuntu_demo是需要导出的镜像名。
    注意:这里只是导出一个静态的镜像,根据当前镜像启动的容器环境并不能直接导出,如果需要迁移当前容器的环境,还需要先使用commit命令自行制作一个镜像再导出。
    
    # 导入镜像
    导入镜像:
    docker load -i ubuntu_demo.tar
    
    导入后可以即可通过docker images查看镜像。
    
    
    # 删除镜像
    
    通过如下两个都可以删除镜像 
    docker rmi [image]
    或者:
    docker image rm [image]
    
    支持的子命令如下:
    -f, -force: 强制删除镜像,即便有容器引用该镜像。但是,我们一般不推荐这样暴力的做法,正确的做法应该是:1.先删除引用这个镜像的容器。2.再删除这个镜像。
    -no-prune: 不要删除未带标签的父镜像;
    
    当同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中指定的标签而已,并不会影响原始的那个镜像文件。
    
    
    # 清理镜像
    
    我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:
    docker image prune
    
    它支持的子命令有:
    -a, --all: 删除所有没有用的镜像,而不仅仅是临时文件;
    -f, --force:强制删除镜像文件,无需弹出提示确认;
    
    
    # docker run 创建容器
    
    创建容器
    -i,-interactive    交互式
    -t,-tty    分配一个伪终端
    -d,-detach    运行容器到后台
    -e,-env    设置环境变量
    -p(小写),-publish list    发布容器端口到主机
    -P(大写),-publish -all    发布容器所有EXPOSE的端口到宿主机随机端口
    --name string    指定容器名称
    -h,-hostname    指定容器主机名
    -ip string    指定容器IP,只能用于自定义网络
    -network    连接容器到一个网络
    -v,-volume list    绑定挂载一个卷
    -restart string    容器退出时重启策略,默认no,可选值:【always|on-failure】
    
    
    容器资源限制
    -m,--memory    容器可以使用的最大内存量
    -memory-swap    允许交换到磁盘的内存量
    -memory-swappiness=<0-100>    容器使用swap分区交换的百分比(0-100,默认为-1--oom-kill-disable    禁止OOM killer
    --cpus    可以使用的cpu数量
    --cpuset-cpus    限制容器使用特定的cpu核心,如(0-3, 0,1--cpu-shares    cpu共享(相对权重)
    
    
    docker run 创建容器使用
    docker run -it创建一个容器,并进入容器
    [root@VM_0_15_centos ~]# docker run -it nginx
    
    docker run -d创建一个容器,并在后台运行
    [root@VM_0_15_centos ~]# docker run -it  -d nginx
    
    docker run -e创建一个容器,并设置环境变量
    [[root@VM_0_15_centos ~]# docker run -it  -d  -e test=123456 nginx
    
    docker run -it -d -p80:80 创建一个容器,并设置本机端口对应容器端口
    [root@VM_0_15_centos ~]# docker run -it  -d  -p80:80 nginx
    
    docker run -it -name webnginx 创建一个容器,并设置一个容器的名称
    [root@VM_0_15_centos ~]# docker run -it  -d  --name webnginx  nginx
    
    docker run -it -d -P 创建一个容器,并随机分配一个本机端口对应容器端口
    [root@VM_0_15_centos ~]# docker run -it -d --name web1 -P nginx
    
    
    docker 容器资源限制
    内存限制-m参数,允许容器最多使用500M内存和100M的swap,并禁用OOM killer
    
    [root@VM_0_15_centos ~]# docker run -it -d --name nginx03 --memory="500m" --memory-swap="100m" --oom-kill-disable nginx
    [root@VM_0_15_centos ~]# docker stats nginx03     #查看运行状态
    
    
    cpu限额 ,允许容器最多使用一个的cpu
    [root@test-1 ~]# docker run -it -d --name nginx04 --cpus="1" nginx
    
    允许容器最多使用50%的cpu
    [root@test-1 ~]# docker run -it -d --name nginx05 --cpus=".5" nginx
    
    
    # 查看容器的挂载目录
    
    docker inspect container_name | grep Mounts -A 20
    docker inspect container_id | grep Mounts -A 20
    
    
    # 挂载目录
    当我们需要访问宿主机的数据时,就需要把宿主机目录挂载到容器中,在新建容器时使用docker run -v参数即可挂载目录,例如:
    docker run -dit --name my_ubuntu -v /hdd:/workspace/hdd chasonlee/ubuntu_demo:latest
    
    -v代表挂载目录,宿主机目录和容器目录用:分开,如果需要挂载多个目录,继续多写几个-v及其对应目录即可。
    /hdd是宿主机目录,必须是绝对路径。
    /workspace/hdd是容器里面映射的目录,必须是绝对路径,如果目录不存在会自动创建。
    
    
    # Docker 快速安装与搭建 Mysql 环境
    
    下载 Mysql 镜像
    docker pull mysql:5.7
    
    先以简单的方式启动:
    
    docker run -d 
    --name mysql 
    -p 4406:3306 
    -e MYSQL_ROOT_PASSWORD=123456 
    mysql:5.7
    
    命令执行完成后,你也可以通过 docker ps 命令来确认下容器是否启动成功。若成功,我们需要将容器中的目录文件复制到宿主机中,分别包括:
    
    mysql 配置文件;
    数据存储目录,以便挂载(PS: 若不挂载到宿主机,每次启动容器数据都会丢失)
    将容器中的 mysql 配置文件复制到宿主机中指定路径下,路径你可以根据需要,自行修改
    docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config/mysqld.cnf
    
    将容器中的 mysql 存储目录复制到宿主机中
    docker cp mysql:/var/lib/mysql/ /usr/local/docker/mysql/data
    
    完成这一切后,让我们将刚刚运行的容器删除掉。
    docker rm -f mysql
    
    接下来,正式运行 Mysql 容器:
    docker run -idt 
    --name mysql 
    -p 4406:3306 
    -v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf 
    -v /usr/local/docker/mysql/data/mysql:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=123456 
    mysql:5.7
    
    其他不变,额外添加了两个挂载子命令:
    
    -v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/docker/mysql/config/mysqld.cnf 文件上;
    -v /usr/local/docker/mysql/data:/var/lib/mysql: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/docker/mysql/data 目录下。
    
    
    # Docker 安装搭建 Redis 环境
    
    下载 Redis 镜像
    docker pull redis:alpine
    
    运行 Redis 容器
    docker run -p 6379:6379 
    --name redis  
    -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf 
    -v /usr/local/docker/redis/data:/data 
    -d redis:alpine redis-server /etc/redis/redis.conf --appendonly yes
    
    连接 redis:
    docker run -it redis:alpine redis-cli -h 172.17.0.1
    
    
    # Docker 快速安装与搭建 MongoDB 环境
    
    下载 MongoDB 镜像
    docker pull mongo:4
    
    运行 mongoDB 镜像 
    docker run -d 
    --name mongo 
    -v /usr/local/docker/mongo/configdb:/data/configdb 
    -v /usr/local/docker/mongo/data:/data/db 
    -p 27017:27017 
    mongo:4 
    --auth
    
    添加管理员账号
    docker exec -it mongo mongo admin
    
    然后,创建一个拥有最高权限 root 账号
    db.createUser({ user: 'admin', pwd: '123456', roles: [ { role: "root", db: "admin" } ] });
    
    用新创建的 root 账户连接,测试一下
    docker run -it --rm --link mongo:mongo mongo mongo -u admin -p 123456 --authenticationDatabase admin mongo/admin
    
    
    # 启动停止容器
    
    下面的 my_ubuntu 可以改成 CONTAINER ID
    
    容器停止时,可以启动容器:
    docker start my_ubuntu
    
    容器正在运行时,也可以停止容器:
    docker stop my_ubuntu
    
    
    # 删除容器
    
    下面的 my_ubuntu 可以改成 CONTAINER ID
    
    当容器已经停止时,可以直接删除容器:
    docker rm my_ubuntu
    
    当容器还在运行,可以强制删除容器:
    docker rm -f my_ubuntu
    
    如果当前有很多已经停止的容器,一个命令即可清空所有已停止容器:
    docker container prune
    
    
    # 基于已有的容器,创建一个新的镜像
    
    通过如下命令来创建:
    docker container commit
    
    支持的子命令如下:
    -a, --author="": 作者信息;
    -c, --change=[]: 可以在提交的时候执行 Dockerfile 指令,如 CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、USER、VOLUME、WORIR 等;
    -m, --message="": 提交信息;
    -p, --pause=true: 提交时,暂停容器运行
     
    [root@VM_0_15_centos ~]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
    671a82a3b2de        mysql:5.7           "docker-entrypoint.s…"   About an hour ago   Up About an hour    33060/tcp, 0.0.0.0:4406->3306/tcp   mysql
    [root@VM_0_15_centos ~]# 
    [root@VM_0_15_centos ~]# docker container commit -m "add base DB data" -a "liangguojun" 671a82a3b2de  testmysql:1.0
    sha256:e05f32ea8c9e974beb545c45a14ac321f584bec89725792ad16ed78c8883fd9a
    [root@VM_0_15_centos ~]#
    [root@VM_0_15_centos ~]# docker images
    REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
    testmysql            1.0                 e05f32ea8c9e        7 seconds ago       448MB
    jumpserver/jms_all   latest              5f257513bfe3        5 days ago          1.48GB
    mysql                5.7                 a4fdfd462add        11 days ago         448MB
    nginx                latest              9beeba249f3e        2 weeks ago         127MB
     
  • 相关阅读:
    修改版的jsonView,加入了PHP的反序列化
    CSBlogV2公测发布,欢迎大家下载试用体验.
    C#里使用Oracle提供的Oracle.DataAccess 返回包里的记录集游标,含Oralce里的分页包代码
    用一个示例方法来初始理解ManualResetEvent的用法。
    Head First 设计模式阅读所得:策略模式(Strategy Pattern) 接口的用处(之一)
    延时至调用时获取被反序列化数据的类型的实现
    权限设计中的"依赖颠倒"
    CSCMSV1终于上线内测了[广告贴]
    Windows Service 使用参数安装DEMO,可使用控制台启动方式进行调试,服务安装完后立即启动
    使用assembly.GetExportedTypes();方法时引发动:态程序集中不支持已调用的成员的异常
  • 原文地址:https://www.cnblogs.com/liang545621/p/12975594.html
Copyright © 2011-2022 走看看