「Docker」- 入门 @20210426

#01 检查Docker是否正常运行

使用docker info命令产看容器信息、检查容器是否正常运行:

#!/bin/sh

docker info

# 该命令返回容器概述、镜像概述、执行驱动、存储驱动、基本配置

#02 运行第一个容器

使用docker run命令来运行容器。实际上,它执行了容器的创建和容器的启动:

#!/bin/sh

docker run -i -t ubuntu /bin/bash

#03 使用第一个容器

容器相当与一个操作系统,一个“完整”的操作系统。

如果退出,则容器会停止运行。

#04 容器命名

在运行容器时,使用--name选项指定容器名,否则会生成一个随机的名字。

合法字符:[A-z0-9_.-]

可以通「过容器名」替代「容器ID」,可以非常清楚的分辨容器。

「容器名」必须是唯一,如果容器名已经存在,则应该使用docker rm命令删除已经存在的容器。

#05 重新启动已停止的容器

使用docker start <container name/id>命令来启动容器。

或者可以使用docker restart <container name/id>命令来重新启动容器。

使用docker ps命令查看运行中的容器。

可以使用docker create命令来创建一个容器,但是并不运行,这个可以在工作流中进行细粒度的控制。

#06 附着到容器上

可以使用docker attach命令附着到该容器的会话上。

但是,如果退出(Ctrl+C, Ctrl+D),即进程退出,容器则会停止运行。在退出容器时,可以利用Ctrl+P Ctrl+Q进行退出,以守护式形式退出容器,但容器的守护进程依旧在运行,之后可以使用docker attach命令进入容器。

#07 创建守护进程式容器

如果进程退出,则容器也会退出。所以,如果要创建守护进程式的容器,则需要在容器内创建一个能一直运行的进程。

docker run --name container_name -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

选项-d是容器在后台运行,这使得主机控制台不会附着到新的shell会话上,而是仅仅返回一个容器ID而已。使用docker ps查看当前正在运行的容器。

#08 查看容器日志

使用docker logs命令查看容器日志。

使用docker logs -f命令可以像使用tail -f命令一样查看日志。

使用docker logs -f --tail 10也可以从最近的日志开始看。或者使用docker logs -f --tail 0查看最新的日志。

使用选项-t可以为每条日志显示时间戳。

#09 日志驱动

可以使用--log-driver指定日志驱动,比如syslog, 将日志写入系统的syslog中,或者使用none,禁用全部日志。

在Docker 1.8中,新增了对Graylog GELF协议、Fluentd以及日志轮转启动的支持。

#10 查看容器内的进程

使用docker top命令查看容器内的进程。

#11 查看统计信息

使用docker stats命令查看容器统计信息。

它显示了容器的CPU、内存、网络I/O、存储I/O的统计信息。

#12 在容器内部运行进程

使用docker exec命令在容器内部运行进程。

容器内的进程分为两种:后台任务;交互任务。后台任务运行与后台,不需要交互,而交互任务,则是在前台运行的,需要与用户进行交互。

使用docker exec可以对正在运行的容器进行一系列的维护、监控、管理操作。

从Docker 1.7开始,可以使用-u选项指定运行进程的所属用户。

后台任务:docker exec -d container_name touch /etc/foo.conf

交互任务:docker exec -i -t container_name /bin/bash

#13 停止容器

使用docker stop命令来停止容器。该命令向容器进程发送SIGTERM信号。

或者使用docker kill命令来结束容器。该命令向容器进程发送SIGKILL信号。

#14 自动重启容器

在Docker 1.2.0中引入了--restart选项。使用该选项后,当容器停止时,会判断退出码,决定是否要重启容器。

docker run --restart=always --name container_name -d ubuntu /bin/bash -c "while true; do sleep 1; echo hello world; done"

上述命名中,只要容器停止,则会重启动起。使用--restart=on-failure表示退出码非零时才重启。并且on-failure还支持一个重启次数,例如--restart=on-failure:5表示最多重启五次。

#15 深入容器

除了使用docker ps命令来获取容器信息,还可以使用docker inspect来获取更过的容器信息。

可以配合--format选项来输出指定字段:docker inspect --format='{{.NetworkSettings.SandboxID}}' 1d5960ba4e69

选项--format支持Go语言的模板,可以使用Go语言模板的优势。

也可以通过浏览/var/lib/docker/来了解Docker的工作原理,该目录中存放着Docker的镜像,容器,容器配置。所有的容器都保存在/var/lib/docker/containers/下。

#16 删除容器

通过使用docker rm命令来删除容器。

使用docker rm -f来强制删除运行中的容器,之前的版本必须使用docker stopdocker kill命令来停止容器。

使用docker rm $(docker ps -a -q)来删除所有的容器。

## 常用的容器操作

下载镜像:docker pull

在Docker Hub上查找可用的Image映像
Docker Hub

# docker pull centos:6.10

查看镜像:docker images

安装Docker和下载images镜像和常用Docker命令

# docker images centos

容器列表:docker ps [OPTIONS]

可看到我们创建过的所有容器

# docker ps -a

启动容器:docker start [OPTIONS] CONTAINER [CONTAINER..]

启动一个已经停止的容器

# docker start 026e

重启容器:docker restart [OPTIONS] contains[CONTAINER]

重启一个正在运行的容器

# docker restart 026e

停止容器:docker kill [OPTIONS] CONTAINER [CONTAINNER...]

停止一个正在运行的容器

# docker kill 026e

进入容器:docker attach

Docker容器进入的4种方式。使用docker attach进入容器

# docker attach 44fc0f0582d9

退出容器:exit

Correct way to detach from a container without stopping it

使用快捷键组合序列Ctrl+p, Ctrl+q退出。

重命名仓库:docker tag

没有直接重命名「仓库」的命令,但是可以通过docker tag命令来进行这个操作:

# docker tag server:latest myname/server:latest
# docker rmi server

最后,删除原有的「仓库」。

「TAG」是「镜像名(镜像ID)」的可读别名,它标记「仓库」的版本

Docker how to change repository name or rename image?

## 运行「docker run hello-world」后……

Docker Client ---> Docker Daemon <---> Docker Hub

| |
| | ---> Image
| |
Output <--- new Container <---|

 

#!/bin/bash

# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

相关文章

「Docker」- docker stats
「Docker」- 监控与日志
「Docker」- 在测试中使用
「Docker」- 构建“跨平台”镜像的多种方法(Multi-Arch Images)
「Docker」- runtime/cgo: pthread_create failed: No space left on device

posted @ 2021-04-26 21:20  研究林纳斯写的  阅读(64)  评论(0编辑  收藏  举报