0


【docker】容器的运行、停止、查看等基本操作

容器与镜像的区别

image镜像

  • Docker image是一个read-only文件,位于磁盘上
  • 这个文件包含文件系统,源码,库文件,依赖,工具等一些运行application所需要的文件
  • 可以理解成一个模板
  • docker image具有分层的概念

container容器

  • 一个运行中的docker image,位于内存中
  • 实质是复制image并在image最上层加上一层read-write的层(称之为container layer,容器层)
  • 基于同一个image可以创建多个container

容器的基本操作

容器的基本操作都是命令

  1. docker container

开头,大部分情况下可以简写为

  1. docker

,例如

  1. docker container run

可以简写为

  1. docker run

下面是

  1. docker container

开头的命令列表:

  1. $ docker container --help
  2. Usage: docker container COMMAND
  3. Manage containers
  4. Commands:
  5. attach Attach local standard input, output, and error streams to a running container
  6. commit Create a new image from a container's changes
  7. cp Copy files/folders between a container and the local filesystem
  8. create Create a new container
  9. diff Inspect changes to files or directories on a container's filesystem
  10. exec Run a commandin a running container
  11. export Export a container's filesystem as a tar archive
  12. inspect Display detailed information on one or more containers
  13. kill Kill one or more running containers
  14. logs Fetch the logs of a container
  15. ls List containers
  16. pause Pause all processes within one or more containers
  17. port List port mappings or a specific mapping for the container
  18. prune Remove all stopped containers
  19. rename Rename a container
  20. restart Restart one or more containers
  21. rm Remove one or more containers
  22. run Run a commandin a new container
  23. start Start one or more stopped containers
  24. stats Display a live stream of container(s) resource usage statistics
  25. stop Stop one or more running containers
  26. top Display the running processes of a container
  27. unpause Unpause all processes within one or more containers
  28. update Update configuration of one or more containers
  29. wait Block until one or more containers stop, then print their exit codes

docker container create

  1. docker container create

只是新建一个容器,并不启动一个容器。

  1. $ docker container create --name nginx -p8899:80 nginx
  2. 5932d5e624f7cced52fb8f9282a01c5a112fba249236d028733c424ec7099a6e

docker container run

  1. docker container run

新建并启动一个容器。

  1. $ docker container run -d--name nginx -p8899:80 nginx
  2. ee86be635d8b0ff99e36796191da4ee5c34241f37dc0f66c8b21e2a85517e9de

选项:

  • -d:表示以detach模式后台运行
  • –name:为容器指定一个名字
  • -p:端口映射,宿主机端口为8899映射到docker内端口80

docker container ls

  1. docker container ls

查看启动的容器,也可以简写为

  1. docker ps

或者

  1. docker container ps

  1. $ docker container ls
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. ee86be635d8b nginx "/docker-entrypoint.…"2 minutes ago Up 2 minutes 0.0.0.0:8899->80/tcp, :::8899->80/tcp nginx

选项:

  • -a:列出所有的容器(包括正在运行的和已停止运行的)
  • -l:显示最近创建的容器
  • -n:显示最近创建的n个容器
  • -q:只显示容器ID

docker container stop

  1. docker container stop

停止运行中的容器,后面需要带上容器的名称或者ID,ID可以只写前面几位,不需要写全,能根据ID前缀找到对应的唯一的容器即可,其他带ID的命令也类似。

  1. $ docker container stop ee86be635d8b
  2. ee86be635d8b
  3. $ docker container stop nginx
  4. nginx
  5. $ docker container stop ee8
  6. ee8

docker container start

  1. docker container start

启动已停止的容器。

  1. $ docker container start nginx
  2. nginx

docker container restart

  1. docker container restart

重启运行中的容器。

  1. $ docker container restart nginx
  2. nginx

docker container kill

  1. docker container kill

强制停止运行中的容器。

  1. $ docker container kill nginx
  2. nginx

docker container rm

  1. docker container rm

可以删除容器。

  1. $ docker container rm nginx
  2. nginx

如果容器的状态是正在运行中是不可以删除的,此时可以加上

  1. -f

选项来强制删除运行中的容器。

