Docker 容器使用最详细实测教程及相关命令使用(附镜像,容器命令干货)!!

谁践踏了优雅 2023-07-06 10:27 26阅读 0赞

Docker 容器相关命令使用实测教程

Docker安装(CentOs 7)不在赘述!
Docker 客户端
docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

  1. [root@localhost ~]# docker
  2. Usage: docker COMMAND
  3. A self-sufficient runtime for containers
  4. Options:
  5. --config string Location of client config files (default "/root/.docker")
  6. -D, --debug Enable debug mode
  7. -H, --host list Daemon socket(s) to connect to
  8. -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
  9. --tls Use TLS; implied by --tlsverify
  10. --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
  11. --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
  12. --tlskey string Path to TLS key file (default "/root/.docker/key.pem")
  13. --tlsverify Use TLS and verify the remote
  14. -v, --version Print version information and quit
  15. Management Commands:
  16. config Manage Docker configs
  17. container Manage containers
  18. image Manage images
  19. network Manage networks
  20. node Manage Swarm nodes
  21. plugin Manage plugins
  22. secret Manage Docker secrets
  23. service Manage services
  24. swarm Manage Swarm
  25. system Manage Docker
  26. trust Manage trust on Docker images
  27. volume Manage volumes
  28. Commands:
  29. attach Attach local standard input, output, and error streams to a running container
  30. build Build an image from a Dockerfile
  31. commit Create a new image from a containe
  32. ......

可以通过命令 docker command —help 更深入的了解指定的 Docker 命令使用方法。
例如我们要查看 docker stats 指令的具体使用方法:

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

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

  1. root@localhost ~]# docker pull ubuntu
  2. Using default tag: latest
  3. latest: Pulling from library/ubuntu
  4. 5c939e3a4d10: Pull complete
  5. c63719cdbe7a: Pull complete
  6. 19a861ea6baf: Pull complete
  7. 651c9d2d6c4f: Pull complete
  8. Digest: sha256:8d31dad0c58f552e890d68bbfb735588b6b820a46e459672d96e585871acc110
  9. Status: Downloaded newer image for ubuntu:latest

