Docker入门

容器安装与验证

安装参考:https://www.runoob.com/docker/ubuntu-docker-install.html

 

验证docker - Hello world

安装验证:$ sudo docker run hello-world 或者 docker run ubuntu:15.10 /bin/echo "Hello world"

demo@demo:~$ sudo docker run hello-world
Hello from Docker!...............
For more examples and ideas, visit:
 https://docs.docker.com/get-started/
demo@demo:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
Status: Downloaded newer image for ubuntu:15.10
Hello world

各个参数解析:

  • docker: Docker 的二进制执行文件。

  • run: 与前面的 docker 组合来运行一个容器。

  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

  • /bin/echo "Hello world": 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

 

docker帮助

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

demo@demo:~$ docker
Usage:  docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
      --config string      Location of client config files (default "/home/keqin/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
......
Run 'docker COMMAND --help' for more information on a command.

To get more help with docker, check out our guides at https://docs.docker.com/go/guides/

可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

例如我们要查看 docker stats 指令的具体使用方法: 

demo@demo:~$ docker stats --help
Usage:  docker stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
Options:
  -a, --all             Show all containers (default shows just running)
      --format string   Pretty-print images using a Go template
......

 

 

镜像Image

镜像是指docker中运行的一个沙盒,这里镜像和容器混用,具体语义需要自己把握。

一个新安装的docker内部一般是没有任何镜像的,在指定某个镜像运行时,如果没有docker会主动从docker hub下载。

 

获取镜像

如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:

demo@demo:~$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
6e3729cf69e0: Pull complete 
Digest: sha256:27cb6e6ccef575a4698b66f5de06c7ecd61589132d5a91d098f7f3f9285415a9
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

 

运行镜像

demo@demo:~$ docker run -it ubuntu /bin/bash
root@23516e1ead71:/#

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

我们尝试在容器中运行命令 cat /proc/versionls分别查看当前系统的版本信息和当前目录下的文件列表

root@3378b0f38837:/# cat /proc/version
Linux version 5.4.0-135-generic (buildd@lcy02-amd64-066) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022
root@3378b0f38837:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@3378b0f38837:/#

要退出终端,直接输入 exit:

 

后台模式启动容器

demo@demo:~$ sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

在输出中,我们没有看到期望的 "hello world",而是一串长字符

2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。

首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a8944dccd3d ubuntu:15.10 "/bin/sh -c 'while t…" 6 minutes ago Up 6 minutes elegant_napier

输出详情介绍:

  CONTAINER ID: 容器 ID。

  IMAGE: 使用的镜像。

  COMMAND: 启动容器时运行的命令。

  CREATED: 容器的创建时间。

  STATUS: 容器状态。

  状态有7种:

    •   created(已创建)
    •   restarting(重启中)
    •   running 或 Up(运行中)
    •   removing(迁移中)
    •   paused(暂停)
    •   exited(停止)
    •   dead(死亡)

  PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

  NAMES: 自动分配的容器名称。

 

查看后台运行镜像的输出

在宿主主机内使用 docker logs [容器ID/${NAMES} ] 命令,查看容器内的标准输出:

demo@demo:~$ docker logs 2b1b7a428627
hello world
......
demo@demo:~$ docker logs elegant_napier
hello world
......

 

停止容器

 可以使用 [docker stop + ${NAMES} /容器ID]  来停止一个容器。

demo@demo:~$ docker stop elegant_napier
demo@demo:~$ docker stop 2b1b7a428627

 

查看所有容器的状态

demo@demo:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                        PORTS     NAMES
bf8f02b18927   ubuntu         "/bin/bash"              43 seconds ago   Exited (127) 29 seconds ago             infallible_borg
2a8944dccd3d   ubuntu:15.10   "/bin/sh -c 'while t…"   16 hours ago     Exited (137) 32 minutes ago             elegant_napier
4aa275de020a   ubuntu:15.10   "/bin/echo 'Hello wo…"   16 hours ago     Exited (0) 16 hours ago                 recursing_lehmann
24154461d166   hello-world    "/hello"                 17 hours ago     Exited (0) 17 hours ago                 goofy_perlman

 

启动一个已经停止的镜像

[docker start + ${NAMES} /容器ID] :

demo@demo:~$ docker start recursing_lehmann
recursing_lehmann

停止或者重启容器

docker stop <容器 ID> / docker restart <容器 ID>

进入后台运行的容器 

docker attach & docker exec 

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:docker attach [容器ID/NAMES]

demo@demo:~$ docker ps 
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
ecadd468c6ac   ubuntu    "/bin/bash"   17 minutes ago   Up 17 minutes             ubuntu-test
08603f632822   ubuntu    "/bin/bash"   18 minutes ago   Up 18 minutes             ubuntu
demo@demo:~$ docker attach ecadd468c6ac
root@ecadd468c6ac:/#

注意: 如果从这个容器退出,会导致容器的停止。

 

docker exec 命令

下面演示了使用 docker exec 命令。

demo@demo:~$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
08603f632822   ubuntu    "/bin/bash"   27 minutes ago   Up 27 minutes             ubuntu
demo@demo:~$ docker exec -it 08603f632822 /bin/bash
root@08603f632822:/#

注意: 如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因。更多参数说明请使用 docker exec --help 命令查看。

 

导出导入删除容器

导出容器快照

如果要导出本地某个容器,可以使用 docker export 命令。

demo@demo:~$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
08603f632822   ubuntu    "/bin/bash"   30 minutes ago   Up 30 minutes             ubuntu
demo@demo:~$ docker export 08603f632822 > docker_ubuntu.tar
demo@demo:~$ ls -l docker_buntu.tar 
-rw-rw-r-- 1 demo demo 80321536 1月   4 11:05 docker_ubuntu.tar

 

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 docker_ubuntu.tar 导入到镜像 test/ubuntu:v1:

demo@demo:~$ cat ./docker_buntu.tar | docker import - test/ubuntu:v1
sha256:799665d955ad907098774a70f6a60e343ea9c5b34c634856278e71f219ff4896

 demo@demo:~$ docker images
   REPOSITORY TAG IMAGE ID CREATED SIZE
   test/ubuntu v1 799665d955ad 2 minutes ago 77.8MB
   <none> <none> f25418f9c7f0 2 minutes ago 0B
   <none> <none> c3c6c1e78845 2 minutes ago 0B
   ubuntu latest 6b7dfa7e8fdb 3 weeks ago 77.8MB
   hello-world latest feb5d9fea6a5 15 months ago 13.3kB
   ubuntu 15.10 9b9cb95443b5 6 years ago 137MB
 demo@demo:~$

此外,也可以通过指定 URL 或者某个目录来导入,例如:

demo@demo:~$ docker import http://example.com/exampleimage.tgz example/imagerepo

 

删除容器

删除容器使用 docker rm 命令,docker rm -f 可以强制删除处于运行状态的容器。

demo@demo:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS                           PORTS     NAMES
ecadd468c6ac   ubuntu         "/bin/bash"              44 minutes ago      Exited (0) 24 minutes ago                  ubuntu-test
08603f632822   ubuntu         "/bin/bash"              45 minutes ago      Up 45 minutes                              ubuntudemo@demo:~$ docker rm ecadd468c6ac
ecadd468c6ac

下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune

 

posted @ 2023-01-04 13:17  小念之歌  阅读(79)  评论(0编辑  收藏  举报