Docker初体验之容器的使用

容器的使用

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

$ docker pull ubuntu

这样就会载入最新的Ubuntu镜像了

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

$ docker run -it ubuntu /bin/bash
root@ad1bace56ed0:/# 

参数说明:

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

要退出终端直接输入exit。

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

$ docker ps -a

使用docker运行一个已经停止的容器:

$ docker start 144d86713fba
144d86713fba

后台运行:
大多数情景下,我们都希望容器运行在后台上,我们可以通过-d指定容器的运行模式

$ docker run -itd --name ubuntu-test ubuntu /bin/bash
86ce481f20101cd740e0ce397085a991e663804c990ce4cc354e773d463e3b6e

注意:-d参数默认不会进入容器,想进入容器使用命令docker exec

停止一个容器

$ docker stop 86ce481f2010
86ce481f2010

重启一个容器

$ docker restart 86ce481f2010
86ce481f2010

进入容器
在使用了-d参数时,容器启动之后会进入后台,此时想进入容器,可以通过以下命令:

  • docker attach:使用这个命令进入后,使用exit命令会让容器停止
  • docker exec:推荐使用这个命令,因为退出之后不是彻底的退出,容器还留在后台
$ docker attach 86ce481f2010
root@86ce481f2010:/# exit
exit
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
144d86713fba        ubuntu:15.10        "/bin/sh -c 'while t…"   48 minutes ago      Up 10 minutes                           quizzical_neumann
$ docker exec -it 144d86713fba /bin/bash
root@144d86713fba:/# 

通过上面的两个命令可以看到,容器ID以86开头的容器已经停止了

所以小伙伴们在使用这两个命令的时候要注意以下这两个命令的异同,防止踩坑

导出和导入容器
导出容器:

$ docker export 144d86713fba > ./docker/ubuntu.tar
//导出容器144d86713fba快照到本地文件ubuntu.tar,这样将导出容器快照到本地文件

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

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
sha256:bc1adfd4da43ae368125f56a4288ac25976cba96115e9d5329e8d765e5e736ac

此外也可以通过指定URL或者某个目录来导入。

删除容器
使用rm命令:

$ docker rm -f 144d86713fba 
144d86713fba

下面的命令可以清除所有的停止的容器
container prune

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
86ce481f20101cd740e0ce397085a991e663804c990ce4cc354e773d463e3b6e
ad1bace56ed0b0462786f3b43c987dc4315302e3275aeb074dc4ac3e5cb88226
abadb60d4961b65f08515437293080b7b04524b9729cd39ba76d187a3dcf712f
158d1e8d49e01be0105701af70c6264600f3d5f9d203f4df412bc72a2b27ebed
97dae4550f6299bc8a9dc46345637ef5b9411b8fc05acb1cf20216d625d4e694
8b0ec58e7672d50597938763639148fe24b86a9660fa11b1060ec047cc59cafb

Total reclaimed space: 150B

查看网络应用容器:

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
820a8988aafa        training/webapp     "python app.py"     24 seconds ago      Up 23 seconds       0.0.0.0:32768->5000/tcp   charming_shockley

注意这里多了个端口信息。
Docker开放了5000端口,映射到了主机的32768端口上,我们可以通过浏览器访问,效果如下图:
在这里插入图片描述
我们也可以通过-p参数来修改这个端口号:

$ docker run -d -p 5000:5000 training/webapp python app.py
f25dec5468a1fb2c0fe9dd6cd682b582a72c31340196e80ecef7b1a1f0ccbb96
shbdeMacBook-Pro:~ geohey$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
f25dec5468a1        training/webapp     "python app.py"     5 seconds ago       Up 5 seconds        0.0.0.0:5000->5000/tcp    musing_lehmann
820a8988aafa        training/webapp     "python app.py"     9 minutes ago       Up 9 minutes        0.0.0.0:32768->5000/tcp   charming_shockley

容器内部的5000映射到了本地主机的5000端口上

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

$ docker port f25dec5468a1
5000/tcp -> 0.0.0.0:5000

$ docker port musing_lehmann
5000/tcp -> 0.0.0.0:5000

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

$ docker logs -f f25dec5468a1
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [30/Apr/2020 08:27:09] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [30/Apr/2020 08:27:09] "GET /favicon.ico HTTP/1.1" 404 -

-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

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

$ docker top f25dec5468a1
PID                 USER                TIME                COMMAND
7050                root                0:00                python app.py

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

$ docker inspect musing_lehmann
[
    {
        "Id": "f25dec5468a1fb2c0fe9dd6cd682b582a72c31340196e80ecef7b1a1f0ccbb96",
        "Created": "2020-04-30T08:26:27.28910456Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 7050,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-04-30T08:26:27.917734185Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        ……

停止WEB应用程序

$ docker stop musing_lehmann
musing_lehmann

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

$ docker start musing_lehmann
musing_lehmann

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

$ docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
f25dec5468a1        training/webapp     "python app.py"     14 minutes ago      Up 39 seconds       0.0.0.0:5000->5000/tcp   musing_lehmann

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

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


//如果不停止容器的话,会报如下的错误:
$ docker rm musing_lehmann
Error response from daemon: You cannot remove a running container f25dec5468a1fb2c0fe9dd6cd682b582a72c31340196e80ecef7b1a1f0ccbb96. Stop the container before attempting removal or force remove

停止后删除:

$ docker rm musing_lehmann  
musing_lehmann
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值