docker container logs

  1. docker container logs

可以用来查看容器的日志。

  1. $ docker container logs -f nginx
  2. /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
  3. /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
  4. /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
  5. 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
  6. 。。。。。。

如果要实时的日志,可以使用

  1. -f

选项,类似于

  1. tail -f

命令。

docker container top

  1. docker container top

可以用来查看容器内的进程情况,类似于

  1. top

命令。

  1. $ docker container top nginx
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 60836063019:37 pts/0 00:00:00 nginx: master process nginx -g daemon off;
  4. systemd+ 61446083019:37 pts/0 00:00:00 nginx: worker process
  5. systemd+ 61456083019:37 pts/0 00:00:00 nginx: worker process
  6. systemd+ 61466083019:37 pts/0 00:00:00 nginx: worker process
  7. systemd+ 61476083019:37 pts/0 00:00:00 nginx: worker process
  8. systemd+ 61486083019:37 pts/0 00:00:00 nginx: worker process
  9. systemd+ 61496083019:37 pts/0 00:00:00 nginx: worker process
  10. systemd+ 61506083019:37 pts/0 00:00:00 nginx: worker process
  11. systemd+ 61516083019:37 pts/0 00:00:00 nginx: worker process

docker container inspect

  1. docker container inspect

查看容器的详细信息,如镜像信息、环境变量、网络等。

  1. $ docker container inspect nginx
  2. 。。。。。。

docker container exec

  1. docker container exec

可以进入到运行中的容器并执行一个命令。

  1. $ docker container exec-it nginx /bin/bash
  2. root@11f5e64bb119:/#

docker container attach

  1. docker container attach

同样可以进入到运行中的容器并执行一个命令。

  1. docker container attach

进入容器然后退出会导致容器停止,而

  1. docker container exec

进入容器后退出不会导致容器停止,这是两者的区别。

  1. $ docker container attach nginx

docker container cp

  1. docker container cp

用来在宿主机和容器之间拷贝文件。

从宿主机拷贝文件到容器中:

  1. $ docker container cp test.txt nginx:/home

从容器中拷贝文件到宿主机:

  1. $ docker container cp nginx:/docker-entrypoint.sh .

docker container export

  1. docker container export

是将一个容器导出为一个压缩的镜像。

  1. $ docker container export nginx > nginx.tar.gz

后续如果要将这个压缩的镜像导入要使用

  1. docker image import

命令。

docker container commit

  1. docker container commit

是将一个容器提交为为一个镜像。

  1. $ docker container commit -m"nginx v1.0" nginx nginx:v1.0
  2. sha256:0b36bf0f81dda62c4ced29e84d0b44a7c812bb643b2c1d898df0b8897f58c964

docker container diff

  1. docker container diff

命令用于检查容器文件系统上文件或目录的更改。

  1. $ docker container diff nginx
  2. C /run
  3. A /run/nginx.pid
  4. C /var
  5. C /var/cache
  6. C /var/cache/nginx
  7. A /var/cache/nginx/uwsgi_temp
  8. A /var/cache/nginx/client_temp
  9. A /var/cache/nginx/fastcgi_temp
  10. A /var/cache/nginx/proxy_temp
  11. A /var/cache/nginx/scgi_temp
  12. C /etc
  13. C /etc/nginx
  14. C /etc/nginx/conf.d
  15. C /etc/nginx/conf.d/default.conf

docker container pause

  1. docker container pause

暂停一个或多个容器内的所有进程。

  1. $ docker container pause nginx
  2. nginx

使用

  1. docker container ls

可以看到容器的状态为

  1. pause

docker container unpause

  1. docker container unpause

取消暂停一个或多个容器内的所有进程。

  1. $ docker container unpause nginx
  2. nginx

此时容器的状态又变为

  1. UP

docker container rename

  1. docker container rename

重命名容器。

  1. $ docker container rename nginx ng

docker container port

  1. docker container port

列出容器的端口映射或容器的特定映射。

  1. $ docker container port nginx
  2. 80/tcp ->0.0.0.0:8899
  3. 80/tcp -> :::8899

docker container update

  1. docker container update

可以更新一个或多个容器的配置,可以更新CPU、内存等配置信息。

