您的位置:首页 > 运维架构 > Docker

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

2020-03-05 09:40 1176 查看

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

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

[root@localhost ~]# docker

Usage:  docker COMMAND

A self-sufficient runtime for containers

Options:
--config string      Location of client config files (default "/root/.docker")
-D, --debug              Enable debug mode
-H, --host list          Daemon socket(s) to connect to
-l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls                Use TLS; implied by --tlsverify
--tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify          Use TLS and verify the remote
-v, --version            Print version information and quit

Management Commands:
config      Manage Docker configs
container   Manage containers
image       Manage images
network     Manage networks
node        Manage Swarm nodes
plugin      Manage plugins
secret      Manage Docker secrets
service     Manage services
swarm       Manage Swarm
system      Manage Docker
trust       Manage trust on Docker images
volume      Manage volumes

Commands:
attach      Attach local standard input, output, and error streams to a running container
build       Build an image from a Dockerfile
commit      Create a new image from a containe
......

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

[root@localhost ~]# 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
--no-stream       Disable streaming stats and only pull the first result
--no-trunc        Do not truncate output

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

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

查看镜像

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

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

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

参数说明:

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

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

docker ps -a

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

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

[root@localhost ~]# docker start de4f1201e994
de4f1201e994

查看:status

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

已启动!
后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过

-d
指定容器的运行模式
docker run -itd --name ubuntu-test ubuntu /bin/bash

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

停止一个容器
停止容器的命令如下:

docker stop <容器 ID>

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

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

docker restart <容器 ID>

[root@localhost ~]# docker restart  ba63444432b4
ba63444432b4
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
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

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

导出和导入容器
导出容器
如果要导出本地某个容器,可以使用

docker export
命令。

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

这样将导出容器快照到本地文件。
导入容器快照
可以使用

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

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

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

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

删除容器
删除容器使用

docker rm -f <容器 ID>
命令:

