docker 003 基本操作

docker 003 入门

学习 docker 的基本工作流:创建-管理-停止-删除

这里以

确保 docker 已正常运行

# 查看容器和镜像的数量,docker 使用的驱动及基本配置信息
$ docker info
Client:
 Debug Mode: false

Server:
 Containers: 1
  Running: 0
  Paused: 0
  Stopped: 1
 Images: 1
 Server Version: 19.03.5
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
 runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 992.4MiB
 Name: docker02
 ID: 23TL:WD67:K4HB:U2JK:2U5R:VSSQ:2VDM:M2M4:VZIK:Z5FW:5RWZ:RHN7
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

运行第一个容器

# 运行容器 ubuntu,并使用为终端登录进容器内,运行/bin/bash启动一个 bash shell
# -i : 保证容器中 stdin 是开启的
# -t : 为创建的容器分配一个伪tty终端
$ docker run -i -t ubuntu /bin/bash
Unable to find image ‘ubuntu:latest‘ locally
latest: Pulling from library/ubuntu
5c939e3a4d10: Pull complete
c63719cdbe7a: Pull complete
19a861ea6baf: Pull complete
651c9d2d6c4f: Pull complete
Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
Status: Downloaded newer image for ubuntu:latest
[email protected]:/#  # 这里已经是容器内部的 shell

# 容器内部执行 hostname
[email protected]:/# hostname
b0558195ad79   # 这里主机名就是容器 ID

# 查看 hosts 文件,本地有一个容器的 IP 和主机名的解析
[email protected]:/# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	b0558195ad79

# 查看运行的进程
[email protected]:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  18496  2116 pts/0    Ss   02:01   0:00 /bin/bash
root        20  0.0  0.1  34388  1460 pts/0    R+   02:07   0:00 ps aux

# 安装 iproute2
[email protected]:/# apt-get update
[email protected]:/# apt-get install iproute2

# 查看容器网络配置
[email protected]:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
9: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
# 可以看到有一个回环接口,还有一个标砖 eth0网络接口,和宿主机一样

我们可以继续在容器中进行各种操作,当所有工作结束后,输入 exit 就可以退出容器,回到宿主机。而这个容器也会停止运行,只有/bin/bash 处于运行状态的时候,容器才会处于运行状态,一旦退出,/bin/bash 命令结束,容器也就响应的停止了。

但这时候,容器还是存在的,可以使用 docker ps -a 查看当前系统中容器的列表,如下:

# 查看宿主机内所有容器,包括已停止运行的
# 默认情况下 docker ps 只能看到正在运行的容器
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                           PORTS               NAMES
b0558195ad79        ubuntu              "/bin/bash"         53 minutes ago      Exited (0) 12 seconds ago                            vibrant_germain

注意: 有三种方式唯一指定容器

  • 短 UUID
  • 长 UUID
  • 容器名称

容器命名

docker 会为每一个容器自动生产一个随机的名称,例如上面的vibrant_germain,如果想自己指定容器名称,可以使用 --name 参数,如下:

# 运行容器并指定容器名称
$ docker run --name ubuntu001 -i -t ubuntu /bin/bash

# 查看容器信息
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ffeedd9447b5        ubuntu              "/bin/bash"         16 seconds ago      Up 15 seconds                           ubuntu001

容器的名称只能包含以下字符:

  • 大小写字母
  • 数字 0-9
  • 下划线
  • 远点
  • 横线(减号)

在很多 docker 命令中,容器名称可以替代容器 ID,容器名称也可以让我们更容易分辨容器。推荐使用容器名称,以方便容器的管理。

注意 :容器名称必须唯一,如果试图创建两个名称相同的容器,会命令失败,如果要使用已经存在的名称,可以使用 docker rm 命令先将已有的同名容器删除,在创建。

# 删除容器
# 使用容器 ID
docker rm b0558195ad79 

# 使用容器名称
docker rm ubuntu001

重启启动已停止的容器

# 使用容器名称启动指定容器
$ docker start ubuntu001

# 使用容器 ID 启动指定容器
$ docker start 74d08be02091

# 使用 restart 重新启动容器
$ docker restart ubuntu001

重新登录到容器内

# 登录到容器内
$ docker attach ubuntu001

注意:因为容器内部没有单独运行的程序,所以四处退出容易后,容器会再次停止运行

创建守护式容器

前面的操作使用的都是交互式运行的容器,我们还可以创建守护式容器。守护式容器没有交互式会话,适合运行应用程序和服务。大多数时候,我们需要使用守护式运行我们的容器。