具体可以更新的选项如下:

  1. $ docker container update --help
  2. Usage: docker container update [OPTIONS] CONTAINER [CONTAINER...]
  3. Update configuration of one or more containers
  4. Options:
  5. --blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
  6. --cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
  7. --cpu-quota int Limit CPU CFS (Completely Fair Scheduler)quota
  8. --cpu-rt-period int Limit the CPU real-time period in microseconds
  9. --cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
  10. -c, --cpu-shares int CPU shares (relative weight)--cpus decimal Number of CPUs
  11. --cpuset-cpus string CPUs inwhich to allow execution (0-3, 0,1)
  12. --cpuset-mems string MEMs inwhich to allow execution (0-3, 0,1)
  13. --kernel-memory bytes Kernel memory limit
  14. -m, --memory bytes Memory limit
  15. --memory-reservation bytes Memory soft limit
  16. --memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap
  17. --pids-limit int Tune container pids limit (set -1for unlimited)--restart string Restart policy to apply when a container exits

下面的例子可以更改容器的重启策略:

  1. $ docker container update --restart=no nginx
  2. nginx

参数说明:

  • no:默认策略,在容器退出时不重启容器
  • on-failure:在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3:在容器非正常退出时重启容器,最多重启3次
  • always:在容器退出时总是重启容器
  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

docker container wait

  1. docker container wait

阻止一个或多个容器停止,然后打印退出代码。

  1. $ docker container wait nginx
  2. 0

docker container prune

  1. docker container prune

删除所有停止的容器。

  1. $ docker container prune
  2. WARNING! This will remove all stopped containers.
  3. Are you sure you want to continue? [y/N] y
  4. Deleted Containers:
  5. 5932d5e624f7cced52fb8f9282a01c5a112fba249236d028733c424ec7099a6e

容器运行的两种交互模式

attach模式

例如:

  1. $ docker container run -p80:80 nginx

通过这种方式创建的容器,容器会在前台执行。

容器的输入输出结果会反映到本地端,本地端的输入输出也会反映到容器,例如能在终端看到网页浏览器的 log,ctrl+c会让容器停止。

一般情况不推荐使用attach模式。

detach模式

例如:

  1. $ docker container run -d-p80:80 nginx
  2. 73773e7f0d409e4fba9b1ca6b0c0f2eebab7fa9b030dfe4d2c1cf2865c7275bd

通过这种方式创建的容器会在后台执行,命令行打印完容器的ID就结束了。

连接容器的shell

  1. docker container run -it

创建一个容器并进入交互式模式:

  1. $ docker container run -it nginx /bin/bash
  2. root@7faafc56bd4f:/# exitexit

如果带了

  1. -d

参数,

  1. -it

就不会生效。

  1. docker container exec -it

在一个已经运行的容器里执行一个额外的command:

  1. $ docker container run -d nginx
  2. 06d4f86b592e417c876bc66bd62f5ddbd3aeaa1c8c6dd93670ef73151f32a851
  3. $ docker container exec-it 06 bash
  4. root@06d4f86b592e:/#

批量删除容器

  1. $ docker container rm-f$(docker container ls-aq)
  2. 06d4f86b592e
  3. 7faafc56bd4f

docker container run背后发生了什么?

  1. $ docker container run -d--publish80:80 --name webhost nginx
  1. 在本地查找是否有nginx这个image镜像,但是没有发现
  2. 去远程的image registry查找nginx镜像(默认的registry是Docker Hub)
  3. 下载最新版本的nginx镜像 (nginx:latest 默认)
  4. 基于nginx镜像来创建一个新的容器,并且准备运行
  5. docker engine分配给这个容器一个虚拟IP地址
  6. 在宿主机上打开80端口并把容器的80端口转发到宿主机上
  7. 启动容器,运行指定的命令(这里是一个shell脚本去启动nginx)
标签: docker k8s 容器

本文转载自: https://blog.csdn.net/u022812849/article/details/132577755
版权归原作者 morris131 所有, 如有侵权,请联系我们删除。

“【docker】容器的运行、停止、查看等基本操作”的评论:

还没有评论