当前位置:   article > 正文

docker容器基础详解_docker 容器的元数据和状态信息 解析

docker 容器的元数据和状态信息 解析
 容器命令

1.启动容器和停止容器

docker run

  1. docker run [选项] [镜像名] [shell命令] [参数]
  2. #选项:
  3. -i, --interactive Keep STDIN open even if not attached,通常和-t一起使用
  4. -t, --tty 分配pseudo-TTY,通常和-i一起使用,注意对应的容器必须运行shell才支持进
  5. -d, --detach Run container in background and print container ID,台后运行,
  6. 默认前台
  7. --name string Assign a name to the container
  8. --h, --hostname string Container host name
  9. --rm Automatically remove the container when it exits
  10. -p, --publish list Publish a container's port(s) to the host
  11. -P, --publish-all Publish all exposed ports to random ports
  12. --dns list Set custom DNS servers
  13. --entrypoint string Overwrite the default ENTRYPOINT of the image
  14. --restart policy
  15. --privileged Give extended privileges to container
  16. -e, --env=[] Set environment variables
  17. --env-file=[] Read in a line delimited file of environment variables
  18. --sysctl net.ipv4.ip_unprivileged_port_start=0 #指定容器的内核参数,但不修改宿主机内核
  19. --ulimit ulimit #指定ulimit限制配置,比如: --ulimit nofile=10240:10240
  20. [shell命令] [参数] #使用指定的命令和参数,替换容器默认的命令

--restart可以指定不同的policy

如果docker stop 停止容器后重启宿主机。always选项以外的其它选项的容器都不会随着宿主机启动而自动启动

容器启动后,如果容器内没有前台运行的进程,将自动退出停止

容器需要一个前台运行的进程才能保持容器的进行,可以在构建镜像的时候指定容器启动时运行的前台命令,也可以通过启动时传递参数实现

容器里的PID为1的守护进程的实现方式

  • 服务类: 如: Nginx,Tomcat,Apache ,但服务不能停
  • 命令类: 如: tail -f /etc/hosts ,主要用于测试环境,注意: 不要tail -f <服务访问日志> 会产生不 必要的磁盘IO

从容器内退出,并停止容器:exit

从容器内退出,并不停止容器:ctrl+p+q

指定容器名称:--name

运行交互式容器并退出:docker run -it docker.io/busybox sh

一次性运行容器,退出后立即删除,用于测试:docker run --rm alpine cat /etc/issue

--privileged 选项

容器里的root和宿主机的root不是一个东西。容器里的root是个假root,并不具备真正的root管理员权限,使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上 的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。

格式:

docker start|stop|restart|pause|unpause 容器ID

批量正常启动或关闭所有容器

  1. docker start $(docker ps -a -q)
  2. docker stop $(docker ps -a -q)

暂停和恢复容器

docker pause

docker unpause

2.查看容器
  1. docker ps [OPTIONS]
  2. docker container ls [OPTIONS]
  3. 选项:
  4. -a, --all Show all containers (default shows just running)
  5. -q, --quiet Only display numeric IDs
  6. -s, --size Display total file sizes
  7. -f, --filter filter Filter output based on conditions provided
  8. -l, --latest Show the latest created container (includes all states)
  9. -n, --last int Show n last created containers (includes all states) (default -1)
  10. --format 按格式输出信息

docker ps

docker ps --format 命令中,你可以使用不同的占位符来指定要在输出中显示的容器信息。

  1. #以下是一些常用的占位符:
  2. {{.ID}}:容器的ID。
  3. {{.Image}}:容器使用的映像名称。
  4. {{.Command}}:容器的启动命令。
  5. {{.CreatedAt}}:容器的创建时间。
  6. {{.RunningFor}}:容器运行的时间。
  7. {{.Ports}}:容器的端口映射信息。
  8. {{.Status}}:容器的状态。
  9. {{.Size}}:容器的大小。
  10. {{.Names}}:容器的名称。
  11. {{.Label}}:容器的标签。
  12. #示例
  13. docker ps --format "{{.ID}}\t{{.Image}}\t{{.Status}}"

查看容器内的进程

docker top CONTAINER [ps OPTIONS]

查看容器资源使用情况

  1. docker stats [OPTIONS] [CONTAINER...]
  2. Display a live stream of container(s) resource usage statistics
  3. Options:
  4. -a, --all Show all containers (default shows just running)
  5. --format string Pretty-print images using a Go template
  6. --no-stream Disable streaming stats and only pull the first result
  7. --no-trunc Do not truncate output

查看容器的详细信息

