zoukankan      html  css  js  c++  java
  • docker镜像与命令

    目录

    1.1 docker 镜像 

    1.2 docker 命令

    1.1 docker镜像

    1. 什么是docker镜像?

      docker镜像不包含Linux内核而有精简的Linux操作系统

      •   大白话

      •   我么安装操作系统ISO就可以理解为用C语言写的安装包(例如,微信安装包)

      •   我们安装操作系统就好像我们安装微信一样

      •   docker镜像也像ISO安装包,但是因为操作系统已将安装Linux内核,所以安装包可以直接使用

             ( 这个安装包只有Linux文件系统,而内核直接使用Linux系统本身就行)

      docker 镜像是docker容器的静态视角,docker容器是docker镜像的运行状态

      •   程序和进程的区别

      •   docker镜像--->程序(存储在硬盘里的代码)

      •   进程-----> 把我们硬盘里的代码加载到内存运行

      容器是docker镜像的引用,如何docker镜像删除,次镜像创建的容器也会失效

    2.容器读写层(本质)

      1. 容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时,会先从镜像里要写的文件复制到容器自己的文件系统中(读写层)。

      2. 如果容器删除了,最上面的读写层也就删除了,改动也就丢失了

      3. 所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作的,并不会修改镜像的源文件

      4. 若想持久化这些改动,可以通过docker commit 将容器保存成一个新镜像

      

       

       

    3.查看docker容器的工作目录

     1 [root@linux-node4 diff]# docker run -itd --name=web1 -p 192.168.56.14:81:80 nginx:latest
     2 [root@linux-node4 diff]# docker inspect web1
     3 [
     4     {
     5         # 存储驱动
     6         "GraphDriver": {
     7             "Data": {
     8                 "LowerDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13-init/diff:/var/lib/docker/overlay2/09fa1314e484781dfc1fb25a6cf5df2502fe35dea9025a373a3cb0202732ccce/diff:/var/lib/docker/overlay2/162ec5c9be56e5d718011c09ed087eda04b755e1a68bd1953c60f175e6635e68/diff:/var/lib/docker/overlay2/7c1b27ff59a397ae7d6bd106db579e90476f57bb1ecef9fcb1a6f1ad5ce43b7c/diff",
     9                 "MergedDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/merged",
    10                 "UpperDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/diff",
    11                 "WorkDir": "/var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13/work"
    12             },
    13             "Name": "overlay2"
    14         },
    15         "NetworkSettings": {
    16             "Ports": {
    17                 "80/tcp": [
    18                     {
    19                         "HostIp": "192.168.56.14",
    20                         "HostPort": "81"
    21                     }
    22                 ]
    23             },
    24             "MacAddress": "02:42:ac:11:00:02",
    25             "Networks": {
    26                 "bridge": {
    27                     "Gateway": "172.17.0.1",
    28                     "IPAddress": "172.17.0.2",
    29                     "IPPrefixLen": 16,
    30                 }
    31             }
    32         }
    33     }
    34 ]
    35 [root@linux-node4 diff]# cd /var/lib/docker/overlay2/51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13
    36 [root@linux-node4 51692869029f819494bb402dc70aa2869b8d1848c3b65c549a010a260e44cc13]# ll    # 查看docker工作目录都哪些内容
    37 diff  link  lower  merged  work
    38 diff      # 读写层的差异(在读写层做的操作由这个容器单独管理)
    39 merged    # 引用docker进行中的文件系统
    40 work      # 项目工作目录
    View Code

    1.2 常用命令

    1. docker 普通命令

     1 docker ps                 # 仅列出当前运行的容器
     2 docker ps -l              # 列出最新创建得容器
     3 docker ps -a              # 列出素有容器(包括 未运行的)
     4 docker inspect web4       # 列出指定容器的详细信息
     5 
     6 #### 持久化容器
     7 
     8 docker exec -it web4 bash                     # 进入容器web4中
     9 touch 1.txt 2.txt                             # 对容器进行修改
    10 docker commit web4 nginx:web4                 # 将修改后的web4容器提交为一个新镜像 nginx:web4
    11 docker images                                 # 可以看到 多了一个 TAG标记为 web4 的镜像
    12 docker run -d --name web4-1 nginx:web4        # 使用刚刚提交的镜像web4创建一个容器web4-1
    13 docker exec -it web4-1 bash                   # 进入web4-1的bash环境
    14 
    15 #### 从宿主机复制文件到docker容器
    16 docker cp nginx.tar web4-1:/home              # 将宿主机nginx.tar文件拷贝到容器web4-1的/home目录中
    17 docker exec -it web4-1 ls /home               # 在容器web4-1中执行 "ls /home" 命令
    18 
    19 #### 容器常用查询命令
    20 docker logs web4-1                            # 查看web4-1中控制台日志
    21 docker port 55f870061ed9                      # 查看指定容器端口映射
    22 docker top 00f7ddc96622                       # 查看容器中有哪些进程
    23 docker stats 00f7ddc96622                     # 查看容器资源使用情况
    24 
    25 ##### 启动、停止、删除 容器
    26 docker ps -a                                  # 列出素有容器(包括 未运行的)
    27 docker start web                              # 启动容器web      
    28 docker stop web                               # 停止容器web
    29 docker rm web                                 # 删除容器web

    2. 镜像常用命令

    1 [root@linux-node4 diff]# docker help                           # 查看docker帮助
    2 [root@linux-node4 diff]# docker image --help                   # 查看 docker中 镜像相关帮助
    3 [root@linux-node4 diff]# docker image ls                       # 查看当前所有镜像
    4 [root@linux-node4 diff]# docker image inspect nginx            # 查看指定镜像(nginx镜像)详细信息
    5 [root@linux-node4 diff]# docker pull nginx:1.14                # 下载指定版本镜像 nginx
    6 [root@linux-node4 diff]# docker image rm nginx:1.14            # 删除nginx 1.14版本
    7 [root@linux-node4 diff]# docker image save nginx > nginx.tar   # 导出niginx镜像
    1 -d   # 后台运行容器,并返回容器ID;
    2 -i   # 以交互模式运行容器,通常与 -t 同时使用;
    3 -t   # 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    4 -P   # 随机端口映射,容器内部端口随机映射到主机的高端口
    5 -p   # 指定端口映射,格式为:主机(宿主)端口:容器端口
    6 --name="nginx-lb"   # 为容器指定一个名称;
    7 --dns 8.8.8.8       # 指定容器使用的DNS服务器,默认和宿主一致;
    8 
    9 docker run 常用参数
    docker run 常用参数
     1 --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
     2 
     3 -h "mars": 指定容器的hostname;
     4 
     5 -e username="ritchie": 设置环境变量;
     6 
     7 --env-file=[]: 从指定文件读入环境变量;
     8 
     9 --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
    10 
    11 -m :设置容器使用内存最大值;
    12 
    13 --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
    14 
    15 --link=[]: 添加链接到另一个容器;
    16 
    17 --expose=[]: 开放一个端口或一组端口;
    18 
    19 --volume , -v:    绑定一个卷
    20 
    21 -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
    22 
    23 docker run其他参数
    docker run 其他参数

    3. 运行容器常用命令

    [root@linux-node4 ]# docker run --help                              # 查看创建容器帮助
    [root@linux-node4 ]# docker run -it centos                          # 创建centos镜像并进入终端
    [root@linux-node4 ]# docker run -d nginx                            # 后台启动nginx容器
    [root@linux-node4 ]# docker stop 6bb09dce461f                       # 关闭一个容器
    [root@linux-node4 ]# docker ps -l                                         # 查看最近运行的容器
    [root@linux-node4 ]# docker run -itd centos                         # 启用一个伪终端守护centos容器
    [root@linux-node4 ]# docker container run -d --name web3 -e test=123456 -p 8800:80 -h webhostname --restart always nginx
    -d                   # 后台启动nginx容器
    --name web3          # 自定义容器名字(默认会是一段随机字符串)
    -e test=123456       # 启动容器添加变量 test=123456 (echo $test)
    -p 8800:80           # 宿主机的8800端口映射到docker容器的80端口中
    -h webhostname       # docker容器主机名 (a300f394af88)
    --restart always     # 宿主机重启自动拉起这个docker容器
    nginx                # 使用这个nginx镜像启动容器
    注:http://192.168.56.12:8800/     访问这个docker  nginx
    [root@linux-node4 ]# docker logs web                                 # 查看上面启动的web容器的日志
    [root@linux-node4 ]# docker exec -it web bash                        # 进入容器web
     1 [root@linux-node1 /]# docker run -itd nginx          # 在后台启动一个docker容器
     2 [root@linux-node1 /]# docker inspect 5a3ad030a621    # 查看docker运行容器的详细信息
     3 [root@linux-node1 /]# curl http://172.17.0.2         # 
     4 [root@linux-node1 /]# docker run -itd --name=web2 -p 192.168.56.11:8800:80 nginx
     5 使用--itd参数(指定后台启动这个容器),--name=web2(指定这个web容器的名字叫web2) 
     6 
     7         
     8 -d:   后台运行容器,并返回容器ID;
     9 -i:   以交互模式运行容器,通常与 -t 同时使用;
    10 -t:   为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    11 -P:   随机端口映射,容器内部端口随机映射到主机的高端口
    12 -p:   指定端口映射,格式为:主机(宿主)端口:容器端口
    13 --name="nginx-lb":   为容器指定一个名称
    14 --dns 8.8.8.8:   指定容器使用的DNS服务器,默认和宿主一致;
    15 [root@linux-node1 /]# docker exec -it c9b7a480ee68 bash    # 进入docker环境
  • 相关阅读:
    bzoj3160(FFT+回文自动机)
    bzoj2555(后缀自动机+LCT)
    luogu P4299 首都
    Annihilate(SA)
    [FJOI2016]神秘数(脑洞+可持久化)
    [ZJOI2016]大森林(LCT)
    bzoj3756pty的字符串(后缀自动机+计数)
    UVa 11582 Colossal Fibonacci Numbers! (斐波那契循环节 & 快速幂)
    UVa 12563 Jin Ge Jin Qu hao (0-1背包)
    UVa 437 The Tower of Babylon (DAG最长路)
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12608698.html
Copyright © 2011-2022 走看看