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/)本人同意即可轉載,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章