示例:

# 创建一个守护式容器的示例
# -d 参数: 让容器后台运行,并打印容器 ID
$ docker run --name ubuntu02 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
d326b1bbd1b718c525fd5503fc3d99b0fb610bdbbf8c3a31e88f32f796e2c381

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d326b1bbd1b7        ubuntu              "/bin/sh -c ‘while t…"   15 seconds ago      Up 15 seconds                           ubuntu02

上面的示例中,容器内执行了一个while 死循环,该循环会每隔 1 秒打印一次”hello world“,知道容器或其内部的进程停止运行。

##查看容器内部的工作内容

docker logs 可以获取容器的日志:

# 查看容器的日志
# 查看
$ docker logs ubuntu02
hello world
hello world
hello world
......

# -f 参数可以让我们持续查看容器日志, 类似于 tail 命令的-f 参数
$ docker logs -f ubuntu02
hello world
hello world
hello world
......
hello world

# 查看最后 10 行日志
$ docker logs --tail 10  ubuntu02

# 查看最新的日志,并监控日志
$ docker logs --tail 0 -f  ubuntu02

在查看日志的过程中,通过 ctrl+c 来退出日志追踪。

docker日志驱动

自1.6 开始,docker 支持控制守护进程和容器所用的日志驱动,通过 --log-dirver 实现,可在启动docker 守护进程或者 docker run 时使用。

--log-driver : 有如下选项

  • json-file :默认值
  • syslog : 该选项将禁用 docker logs 命令,并将所有容器的日志输出都重定向到 syslog,可在启动 docker 的守护进程时指定,也可以通过 docker run 对指定的容器进行日志重定向
  • none : 禁用容器中所有的日志,docker logs 命令也会被禁用。

支持的选项:

awslogs、fluentd、gcplogs、gelf、journald、json-file、local、logentries、splunk、syslog

查看容器内的进程

# 查看容器内的进程
docker top ubuntu02

docker 统计信息

#  可动态查看一个或多个容器的统计信息
$ docker status ubuntu02 ubuntu001

#展示的信息包括 CPU、MEM、网络IO、存储IOdezhi

在容器内部运行新进程

# docker exec 可以在容器内部额外启动新进程(后台任务或交互式任务)
# -d 表明要运行一个后台进程,其后跟荣启明和要执行的命令
$ docker exec -d ubuntu02 touch /tmp/newfile

# 在已运行容器上打开一个交互式shell
# -i 保证 attach 期间 stdin 为打开状态
# -t 分配一个伪tty
$ docker exec -i -t ubuntu02 /bin/bash

停止守护式容器

# 发送 sigtrem 信号,停止容器
$ docker stop ubuntu02  # 容器名称
$ docker stop d326b1bbd1b7  # 容器 ID

# 发送 sigkill 信号停止容器,更快
$ docker kill ubuntu01
$ docker kill d326b1bbd1b7

# 查看已停止容器的状态
$ docker ps
$ docker ps -n x  # 显示最后 x 个容器

自动重启容器

如果容器因为某种错误而停止运行,可以通过 --restart 参数,让 docker 自动重启容器,该参数会检查容器的退出代码,并据此来判断是否重启容器。docker 默认不会重启容器。

#
$ docker run --restart=always --name ubuntu03 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

这里 --restart参数的值为 always,无论容器的代码是什么都会自动重启;另外一个可设的值为 on-failure,即当容器退出代码未非 0 值时,才会自动重启,该值还可以设置重启次数,例:--restart=on-failure:5

深入容器

获取容器的更多信息:

# 获取更多关于容器的信息
# docker inspect 会对容器进行详细的检查,然后返回其配置信息,包括名称、命令、网络配置等信息
$ docker inspect ubuntu03

# 查看选定内容的值: -f 或者  --format
# 查看运行状态
$ docker inspect -f ‘{{ .State.Running }}‘  ubuntu03
true

# 查看IP
$ docker inspect -f ‘{{ .NetworkSettings.IPAddress }}‘  ubuntu03
172.17.0.3

# 同时查看多个容器中的指定信息
$ docker inspect --format ‘{{.Name}} {{.State.Running}} {{.NetworkSettings.IPAddress}}‘ ubuntu03 ubuntu02
/ubuntu03 true 172.17.0.3
/ubuntu02 true 172.17.0.2

注意:除了查看容器,也可以通过浏览 /var/lib/docker 下的文件来来了解 docker 的工作原理,其下存放有镜像、容器及容器配置等信息。

