zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Docker学习笔记06:docker使用之Hello World

Docker笔记学习 06 Hello World 使用
2023-09-14 09:14:48 时间

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

输出Hello world

[root@test ~]# docker  images 
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
nginx                            latest              231d40e811cd        3 weeks ago         126MB
ansible                          2.0                 38a4a7650067        3 months ago        481MB
celery_env                       2.0                 1f642bd32d94        3 months ago        2.01GB
zabbix/zabbix-agent              centos-4.0-latest   c5302a10cad2        3 months ago        228MB
mysql                            5.7                 e1e1680ac726        4 months ago        373MB
zabbix/zabbix-web-apache-mysql   centos-4.0-latest   587c9f53bbbd        4 months ago        474MB
zabbix/zabbix-server-mysql       centos-4.0-latest   7fbda7c3fa2e        4 months ago        333MB
[root@test ~]# 
[root@test ~]# 
[root@test ~]# 
[root@test ~]#  docker run 1f642bd32d94 /bin/echo "Hello world"  --只是实现一次输出
Hello world
[root@test ~]# 
[root@test ~]# docker  ps --这里正在运行的容器中,找不到刚才创建的容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
660644cb03d8        e1e1680ac726        "docker-entrypoint.s…"   39 minutes ago      Up 39 minutes       3306/tcp, 33060/tcp   friendly_mccarthy
49194cec6480        38a4a7650067        "tail -f /dev/null /…"   About an hour ago   Up About an hour                          jolly_tereshkova
5c0a4fb8dc05        231d40e811cd        "/bin/bash"              About an hour ago   Up About an hour    80/tcp                cocky_colden
[root@test ~]# 
[root@test ~]# docker  ps -a --这里可以看到,326fcb6c6b17是非运行状态
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS                 NAMES
326fcb6c6b17        1f642bd32d94        "/bin/echo 'Hello wo…"   3 minutes ago       Exited (0) 3 minutes ago                               elated_panini
660644cb03d8        e1e1680ac726        "docker-entrypoint.s…"   40 minutes ago      Up 40 minutes                    3306/tcp, 33060/tcp   friendly_mccarthy
3e391a12359d        1f642bd32d94        "/bin/bash"              About an hour ago   Exited (137) About an hour ago                         agitated_kalam
49194cec6480        38a4a7650067        "tail -f /dev/null /…"   About an hour ago   Up About an hour                                       jolly_tereshkova
5c0a4fb8dc05        231d40e811cd        "/bin/bash"              About an hour ago   Up About an hour                 80/tcp                cocky_colden
[root@test ~]# 

各个参数解析:

  • docker: Docker 的二进制执行文件。

  • run: 与前面的 docker 组合来运行一个容器。

  • 1f642bd32d94指定要运行的镜像ID,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

  • /bin/echo "Hello world": 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 1f642bd32d94 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

 运行交互式的容器

我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:

[root@test ~]# docker run -i -t 1f642bd32d94 /bin/bash  --1f642bd32d94镜像ID
bash-4.2# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var       zabbix-get-4.0.11-1.el7.x86_64.rpm
boot  etc  lib   media  opt  root  sbin  sys  usr  weblogic
bash-4.2# cd weblogic/
bash-4.2# ls
bea  coherence_3.7  java  logs  modules  patch_ocp371  patch_wls1036  utils  wlserver_10.3
bash-4.2# cd java/
bash-4.2# ls
jdk1.6.0_45
bash-4.2# pwd
/weblogic/java
bash-4.2# cd ..
bash-4.2# cd ..
bash-4.2# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var       zabbix-get-4.0.11-1.el7.x86_64.rpm
boot  etc  lib   media  opt  root  sbin  sys  usr  weblogic
bash-4.2# pwd
/
bash-4.2# cat /proc/version 
Linux version 3.10.0-862.11.6.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Tue Aug 14 21:49:04 UTC 2018
bash-4.2# 
bash-4.2# 
bash-4.2# exit
exit
[root@test ~]# 

各个参数解析:

  • -t: 在新容器内指定一个伪终端或终端。

  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

注意第二行 bash-4.2#,此时我们已进入一个 镜像ID 1f642bd32d94 系统的容器

我们尝试在容器中运行命令 cat /proc/versionls分别查看当前系统的版本信息和当前目录下的文件列表;cd目录切换等命令。

通过运行 exit 命令或者使用 CTRL+D 来退出容器。

启动容器(后台模式) 

使用以下命令创建一个以进程方式运行的容器

[root@test ~]# docker run -d 1f642bd32d94 /bin/sh -c "while true; do echo hello world; sleep 10; done" 
ae31ed600854383ef7f0b9af075081ba1eab03b4542b24f1b228f7619995b789

这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。

首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:

[root@test ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
ae31ed600854        1f642bd32d94        "/bin/sh -c 'while t…"   3 minutes ago       Up 3 minutes                              silly_shaw
3aeb30c31b99        1f642bd32d94        "/bin/bash"              22 hours ago        Up 22 hours                               lucid_heyrovsky
660644cb03d8        e1e1680ac726        "docker-entrypoint.s…"   22 hours ago        Up 22 hours         3306/tcp, 33060/tcp   friendly_mccarthy
49194cec6480        38a4a7650067        "tail -f /dev/null /…"   23 hours ago        Up 23 hours                               jolly_tereshkova
5c0a4fb8dc05        231d40e811cd        "/bin/bash"              23 hours ago        Up 23 hours         80/tcp                cocky_colden

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running/Up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

在容器内使用 docker logs 命令,查看容器内的标准输出:

[root@test ~]# docker logs ae31ed600854 
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
[root@test ~]# docker logs silly_shaw
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world

 

停止容器

我们使用 docker stop 命令来停止容器:

[root@test ~]# docker stop ae31ed600854
ae31ed600854

通过 docker ps 查看,容器已经停止工作:

[root@test ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
3aeb30c31b99        1f642bd32d94        "/bin/bash"              22 hours ago        Up 22 hours                               lucid_heyrovsky
660644cb03d8        e1e1680ac726        "docker-entrypoint.s…"   23 hours ago        Up 23 hours         3306/tcp, 33060/tcp   friendly_mccarthy
49194cec6480        38a4a7650067        "tail -f /dev/null /…"   23 hours ago        Up 23 hours                               jolly_tereshkova
5c0a4fb8dc05        231d40e811cd        "/bin/bash"              23 hours ago        Up 23 hours         80/tcp                cocky_colden

可以看到容器已经不在了。

也可以用下面的命令来停止:

[root@test ~]# docker stop silly_shaw