docker inspect 可以查看docker各种对象的详细信息,包括镜像,容器,网络等

  1. docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  2. Options:
  3. -f, --format string Format the output using the given Go template
  4. -s, --size Display total file sizes if the type is container

3.删除容器

docker rm

  1. docker rm [OPTIONS] CONTAINER [CONTAINER...]
  2. docker container rm [OPTIONS] CONTAINER [CONTAINER...]
  3. #选项:
  4. -f, --force Force the removal of a running container (uses SIGKILL)
  5. -v, --volumes Remove the volumes associated with the container
  6. #删除停止的容器
  7. docker container prune [OPTIONS]
  8. Options:
  9. --filter filter Provide filter values (e.g. 'until=<timestamp>')
  10. -f, --force Do not prompt for confirmation

删除所有容器

  1. [root@ubuntu1804 ~]#docker rm -f `docker ps -a -q`
  2. [root@ubuntu1804 ~]#docker ps -a -q | xargs docker rm -f

删除指定状态的容器

  1. [root@ubuntu2204 ~]#docker rm -f `docker ps -q -f status=running`
  2. [root@ubuntu1804 ~]#docker rm `docker ps -qf status=exited`

4.发信号

docker kill 可以给容器发信号,默认为SIGKILL,即9信号

  1. docker kill [OPTIONS] CONTAINER [CONTAINER...]
  2. #选项:
  3. -s, --signal string Signal to send to the container (default "KILL")

5.进入正在运行的容器

attach

attach 类似于vnc,操作会在同一个容器的多个会话界面同步显示,所有使用此 方式进入容器的操作都是同步显示的,且使用exit退出后容器自动关闭,不推荐使用,

docker attach [OPTIONS] CONTAINER

exec

在运行中的容器启动新进程,可以执行单次命令,以及进入容器 测试环境使用此方式,使用exit退出,但容器还在运行,此为推荐方式

  1. docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  2. 常用选项:
  3. -d, --detach Detached mode: run command in the background
  4. -e, --env list Set environment variables
  5. -i, --interactive Keep STDIN open even if not attached
  6. -t, --tty Allocate a pseudo-TTY
  7. #常见用法
  8. docker exec -it 容器ID sh|bash

6.端口

docker run -P

  1. -P , --publish-all= true | false默认为false
  2. #示例:
  3. docker run -P docker.io/nginx #映射容器所有暴露端口至随机本地端口

docker port可以查看容器的端口映射关系

docker port CONTAINER [PRIVATE_PORT[/PROTO]]

自动生成iptables

[root@centos7 ~]#iptables -vnL -t nat

端口映射的本质就是利用NAT技术实现

7.查看日志

docker logs可以查看容器中运行的进程在控制台的标准输出和标准错误,一般对应是日志信息

docker 日志是存放在宿主机的 /var/lib/docker/containers//-json.log文 件中

  1. docker logs [OPTIONS] CONTAINER
  2. 选项:
  3. --details Show extra details provided to logs
  4. -f, --follow Follow log output
  5. --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or
  6. relative (e.g. 42m for 42 minutes)
  7. --tail string Number of lines to show from the end of the logs (default
  8. "all")
  9. -t, --timestamps Show timestamps
  10. --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or
  11. relative (e.g. 42m for 42 minutes)
  1. [root@kv1 docker]#docker run -d alpine /bin/sh -c 'i=1;while true;do echo hello$i;let i++;sleep 2;done'
  2. 2624b0bfb0bdf43293b0846e032ba719207b46a8fbbc74b0b0b9c97e2b4c7f02
  3. [root@kv1 docker]#docker logs 2624
  4. hello1
  5. hello2
  6. hello3
  7. hello4
  8. hello5
  9. hello6
  10. [root@kv1 docker]#docker logs --tail 4 2624
  11. hello10
  12. hello11
  13. hello12
  14. hello13
  15. #显示时间
  16. [root@kv1 docker]#docker logs --tail 1 -t 2624
  17. 2024-04-11T11:35:25.600679861Z hello42
  18. #查看磁盘文件
  19. [root@kv1 containers]#find ./ -name *.log |grep -r hello130
  20. find ./ -name *.log |xargs grep hello130

8.容器内部的hosts文件和DNS

容器会自动将容器的ID加入自已的/etc/hosts文件中,并解析成容器的IP

  1. [root@kv1 docker]#docker exec -it cf678c96c896 sh
  2. / #
  3. / # cat /etc/hosts
  4. 127.0.0.1 localhost
  5. ::1 localhost ip6-localhost ip6-loopback
  6. fe00::0 ip6-localnet
  7. ff00::0 ip6-mcastprefix
  8. ff02::1 ip6-allnodes
  9. ff02::2 ip6-allrouters
  10. 172.17.0.4 cf678c96c896
  11. docker run -it --rm --add-host www.yaya.com:6.6.6.6 --add-host www.yaya.org:8.8.8.8 peaceful_chatterjee