目录结构如下:

/var/lib/docker/ ├── builder ├── buildkit ├── containers ├── image ├── network ├── overlay2 ├── plugins ├── runtimes ├── swarm ├── tmp ├── trust └── volumes

删除容器

如果容器不在使用,可使用 rm 子命令删除容器:

#  使用 ID 删除容器
$ docker rm 88607d784af6

# 使用容器名删除容器
$ docker rm ubuntu03

# 一次删除所有容器
$ docker rm $(docker ps -a -q)

# docker ps 可列出容器信息, -a 表示列出所有容器, -q 表示只显示容器 ID

原文地址:https://www.cnblogs.com/resn/p/12218368.html

时间: 2024-11-05 15:54:28

docker 003 基本操作的相关文章

用docker搭建测试环境--docker的基本操作

上一篇文章中最后执行了docker pull centos的指令,经过一段时间的等待,会从hub.docker.com上下载docker官方最新的centos的images,接下来熟悉一下docker的一些基本操作.1.查看本地的imagesdocker images 2.从hub.docker.com拉取响应的imagesdocker pull images 3.运行指定的images,并在images里边执行command命令docker run images command 4.查看当前运

docker版mysql的使用和配置(1)——docker的基本操作

最近实在是忙成狗,其他的内容等稍微闲一点了一起更新. 这篇主要是讲docker版的mysql的使用和配置信息.因为实习公司需要搞一个docker做测试环境用,还需要包括基本的依赖.最重要的是,因为这个docker是作为jenkins的slave使用的,所以有可能不能在启动的时候加参数.这就导致我得把docker版的mysql的整个使用和配置详细过一遍,看看是否有代替启动参数的设置方法. 文中涉及到的mysql的基本信息见以下链接: https://hub.docker.com/r/mysql/m

【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service docker stop  #停止服务 service docker restart #重启服务 service docker status   #查看服务状态 启动Docker服务 docker是一个CS模型,需要先启动服务端,直接执行 sudo service docker start 启动docker

Docker的基本操作

容器基本操作 1.启动容器 $docker run image [COMMAND] [ARG…] run在新容器中执行命令 2.启动交互式容器 $docker run -i -t IMAGE /bin/bash -i --interactive = ture | fasle 默认是false -t --tty=true | false 默认是false 3.查看容器 $docker ps [-a] [-l] -a 查看所有 -l 查看最新 $docker inspect 4.自定义容器名: $d

Docker 容器基本操作[Docker 系列-2]

?Docker 入门及安装[Docker 系列-1] 镜像就像是一个安装程序,而容器则是程序运行时的一个状态. 查看容器 查看容器 启动 docker 后,使用 docker ps 命令可以查看当前正在运行的容器: 查看所有容器 上面这条命令是查看当前正在运行的容器,如果需要查看所有容器,则可以通过 docker ps-a 命令查看: 在查看容器时,涉及到几个查看参数,含义分别如下: CONTAINER ID:CONTAINER ID是指容器的id,是一个唯一标识符,这是一个64位的十六进制整数

docker镜像基本操作

操作镜像 使用 docker 命令行操作 docker 镜像 获取镜像 使用「docker pull +镜像名称」从网络上下载image镜像 core@localhost ~ $ docker pull Usage: docker pull NAME[:TAG] Pull an image or a repository from the registry core@localhost ~/php $ docker pull ubuntu #pull +镜像的名称会下载该镜像集的laste ta

docker一些基本操作

一.从Docker Hub仓库下载一个Ubuntu 12.01 操作系统的镜像(从官方下载) $ sudo docker pull ubuntu:12.04 即从注册服务器registry.hub.docker.com中的ubuntu仓库来下载12.04的镜像

docker镜像基本操作一

获取镜像 首先说明一下如何从Docker hub中获取高质量的镜像,从Docker镜像库获取镜像的命令是docker pull .其命令格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 具体的选项可以通过docker pull --help命令看到,下面我们说一下镜像名称的格式: docker镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] .默认地址是 DockerHub. 仓库名:仓库名是两段式名称,即<用户

Docker 容器基本操作

启动容器 运行一次命令并结束进程 $ docker run [--name=cname] IMAGE [COMMAND][ARG...] # run在新容器中执行命令 # --name=cname 自定义容器名字 由于第一使用ubuntu,而本地并不存在ubuntu的image,所以会自动执行pull操作拉取image $ docker run ubuntu echo 'hello the cruel world!' Unable to find image 'ubuntu:latest' lo