查看镜像

  1. [root@localhost ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
  4. hello-world latest fce289e99eb9 13 months ago 1.84kB

启动容器
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

  1. [root@localhost ~]# docker run -it ubuntu /bin/bash
  2. root@b5ebd079a17a:/#

参数说明:

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

    root@de4f1201e994:/# exit
    exit
    [root@localhost ~]#

启动已停止运行的容器
查看所有的容器命令如下:docker ps -a

  1. [root@localhost ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. de4f1201e994 ubuntu "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago eager_agnesi
  4. [root@localhost ~]#

使用 docker start 启动一个已停止的容器:

  1. [root@localhost ~]# docker start de4f1201e994
  2. de4f1201e994

查看:status

  1. [root@localhost ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. de4f1201e994 ubuntu "/bin/bash" 7 minutes ago Up 2 minutes eager_agnesi

已启动!
后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式docker run -itd --name ubuntu-test ubuntu /bin/bash

  1. [root@localhost ~]# docker run -itd --name ubuntu-test ubuntu /bin/bash
  2. ba63444432b4a0218dd6566a62724c85bb492664600c3d00c7e72f37817dd6be
  3. [root@localhost ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. ba63444432b4 ubuntu "/bin/bash" 40 seconds ago Up 39 seconds ubuntu-test

停止一个容器
停止容器的命令如下:docker stop <容器 ID>

  1. [root@localhost ~]# docker stop ba63444432b4
  2. ba63444432b4
  3. [root@localhost ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. ba63444432b4 ubuntu "/bin/bash" 3 minutes ago Exited (0) 3 seconds ago ubuntu-test

停止的容器可以通过 docker restart 重启:docker restart <容器 ID>

  1. [root@localhost ~]# docker restart ba63444432b4
  2. ba63444432b4
  3. [root@localhost ~]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. ba63444432b4 ubuntu "/bin/bash" 4 minutes ago Up 3 seconds ubuntu-test

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

  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
  • docker attach: 该命令会导致容器停止,而且该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
    下面演示了使用 docker attach 命令。

    [root@localhost ~]# docker attach ba63444432b4
    root@ba63444432b4:/# exit
    exit
    [root@localhost ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    ba63444432b4 ubuntu “/bin/bash” 8 minutes ago Exited (0) 3 seconds ago ubuntu-test

注意: 如果从这个容器退出,会导致容器的停止。
docker exec的用法docker exec -it <容器 ID> /bin/bash

  1. [root@localhost ~]# docker exec -it ba63444432b4 /bin/bash
  2. root@ba63444432b4:/# exit
  3. exit
  4. [root@localhost ~]# docker ps -a
  5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  6. ba63444432b4 ubuntu "/bin/bash" 18 minutes ago Up 39 seconds ubuntu-test

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

  1. [root@localhost ~]# docker export ba63444432b4 > ubuntu.tar
  2. [root@localhost ~]# ll
  3. total 65036
  4. -rw-------. 1 root root 1569 Feb 13 15:11 anaconda-ks.cfg
  5. -rw-rw-r--. 1 root root 13216 Feb 16 22:16 get-docker.sh
  6. -rw-rw-r--. 1 root root 66572800 Feb 17 19:43 ubuntu.tar

这样将导出容器快照到本地文件。
导入容器快照
可以使用 cat <容器快照> | docker import - <镜像名称 >:<版本> 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

  1. [root@localhost docker]# cat ./ubuntu.tar | docker import - test/ubuntu:v1
  2. sha256:ae30cd63ebe33cf2e0673f5afd94b922957f87439ef306275fe0b93280d3df3d
  3. [root@localhost docker]# docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. test/ubuntu v1 ae30cd63ebe3 7 seconds ago 64.2MB

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

  1. docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器
删除容器使用 docker rm -f <容器 ID> 命令:

  1. [root@localhost docker]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. ba63444432b4 ubuntu "/bin/bash" 3 hours ago Up 3 hours ubuntu-test
  4. de4f1201e994 ubuntu "/bin/bash" 4 hours ago Exited (0) 3 hours ago eager_agnesi
  5. b5ebd079a17a ubuntu "/bin/bash" 4 hours ago Exited (0) 4 hours ago serene_pare
  6. [root@localhost docker]# docker rm -f ba63444432b4
  7. ba63444432b4
  8. [root@localhost docker]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. de4f1201e994 ubuntu "/bin/bash" 4 hours ago Exited (0) 3 hours ago eager_agnesi
  11. b5ebd079a17a ubuntu "/bin/bash" 4 hours ago Exited (0) 4 hours ago serene_pare
  12. [root@localhost docker]#

清理掉所有处于终止状态的容器docker container prune

运行一个 web 应用
前面我们运行的容器并没有一些什么特别的用处。
接下来让我们尝试使用 docker 构建一个 web 应用程序。
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

  1. [root@localhost docker]# docker pull training/webapp
  2. Using default tag: latest
  3. latest: Pulling from training/webapp
  4. e190868d63f8: Already exists
  5. 909cd34c6fd7: Already exists
  6. 0b9bfabab7c1: Already exists
  7. a3ed95caeb02: Already exists
  8. 10bbbc0fc0ff: Already exists
  9. fca59b508e9f: Already exists
  10. e7ae2541b15b: Already exists
  11. 9dd97ef58ce9: Already exists
  12. a4c1b0cb7af7: Already exists
  13. Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
  14. Status: Image is up to date for training/webapp:latest

查看载入镜像

  1. [root@localhost docker]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB
  4. training/webapp latest 6fae60ef3446 4 years ago 349MB

启动;

  1. [root@localhost docker]# docker run -d -P training/webapp python app.py
  2. fc8edb0714ee6c31d9f261761756ed81cca7107216ebc76edbf26ff5b46987e9
  3. [root@localhost docker]#

参数说明:

  • -d:让容器在后台运行。
  • -P:将容器内部使用的网络端口映射到我们使用的主机上

查看 WEB 应用容器
使用 docker ps 来查看我们正在运行的容器:

  1. [root@localhost docker]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. fc8edb0714ee training/webapp "python app.py" 4 minutes ago Up 4 minutes 0.0.0.0:32769->5000/tcp cocky_proskuriakova
  4. [root@localhost docker]#

这里多了端口信息0.0.0.0:32769->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
这时我们可以通过浏览器访问WEB应用
在这里插入图片描述
我们也可以通过 -p 参数来设置不一样的端口:

  1. [root@localhost docker]# docker run -d -p 5000:5000 training/webapp python app.py
  2. bd3cfd7c1f3a4a4cc1c124b08951438d8a3086fddfa5631572225c618315e413
  3. [root@localhost docker]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. bd3cfd7c1f3a training/webapp "python app.py" 17 seconds ago Up 15 seconds 0.0.0.0:5000->5000/tcp inspiring_brown
  6. fc8edb0714ee training/webapp "python app.py" 13 minutes ago Up 13 minutes 0.0.0.0:32769->5000/tcp cocky_proskuriakova
  7. [root@localhost docker]#

容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
在这里插入图片描述

网络端口的快捷方式
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 bd3cfd7c1f3a 名字为 inspiring_brown。
我可以使用 docker port bd3cfd7c1f3a 或 docker port inspiring_brown 来查看容器端口的映射情况。

  1. [root@localhost docker]# docker port bd3cfd7c1f3a
  2. 5000/tcp -> 0.0.0.0:5000
  3. [root@localhost docker]# docker port inspiring_brown
  4. 5000/tcp -> 0.0.0.0:5000
  5. [root@localhost docker]#

查看 WEB 应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。

  1. [root@localhost docker]# docker logs bd3cfd7c1f3a
  2. * Running on http://0.0.0.0

-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

查看WEB应用程序容器的进程
我们还可以使用 docker top 来查看容器内部运行的进程

  1. root@localhost docker]# docker top bd3cfd7c1f3a
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 17700 17688 0 22:06 ? 00:00:00 python app.py
  4. [root@localhost docker]# docker top inspiring_brown
  5. UID PID PPID C STIME TTY TIME CMD
  6. root 17700 17688 0 22:06 ? 00:00:00 python app.py
  7. [root@localhost docker]#

检查 WEB 应用程序
使用 docker inspect来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

  1. [root@localhost docker]# docker inspect inspiring_brown
  2. [
  3. {
  4. "Id": "bd3cfd7c1f3a4a4cc1c124b08951438d8a3086fddfa5631572225c618315e413",
  5. "Created": "2020-02-17T14:06:42.550983374Z",
  6. "Path": "python",
  7. "Args": [
  8. "app.py"
  9. ],
  10. "State": {
  11. "Status": "running",
  12. "Running": true,
  13. "Paused": false,
  14. "Restarting": false,
  15. "OOMKilled": false,
  16. "Dead": false,
  17. "Pid": 17700,
  18. "ExitCode": 0,
  19. "Error": "",
  20. "StartedAt": "2020-02-17T14:06:43.28436184Z",
  21. "FinishedAt": "0001-01-01T00:00:00Z"
  22. },
  23. ......

停止 WEB 应用容器

  1. [root@localhost docker]# docker stop inspiring_brown
  2. inspiring_brown
  3. [root@localhost docker]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. bd3cfd7c1f3a training/webapp "python app.py" 19 minutes ago Exited (137) 31 seconds ago inspiring_brown

重启WEB应用容器
已经停止的容器,我们可以使用命令 docker start 来启动。

  1. [root@localhost docker]# docker start inspiring_brown
  2. inspiring_brown
  3. [root@localhost docker]# docker ps -a
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. bd3cfd7c1f3a training/webapp "python app.py" 21 minutes ago Up 2 seconds 0.0.0.0:5000->5000/tcp inspiring_brown

docker ps -l 查询最后一次创建的容器:

  1. [root@localhost docker]# docker ps -l
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. bd3cfd7c1f3a training/webapp "python app.py" 22 minutes ago Up About a minute 0.0.0.0:5000->5000/tcp inspiring_brown

正在运行的容器,我们可以使用 docker restart 命令来重启。

移除WEB应用容器
我们可以使用 docker rm -f 命令来删除不需要的容器

  1. [root@localhost docker]# docker rm -f inspiring_brown
  2. inspiring_brown
  3. [root@localhost docker]# docker ps -l
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. fc8edb0714ee training/webapp "python app.py" 39 minutes ago Up 39 minutes 0.0.0.0:32769->5000/tcp cocky_proskuriakova

至此docker容器的使用实测教程已完成,
原文依照菜鸟教程进行实测;https://www.runoob.com/docker/docker-container-usage.html 如有疑问请联系删除

附:命令干货

启动停止

  1. service docker start //启动docker后台服务
  2. systemctl start docker
  3. systemctl restart docker
  4. systemctl status docker
  5. systemctl stop docker
  6. systemctl enable docker //开机自动启动
  7. docker info//概要信息
  8. docker --help

镜像常用命令

  1. docker images --查看镜像
  2. //Resposity:镜像名称 Tag:镜像标签 IMAGE ID :镜像ID CREATED : 镜像的创建日期
  3. //这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
  4. docker search 镜像名称 --搜索镜像
  5. //Stars:用户评价 AutoMated:自动构建,表示该镜像由DockerHub自动构建流程创建的
  6. docker pull ** --拉取镜像
  7. docker rmi 镜像ID --按镜像id删除镜像
  8. docker rmi `dockers images -q` --删除所有镜像

容器相关命令

查看容器

  1. 在这里插入代码片
  2. docker ps //查看正在运行的容器
  3. docker ps -a //查看所有的容器
  4. docker ps -l //查看最后一次运行的容器
  5. docker ps -f status=exited //查看停止的容器

创建容器

交互式方式创建容器

  1. docker run -it --name=myUuntu1 ubuntu:15.10 /bin/bash
  2. 创建之后直接进入该容器,exit退出后该容器也stop

守护式方式创建容器

  1. docker run -di --name=myUuntu2 ubuntu:15.10
  2. 登录守护式容器方式:
  3. docker exec -it 容器名称(或容器ID) /bin/bash
  4. 创建之后就算exit退出,该容器也是up

文件拷贝

  1. 宿主机文件导入到容器
  2. docker cp 需要拷贝的文件或目录 容器名称:容器目录
  3. 导出到宿主机文件
  4. docker cp 容器名称:容器目录/文件 本地文件名字

目录挂载

  1. 对宿主机目录:容器目录 进行映射,这样可通过修改宿主机目录来修改容器目录
  2. 用法: -v (是目录映射) 宿主机目录:容器目录
  3. docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=myUuntu3 ubuntu:15.10
  4. --privileged=true来解决挂载的目录无权限问题

查看容器ip地址

  1. docker inspect 容器名称(或容器ID)
  2. docker inspect --format='{ {.NetworkSettings.IPAddress}}' 容器名称(或容器ID)

删除容器

  1. docker rm 容器名称(或容器ID)

各种软件的部署

Tomcat部署

  1. 1. 拉取镜像
  2. docker pull tomcat:7-jre7
  3. 2. 创建容器
  4. -p :表示地址映射调用 宿主9001端口操作容器端口8080
  5. -v :目录映射 通过将文件上传的宿主文件并且映射到容器对应的文件中
  6. -i :以交互模式运行容器
  7. -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
  8. -d :后台运行容器,并返回容器ID
  9. docker run -di --name=Mytomcat -p 9001:8080
  10. -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

nginx

  1. docker pull nginx
  2. docker run -di --name=mynginx -p 80:80 nginx

Redis

  1. docker pull Redis
  2. docker run -di --name=myRedis -p 6379:6379 redis

迁移与备份

容器保存为镜像

  1. docker commit mytomcat mytomcat_i

镜像备份

将镜像保存为tar文件

  1. docker save -o mytomcat.tar mytomcat_i

镜像恢复与迁移

删除mytomcat_img后执行以下命令

  1. docker load -i mytomcat.tar

zookeeper

  1. #拉取zk镜像
  2. docker pull zookeeper:3.5
  3. #创建容器
  4. docker create --name zk -p 2181:2181 zookeeper:3.5
  5. #启动容器
  6. docker start zk

mysql+配置文件映射

传送门:Linux安装MySQL5.7 (docker安装方式)

注:

干货内容来源博文:https://blog.csdn.net/cnoneo/article/details/102790550 如有疑问请联系删除!

发表评论

表情:
评论列表 (有 0 条评论,26人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Docker镜像容器命令

             Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包