指定DNS

容器的dns服务器,默认使用宿主机的dns服务

  • 修改宿主机的DNS地址址配置
  • 在容器启动时加选项--dns=x.x.x.x
  • 在/etc/docker/daemon.json 文件中指定

容器的DNS默认从宿主机的DNS获取

  1. 指定DNS地址
  2. [root@ubuntu1804 ~]#docker run -it --rm --dns 1.1.1.1 --dns 8.8.8.8 centos bash
  3. 指定domain名
  4. [root@ubuntu1804 ~]#docker run -it --rm --dns 1.1.1.1 --dns 8.8.8.8 --dns-search a.com --dns-search b.com busybox
  5. 配置文件
  6. [root@ubuntu1804 ~]#cat /etc/docker/daemon.json
  7. {
  8. "storage-driver": "overlay2",
  9. "registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],
  10. "dns" : [ "114.114.114.114", "119.29.29.29"],
  11. "dns-search": [ "magedu.com", "wang.org"]
  12. }
  13. #用--dns指定优先级更高

9.复制

不论容器的状态是否运行,复制都可以实现

  1. docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  2. docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  3. Options:
  4. -a, --archive Archive mode (copy all uid/gid information)
  5. -L, --follow-link Always follow symbol link in SRC_PATH

复制容器的文件到宿主机

  1. [root@ubuntu2004 ~]#docker run -it --name b1 busybox sh
  2. [root@ubuntu2004 ~]#docker cp b1:/bin/busybox /usr/local/bin/
  3. [root@ubuntu2004 ~]#busybox ls

10.传递环境变量

有些容器运行时,需要传递变量,可以使用 -e <参数> 或 --env-file <参数文件> 实现

docker run --name mysql-test1 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.30

11.清除不再使用的数据
  1. [root@ubuntu1804 ~]#docker system prune
  2. #清除不再使用的镜像
  3. [root@ubuntu1804 ~]#docker system prune -f -a

12.导出和导入容器

docker export

docker import

docker export和docker save都可以用于将 Docker 的容器/镜像导出到本地文件系统,但是它们 用途和效果是不同的: docker export:此命令是用于将一个运行的或者停止的容器的文件系统导出为一个 tar 归档文件。需 要注意的是, docker export不会包含该容器的历史(也就是每个层的变更),并且也不会包含容器 的环境变量、元数据和其他相关的配置信息。这意味着如果你导入一个用docker export导出的 tar 文件并运行,你得到的将是一个新的、干净的容器,没有之前容器的运行历史和配置。 docker save:此命令用于将一个或多个镜像导出为一个 tar 归档文件。与docker export不同, docker save会完整地保存镜像的所有内容,包括每一层的变更、所有的元数据、所有的标签等。这 意味着如果你导入一个用docker save导出的 tar 文件并运行,你得到的将是一个与原镜像完全一样 的新镜像,包括所有的历史和配置。 总结来说, docker export是用来导出容器的文件系统,而docker save是用来导出镜像的全部内 容。

  1. [root@ubuntu2204 ~]#docker export nginx -o nginx.tar
  2. [root@ubuntu2204 ~]#tar tvf nginx.tar |head
  3. -rwxr-xr-x 0/0               0 2022-07-06 17:45 .dockerenv
  4. drwxr-xr-x 0/0               0 2021-12-20 08:00 bin/
  5. -rwxr-xr-x 0/0         1234376 2021-08-05 04:25 bin/bash
  6. -rwxr-xr-x 0/0           43936 2020-09-24 16:36 bin/cat
  7. -rwxr-xr-x 0/0           72672 2020-09-24 16:36 bin/chgrp
  8. -rwxr-xr-x 0/0           64448 2020-09-24 16:36 bin/chmod
  9. -rwxr-xr-x 0/0           72672 2020-09-24 16:36 bin/chown
  10. -rwxr-xr-x 0/0          151168 2020-09-24 16:36 bin/cp
  11. -rwxr-xr-x 0/0          125560 2020-12-10 21:23 bin/dash
  12. -rwxr-xr-x 0/0          113664 2020-09-24 16:36 bin/date
  13. #import 实现将容器文件生成镜像
  14. [root@ubuntu2204 ~]#docker import nginx.tar nginx:test
  15. [root@ubuntu2204 ~]#docker images nginx:test
  16. REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
  17. nginx       test     ca611fd77d08   6 minutes ago   140MB

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/1016207
推荐阅读
相关标签
  

闽ICP备14008679号