• DOCKER学习_008:Docker容器的运行最佳实践


    一 容器分类

    容器按用途大致可分为两类:

    服务类容器,如 web server、 database等

    工具类容器,如cur容器, Iredis-cli容器

    通常而言,服务类容器需要长期运行,所以使用 daemon的方式运行;而工作类环境通常是给我们提供一个临时的工作环境,所以一般以runt的方式在前台运行

    容器的短任务和长任务

    长任务就是长期执行的任务,比如容器监听在某个端口上,只要放在后台运行即可(http,nginx,myslq等)

    二 工具类容器

    2.1 简单实验

    如执行一个docker run centos:7 /bin/bash,就是一个短任务,结束终端退出,容器就关闭了

    [root@docker-server3 ~]# docker run -it centos:7 /bin/bash

    Unable to find image 'centos:7' locally
    7: Pulling from library/centos
    ab5ef0e58194: Pull complete 
    Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
    Status: Downloaded newer image for centos:7
    [root@5e82ea0e65f0 /]#

    [root@5e82ea0e65f0 /]# exit
    exit
    [root@docker-server3 ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS               NAMES
    5e82ea0e65f0        centos:7            "/bin/bash"         About a minute ago   Exited (0) 6 seconds ago                       romantic_lewin

    执行完成就退出

    在退出后,容器不会删除,start后依然可以做操作

    [root@docker-server3 ~]# docker start 5e82ea0e65f0

    [root@docker-server3 ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    5e82ea0e65f0        centos:7            "/bin/bash"         About a minute ago   Up 1 second                             romantic_lewin

    再次进入容器进行操作

    [root@docker-server3 ~]# docker exec -it 5e82ea0e65f0 /bin/bash

    注意有的容器可能没有bash终端,可以尝试使用shell终端,即docker exec -it 5e82ea0e65f0 /bin/sh

    就可以正在容器内进行一些测试操作

    [root@5e82ea0e65f0 /]# ps -ef

    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 11:51 pts/0    00:00:00 /bin/bash
    root         14      0  0 11:53 pts/1    00:00:00 /bin/bash
    root         27     14  0 11:54 pts/1    00:00:00 ps -ef

    [root@5e82ea0e65f0 /]# curl www.baidu.com

    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

    [root@5e82ea0e65f0 /]# yum -y install net-tools

    [root@5e82ea0e65f0 /]# ifconfig

    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.0.2  netmask 255.255.255.0  broadcast 192.168.0.255
            ether 02:42:c0:a8:00:02  txqueuelen 0  (Ethernet)
            RX packets 2079  bytes 25943446 (24.7 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2048  bytes 115915 (113.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    发现ip的网段是192.168.0.0/16

    查看dockers配置

    [root@5e82ea0e65f0 /]# exit

    [root@docker-server3 ~]# cat /etc/docker/daemon.json

    {
    "log-driver":"journald",
    "bip":"192.168.0.1/24"
    }

    2.2 docker的终端运行进程

    每个docker容器都有一个默认的进程,但是这个进程拥有最低权限,可以覆盖掉

    例如安装httpd测试

    [root@docker-server3 ~]# docker run -d httpd:2.4

    c57bbb0cae70ea529fbddec7de895cfd8865a55fd1cafb39e81e144dbccceb47

    [root@docker-server3 ~]# docker run -it httpd:2.4 /bin/bash

    root@11494f95ef19:/usr/local/apache2#

    另开一个终端查看

    [root@docker-server3 ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES
    11494f95ef19        httpd:2.4           "/bin/bash"              24 seconds ago       Up 23 seconds               80/tcp              serene_cannon
    c57bbb0cae70        httpd:2.4           "httpd-foreground"       35 seconds ago       Up 34 seconds               80/tcp              serene_williamson

    COMMAND就是容器的终端进程,但是看到第一个进程是我们指定的/bin/bash,覆盖了默认进程httpd-foreground

    2.3 运行一个redis测试

    [root@docker-server3 ~]# docker run -d redis:4.0

    Unable to find image 'redis:4.0' locally
    4.0: Pulling from library/redis
    8ec398bc0356: Pull complete 
    da01136793fa: Pull complete 
    cf1486a2c0b8: Pull complete 
    94baf980b8df: Pull complete 
    08ee3ec1a85f: Pull complete 
    9990996bca2f: Pull complete 
    Digest: sha256:e4adaff7466861d44c2d21178c5b8e8fa7d812172b9747071b08502b37e6ea2a
    Status: Downloaded newer image for redis:4.0
    acd538e93dec6de676610894ee5733caf7f23793d9b15ad72c2447c7436eabd2

    [root@docker-server3 ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    acd538e93dec        redis:4.0           "docker-entrypoint.s…"   14 seconds ago      Up 13 seconds       6379/tcp            zen_raman
    5e82ea0e65f0        centos:7            "/bin/bash"              24 minutes ago      Up 23 minutes                           romantic_lewin

    [root@docker-server3 ~]# docker inspect acd538e93dec|grep IP

    "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "192.168.0.3",
                "IPPrefixLen": 24,
                "IPv6Gateway": "",
                        "IPAMConfig": null,
                        "IPAddress": "192.168.0.3",
                        "IPPrefixLen": 24,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,

    安装一个redis-cli客户端的容器

    进入查看操作

    https://hub.docker.com/r/goodsmileduck/redis-cli

    [root@docker-server3 ~]# docker run -it goodsmileduck/redis-cli:latest /bin/sh

    Unable to find image 'goodsmileduck/redis-cli:latest' locally
    latest: Pulling from goodsmileduck/redis-cli
    050382585609: Pull complete 
    ff9fae49e01a: Pull complete 
    Digest: sha256:dbe86d99f417fd3d18c06ecdadc6f473300e365c711de6b3da7f4598ee6feb1f
    Status: Downloaded newer image for goodsmileduck/redis-cli:latest

     / # redis-cli -h 192.168.0.3 -p 6379 info

    # Server
    redis_version:4.0.14
    redis_git_sha1:00000000
    redis_git_dirty:0
    redis_build_id:198fbb2e6c7e2b25
    redis_mode:standalone
    os:Linux 3.10.0-957.27.2.el7.x86_64 x86_64
    arch_bits:64
    multiplexing_api:epoll
    atomicvar_api:atomic-builtin
    gcc_version:8.3.0
    process_id:1
    run_id:659feb59d1a9210008d21e67952b9c018cb14a46
    tcp_port:6379
    uptime_in_seconds:1411
    uptime_in_days:0
    hz:10
    lru_clock:737553
    executable:/data/redis-server
    config_file:
    
    # Clients
    connected_clients:1
    client_longest_output_list:0
    client_biggest_input_buf:0
    blocked_clients:0
    
    # Memory
    used_memory:849352
    used_memory_human:829.45K
    used_memory_rss:7974912
    used_memory_rss_human:7.61M
    used_memory_peak:849352
    used_memory_peak_human:829.45K
    used_memory_peak_perc:100.12%
    used_memory_overhead:836126
    used_memory_startup:786488
    used_memory_dataset:13226
    used_memory_dataset_perc:21.04%
    total_system_memory:1907953664
    total_system_memory_human:1.78G
    used_memory_lua:37888
    used_memory_lua_human:37.00K
    maxmemory:0
    maxmemory_human:0B
    maxmemory_policy:noeviction
    mem_fragmentation_ratio:9.39
    mem_allocator:jemalloc-4.0.3
    active_defrag_running:0
    lazyfree_pending_objects:0
    
    # Persistence
    loading:0
    rdb_changes_since_last_save:0
    rdb_bgsave_in_progress:0
    rdb_last_save_time:1577794446
    rdb_last_bgsave_status:ok
    rdb_last_bgsave_time_sec:-1
    rdb_current_bgsave_time_sec:-1
    rdb_last_cow_size:0
    aof_enabled:0
    aof_rewrite_in_progress:0
    aof_rewrite_scheduled:0
    aof_last_rewrite_time_sec:-1
    aof_current_rewrite_time_sec:-1
    aof_last_bgrewrite_status:ok
    aof_last_write_status:ok
    aof_last_cow_size:0
    
    # Stats
    total_connections_received:2
    total_commands_processed:1
    instantaneous_ops_per_sec:0
    total_net_input_bytes:31
    total_net_output_bytes:10163
    instantaneous_input_kbps:0.00
    instantaneous_output_kbps:0.00
    rejected_connections:0
    sync_full:0
    sync_partial_ok:0
    sync_partial_err:0
    expired_keys:0
    expired_stale_perc:0.00
    expired_time_cap_reached_count:0
    evicted_keys:0
    keyspace_hits:0
    keyspace_misses:0
    pubsub_channels:0
    pubsub_patterns:0
    latest_fork_usec:0
    migrate_cached_sockets:0
    slave_expires_tracked_keys:0
    active_defrag_hits:0
    active_defrag_misses:0
    active_defrag_key_hits:0
    active_defrag_key_misses:0
    
    # Replication
    role:master
    connected_slaves:0
    master_replid:2f59d8dd98d882302c7da6d302faa6aa0857979a
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:0
    second_repl_offset:-1
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
    # CPU
    used_cpu_sys:1.25
    used_cpu_user:1.14
    used_cpu_sys_children:0.00
    used_cpu_user_children:0.00
    
    # Cluster
    cluster_enabled:0

    也可以在外面执行,指令执行完容器就退出

    [root@docker-server3 ~]# docker run -it goodsmileduck/redis-cli:latest redis-cli -h 192.168.0.3 -p 6379 info

    会得到上面一个相同的结果,但是容器执行完,得到结果后,容器就退出

    [root@docker-server3 ~]# docker ps -a

    CONTAINER ID        IMAGE                            COMMAND                  CREATED              STATUS                          PORTS               NAMES
    66886f9eca2f        goodsmileduck/redis-cli:latest   "redis-cli -h 192.16…"   About a minute ago   Exited (0) About a minute ago                       cocky_cerf
    d798dd31871d        goodsmileduck/redis-cli:latest   "redis-cli -h 192.16…"   About a minute ago   Exited (0) About a minute ago                       zealous_jackson
    281468c747b3        goodsmileduck/redis-cli:latest   "/bin/sh"                5 minutes ago        Exited (0) About a minute ago                       musing_wiles
    acd538e93dec        redis:4.0                        "docker-entrypoint.s…"   28 minutes ago       Up 28 minutes                   6379/tcp            zen_raman
    5e82ea0e65f0        centos:7                         "/bin/bash"              52 minutes ago       Up 50 minutes                                       romantic_lewin

    删除掉不必要的容器

    [root@docker-server3 ~]# docker rm 66886f9eca2f d798dd31871d 281468c747b3

    [root@docker-server3 ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    acd538e93dec        redis:4.0           "docker-entrypoint.s…"   33 minutes ago      Up 33 minutes       6379/tcp            zen_raman
    5e82ea0e65f0        centos:7            "/bin/bash"              58 minutes ago      Up 56 minutes                           romantic_lewin

    短任务执行后,退出就删除容器

    [root@docker-server3 ~]# docker run -it --rm goodsmileduck/redis-cli:latest redis-cli -h 192.168.0.3 -p 6379 info

    [root@docker-server3 ~]# docker ps -a

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    acd538e93dec        redis:4.0           "docker-entrypoint.s…"   35 minutes ago      Up 35 minutes       6379/tcp            zen_raman
    5e82ea0e65f0        centos:7            "/bin/bash"              59 minutes ago      Up 58 minutes                           romantic_lewin

    容器执行完,已经被删除


     博主声明:本文的内容来源主要来自誉天教育晏威老师,由本人实验完成操作验证,需要的博友请联系誉天教育(http://www.yutianedu.com/),获得官方同意或者晏老师(https://www.cnblogs.com/breezey/)本人同意即可转载,谢谢!

  • 相关阅读:
    Android Binder机制中的异步回调
    VS加载项目时报错 尚未配置为Web项目XXXX指定的本地IIS
    下班前码个2013总结吧
    android ListView 在初始化时多次调用getView()原因分析
    Android BindService中遇到的一个小问题
    C#读书笔记之并行任务
    Android系统启动分析(Init->Zygote->SystemServer->Home activity)
    浅析Java异常
    在Ubuntu-14.04.3配置并成功编译Android6_r1源码
    (转)Android Binder设计与实现 – 设计篇
  • 原文地址:https://www.cnblogs.com/zyxnhr/p/12129185.html
Copyright © 2020-2023  润新知