一 容器分类

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

服务类容器,如 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
: 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: "/bin/bash" About a minute ago Exited () 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: "/bin/bash" About a minute ago Up 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 : pts/ :: /bin/bash
root : pts/ :: /bin/bash
root : pts/ :: ps -ef

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

<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-><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=<UP,BROADCAST,RUNNING,MULTICAST>  mtu
inet 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255
ether ::c0:a8:: txqueuelen (Ethernet)
RX packets bytes (24.7 MiB)
RX errors dropped overruns frame
TX packets bytes (113.1 KiB)
TX errors dropped overruns carrier collisions lo: flags=<UP,LOOPBACK,RUNNING> mtu
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen (Local Loopback)
RX packets bytes (0.0 B)
RX errors dropped overruns frame
TX packets bytes (0.0 B)
TX errors dropped overruns carrier collisions

发现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" seconds ago Up seconds /tcp serene_cannon
c57bbb0cae70 httpd:2.4 "httpd-foreground" seconds ago Up seconds /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…" seconds ago Up seconds /tcp zen_raman
5e82ea0e65f0 centos: "/bin/bash" minutes ago Up minutes romantic_lewin

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

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

安装一个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
: 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.
redis_git_sha1:
redis_git_dirty:
redis_build_id:198fbb2e6c7e2b25
redis_mode:standalone
os:Linux 3.10.-957.27..el7.x86_64 x86_64
arch_bits:
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:8.3.
process_id:
run_id:659feb59d1a9210008d21e67952b9c018cb14a46
tcp_port:
uptime_in_seconds:
uptime_in_days:
hz:
lru_clock:
executable:/data/redis-server
config_file: # Clients
connected_clients:
client_longest_output_list:
client_biggest_input_buf:
blocked_clients: # Memory
used_memory:
used_memory_human:.45K
used_memory_rss:
used_memory_rss_human:7.61M
used_memory_peak:
used_memory_peak_human:.45K
used_memory_peak_perc:100.12%
used_memory_overhead:
used_memory_startup:
used_memory_dataset:
used_memory_dataset_perc:21.04%
total_system_memory:
total_system_memory_human:.78G
used_memory_lua:
used_memory_lua_human:.00K
maxmemory:
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:9.39
mem_allocator:jemalloc-4.0.
active_defrag_running:
lazyfree_pending_objects: # Persistence
loading:
rdb_changes_since_last_save:
rdb_bgsave_in_progress:
rdb_last_save_time:
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-
rdb_current_bgsave_time_sec:-
rdb_last_cow_size:
aof_enabled:
aof_rewrite_in_progress:
aof_rewrite_scheduled:
aof_last_rewrite_time_sec:-
aof_current_rewrite_time_sec:-
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size: # Stats
total_connections_received:
total_commands_processed:
instantaneous_ops_per_sec:
total_net_input_bytes:
total_net_output_bytes:
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:
sync_full:
sync_partial_ok:
sync_partial_err:
expired_keys:
expired_stale_perc:0.00
expired_time_cap_reached_count:
evicted_keys:
keyspace_hits:
keyspace_misses:
pubsub_channels:
pubsub_patterns:
latest_fork_usec:
migrate_cached_sockets:
slave_expires_tracked_keys:
active_defrag_hits:
active_defrag_misses:
active_defrag_key_hits:
active_defrag_key_misses: # Replication
role:master
connected_slaves:
master_replid:2f59d8dd98d882302c7da6d302faa6aa0857979a
master_replid2:
master_repl_offset:
second_repl_offset:-
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen: # 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:

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

[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 () About a minute ago cocky_cerf
d798dd31871d goodsmileduck/redis-cli:latest "redis-cli -h 192.16…" About a minute ago Exited () About a minute ago zealous_jackson
281468c747b3 goodsmileduck/redis-cli:latest "/bin/sh" minutes ago Exited () About a minute ago musing_wiles
acd538e93dec redis:4.0 "docker-entrypoint.s…" minutes ago Up minutes /tcp zen_raman
5e82ea0e65f0 centos: "/bin/bash" minutes ago Up 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…" minutes ago Up minutes /tcp zen_raman
5e82ea0e65f0 centos: "/bin/bash" minutes ago Up 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…" minutes ago Up minutes /tcp zen_raman
5e82ea0e65f0 centos: "/bin/bash" minutes ago Up minutes romantic_lewin

容器执行完,已经被删除


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

最新文章

  1. ASP.NET MVC3中Controller与View之间的数据传递总结
  2. OAF_开发系列07_实现OAF下拉菜单的上下联动Poplist Synchor(案例)
  3. Ruby注意事项
  4. C++之路进阶——bzoj2199(奶牛议会)
  5. python 虎扑注册检查脚本
  6. C++ 我想这样用(六)
  7. 转: Android开发中的MVP架构详解(附加链接比较不错)
  8. &lt;script type=&quot;text/html&quot;&gt;&lt;/script&gt; js模版使用
  9. 【HDOJ】3309 Roll The Cube
  10. Backbone入门教程
  11. cocos web 多端口运行
  12. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
  13. Asp.net:上传文件超过了最大请求长度
  14. Xutils简
  15. lesson6-图像分割-小象c
  16. Route学习笔记之Area的Route注册
  17. sql中非存储过程定义参数并使用
  18. 原生DOM操作vs框架虚拟DOM比较
  19. ios8推送问题
  20. Linux:Centos7升级内核(转)

热门文章

  1. 通过反射拿到构造方法 Day25
  2. 卸载ROS命令
  3. re模块下的常用方法
  4. laravel拓展validator验证
  5. Linux 运算符
  6. laravel 增加不存在数据库的字段
  7. pytorch 动态调整学习率 重点
  8. Laravel获取所有的数据库表及结构
  9. pip 将 某包指定到某目录 安装
  10. python yield 和 return 对比分析