[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
ba63444432b4        ubuntu              "/bin/bash"         3 hours ago         Up 3 hours                                     ubuntu-test
de4f1201e994        ubuntu              "/bin/bash"         4 hours ago         Exited (0) 3 hours ago                         eager_agnesi
b5ebd079a17a        ubuntu              "/bin/bash"         4 hours ago         Exited (0) 4 hours ago                         serene_pare
[root@localhost docker]# docker rm -f ba63444432b4
ba63444432b4
[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
de4f1201e994        ubuntu              "/bin/bash"         4 hours ago         Exited (0) 3 hours ago                         eager_agnesi
b5ebd079a17a        ubuntu              "/bin/bash"         4 hours ago         Exited (0) 4 hours ago                         serene_pare
[root@localhost docker]#

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

docker container prune

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

[root@localhost docker]# docker pull training/webapp
Using default tag: latest
latest: Pulling from training/webapp
e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Already exists
10bbbc0fc0ff: Already exists
fca59b508e9f: Already exists
e7ae2541b15b: Already exists
9dd97ef58ce9: Already exists
a4c1b0cb7af7: Already exists
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Image is up to date for training/webapp:latest

查看载入镜像

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

启动;

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

参数说明:

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

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

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

这里多了端口信息

0.0.0.0:32769->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
这时我们可以通过浏览器访问WEB应用

我们也可以通过 -p 参数来设置不一样的端口:

[root@localhost docker]# docker run -d -p 5000:5000 training/webapp python app.py
bd3cfd7c1f3a4a4cc1c124b08951438d8a3086fddfa5631572225c618315e413
[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
bd3cfd7c1f3a        training/webapp     "python app.py"     17 seconds ago      Up 15 seconds       0.0.0.0:5000->5000/tcp    inspiring_brown
fc8edb0714ee        training/webapp     "python app.py"     13 minutes ago      Up 13 minutes       0.0.0.0:32769->5000/tcp   cocky_proskuriakova
[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 来查看容器端口的映射情况。

[root@localhost docker]# docker port bd3cfd7c1f3a
5000/tcp -> 0.0.0.0:5000
[root@localhost docker]# docker port inspiring_brown
5000/tcp -> 0.0.0.0:5000
[root@localhost docker]#

查看 WEB 应用程序日志

docker logs [ID或者名字]
可以查看容器内部的标准输出。

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

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

查看WEB应用程序容器的进程
我们还可以使用

docker top
来查看容器内部运行的进程

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

检查 WEB 应用程序
使用

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

[root@localhost docker]# docker inspect inspiring_brown
[
{
"Id": "bd3cfd7c1f3a4a4cc1c124b08951438d8a3086fddfa5631572225c618315e413",
"Created": "2020-02-17T14:06:42.550983374Z",
"Path": "python",
"Args": [
"app.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 17700,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-02-17T14:06:43.28436184Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
......

停止 WEB 应用容器

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

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

docker start
来启动。

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

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

[root@localhost docker]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
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
命令来删除不需要的容器

[root@localhost docker]# docker rm -f inspiring_brown
inspiring_brown
[root@localhost docker]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
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 如有疑问请联系删除

附:命令干货

启动停止

service docker start //启动docker后台服务
systemctl start docker
systemctl restart docker
systemctl status docker
systemctl stop docker
systemctl enable docker //开机自动启动
docker info//概要信息
docker --help

镜像常用命令

docker images --查看镜像

//Resposity:镜像名称        Tag:镜像标签        IMAGE ID :镜像ID        CREATED : 镜像的创建日期
//这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

docker search 镜像名称  --搜索镜像

//Stars:用户评价                AutoMated:自动构建,表示该镜像由DockerHub自动构建流程创建的

docker pull ** --拉取镜像

docker rmi 镜像ID --按镜像id删除镜像

docker rmi `dockers images -q` --删除所有镜像

容器相关命令

查看容器

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

创建容器

交互式方式创建容器

docker run -it --name=myUuntu1 ubuntu:15.10 /bin/bash

创建之后直接进入该容器,exit退出后该容器也stop

守护式方式创建容器

docker run -di --name=myUuntu2 ubuntu:15.10

登录守护式容器方式:
docker exec -it 容器名称(或容器ID) /bin/bash
创建之后就算exit退出,该容器也是up

文件拷贝

宿主机文件导入到容器
docker cp 需要拷贝的文件或目录 容器名称:容器目录

导出到宿主机文件
docker cp 容器名称:容器目录/文件 本地文件名字

目录挂载

对宿主机目录:容器目录 进行映射,这样可通过修改宿主机目录来修改容器目录

用法: -v (是目录映射) 宿主机目录:容器目录
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=myUuntu3 ubuntu:15.10

--privileged=true来解决挂载的目录无权限问题

查看容器ip地址

docker inspect 容器名称(或容器ID)

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

删除容器

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

各种软件的部署

Tomcat部署

1. 拉取镜像
docker pull tomcat:7-jre7

2. 创建容器
-p :表示地址映射调用 宿主9001端口操作容器端口8080
-v :目录映射 通过将文件上传的宿主文件并且映射到容器对应的文件中
-i :以交互模式运行容器
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d :后台运行容器,并返回容器ID

docker run -di --name=Mytomcat -p 9001:8080
-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

nginx

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

Redis

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

迁移与备份

容器保存为镜像

docker commit mytomcat mytomcat_i

镜像备份

将镜像保存为tar文件

docker save -o mytomcat.tar mytomcat_i

镜像恢复与迁移

删除mytomcat_img后执行以下命令

docker load -i mytomcat.tar

zookeeper

#拉取zk镜像
docker pull zookeeper:3.5
#创建容器
docker create --name zk -p 2181:2181 zookeeper:3.5
#启动容器
docker start zk

mysql+配置文件映射

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

注:

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

  • 点赞
  • 收藏
  • 分享
  • 文章举报
iT_MaNongZYQ 发布了10 篇原创文章 · 获赞 2 · 访问量 1050 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: