Docker学习笔记06:docker使用之Hello World
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/version和ls分别查看当前系统的版本信息和当前目录下的文件列表;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
相关文章
- Docker学习笔记
- Docker 学习笔记
- centos ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
- docker 每次都得source /etc/profile以及如何查看Docker容器环境变量、向容器传递环境变量
- Docker 入门 到部署Web 程序- (阿里面试常用的docker命令和优点)
- 【云原生之Docker实战】使用docker部署nginx服务
- 【云原生之Docker实战】使用docker部署Wiznote私人笔记系统
- docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at 。。。
- 第一本docker书 学习笔记(一)
- Docker----执行docker pull 下载镜像时报dial tcp: lookup registry-1.docker.io on 192.168.1.1:53: no such host错
- Docker 容器学习笔记
- 结合实践总结docker 安装 mysql5.7
- 17、笔记-docker详细教程-docker镜像的常用命令
- Docker学习笔记21:Docker数据管理
- Docker学习笔记20:docker使用之资源汇总
- Docker学习笔记16:docker实例之安装 Nginx
- Docker学习笔记03:linux操作系统内核升级
- Docker学习笔记02:Docker与虚拟化
- Docker学习笔记(三):查看docker 拉取的镜像位置和位置参数